sql注入的手法分类
0x00 联合查询
联合查询就是利用
union select
语句,该语句会同时执行两条select 语句,实现跨库、跨表查询。
<?php
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
}
?>
联合查询。
没有过滤可以进行拼接,有可以回显点
echo 'Your Login name:'. $row['username'];
echo 'Your Password:' .$row['password'];
0x01 报错注入
报错注入的原理,在错误信息中执行SQL 语句。通过updatexml(),extractvalue(),floor()
<?php
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo 'Your Login on';
}
else
{
print_r(mysql_error($row));
}
?>
报错注入
构造updatexml(),extractvalue(),floor(),有可以错误回显点
print_r(mysql_error($row));
0x02 布尔盲注
页面中有布尔类型的状态,可以根据布尔类型状态,对数据库中的内容进行判断
<?php
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo 'Your Login on';
}
else
{
}
?>
布尔盲注
布尔类型状态
if($row)
{
echo 'Your Login on';
}
else
{
}布尔盲注是指构造SQL判断语句
长度判断 length(database())=8
按位测试 ascii(substr(database(),1,1))=115
对应的asll码
0x03 延时注入
利用sleep() 语句的延时性,以时间线作为判断条件。
在注入结果不会被输出,并且不管注入成功还是失败页面始终只有一个反应时
<?php
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
?>
0x04 堆叠查询
一次HTTP 请求,可以同时执行多条SQL 语句
d=2';update users set password='123456'--+
<?php
$id=$_GET['id'];
$con1 = mysqli_connect($host,$dbuser,$dbpass,$dbname);
if (mysqli_connect_errno($con1))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
@mysqli_select_db($con1, $dbname) or die ( "Unable to connect to the database: $dbname");
}