updated:

ADWorldCTF-Web(4)


题目如下

根据描述,这个网站可以检测在线服务的状态,经笔者测试,输入的内容以get方式通过一个名叫url的参数提交,而且当输入有效的ip地址时,网页会返回ping的结果。然而当笔者试图通过拼接的方式来执行命令时,网站提示Invalid URL,这说明网站会对输入的特殊字符进行过滤。

到这里笔者一时没有了思路,因此只能看看大佬们的wp,发现了一种叫做模糊测试的东西,它可以对特殊字符逐个进行测试,看看那些字符可以绕过网站的过滤。这里我们用crunch和wfuzz工具进行测试。

先用crunch工具生成特殊字符的字典

1
crunch 1 1 -t ^ > special.txt

再用wfuzz工具进行测试

1
wfuzz -z file,special.txt -X GET http://111.198.29.45:53694/index.php?url=FUZZ

测试结果如下:

现在线索已经出现了,重点落在“@”,“/”,“-”三个字符上。

其实到这里如果没有额外的信息很难做下去,然而原本的赛题上有提示,要求读一下PHP CURL手册,我们分别google一下php curl + 刚刚的三个字符,发现一种使用方法是@加上文件全路径的方式附加文件

来自https://jasonhzy.github.io/2016/05/04/php-curl-file/

因此我们可以令url=@文件路径来查看文件内容,然而我们还不知道要看什么文件,这时就需要用到另一种获取信息的技巧,即报错内容。

大佬的wp是利用了url编码的范围限制进行了类似于宽字符注入的操作,笔者再次进行的模糊测试也看到了这一点。

当url编码大于7Fh时报错

报错信息如下

在报错信息中可以找到DATABASE的路径

flag的格式为WHCTF{xxx},因此payload如下:

1
curl http://111.198.29.45:53694/index.php?url=@/opt/api/database.sqlite3  grep -a AWHCTF

← Prev Matlab学习笔记(1) | PHP反序列化漏洞 Next →