[De1CTF 2019]Giftbox
我们打开靶机,看到一个网页上的Shell
提示我们输入help可以获得help,我们来看看
我们发现有几个命令,我们看一下都能干啥
下面的login里有几个命令,我们试了一下发现其他几个要登录
我们试着用login命令登录看看。测试一下发现在用户名那里有注入点,可以根据回显进行布尔盲注
写exp之前还需要看看是怎么和服务器通讯的,我们抓包看看
我们发现a参数用来执行命令,totp参数似乎随时间进行变化,我们需要真的它是怎么运行的
在/js/main.js里可以看到这个提示,还有totp的令牌怎么生成的
我们也拿到了令牌
我们进行sql盲注
1 | import requests |
成功爆出密码,我们登录
我们来试一下targeting,launch,destruct那几个命令
似乎是一行一行执行命令的
然后我们发现targeting哪里似乎有点限制,我们来看看限制了啥
经过测试,我们发现targeting前面的code限制了两位
后面的position限制了十二位
code 和 position 也有过滤。
到这,我们来总结一下上面的命令
- targeting code position =>储存一条 $code = “position”;
- launch => 将上面 targeting 起来的 code 按照字典序跑一遍。
- destuct => 清空,恢复初始状态
我们利用PHP特性来写
我们在网络返回的响应里得到了返回的内容
然后我们来看看刚才那个 phpinfo 所返回的内容,由于 content-type 为 json 所以不好看,我们可以存到本地的一个 html 文件然后打开看。
我们可以看到有open_basedir,我们需要想办法绕过,可以利用 https://xz.aliyun.com/t/4720 的方法绕过。
绕过的 payload 如下。
1 | chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('flag')); |
然后我们写个exp来把这个 payload 打过去
1 | #!/usr/bin/env python3 |
运行,在结果里看到flag