本文主要是介绍sqli-labs ---- Less-2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[地址]: https://github.com/Audi-1/sqli-labs
===================================
注入字符串数据
1.提交一个单引号作为目标查询的数据。观察是否会造成错误,或结果是否与原始结果不同。
如果收到详细的错误信息,可查阅该消息的含义。
2.如果发现错误或其他异常行为,同时提交两个单引号,看会出现什么情况。
数据库使用两个单引号作为转义序列,表示一个原义引号,因此这个序列被解释成引用字
符串的数据,而不是结束字符串的终止符号。如果这个输入导致错误或异常行为消失,
则这个应用程序可能易于受到SQL注入攻击。
3.为进一步核实漏洞是否存在,可以使用SQL连接符建立一个等同于“良性”输入的字符串。
如果应用程序以与处理对应“良性”输入相同的方式处理专门设计的输入,那么它很可能
易于受到攻击。每种数据库使用的字符连接方法各不相同。在易受攻击的应用程序中,
可以注入以下实例构建等同于FOO的输入:
Oracle: '||'FOO
MS-SQL: '+'FOO
MYSQL: ' 'FOO (注意引号之间有个空格)
注入数字数据
如果SQL查询合并用户提交的数字数据,应用程序仍然会将它包含在单引号中,作为字符串
数据进行处理。因此,一定要执行前面描述的针对字符串数据的渗透测试步骤。但是,许多
时候,应用程序会将数字数据以数字格式直接传送到数据库中,并不把它放入单引号中。如
果前面描述的测试方法无法检测到漏洞,还可以采取以下针对数字数据的特殊测试步骤。
1.尝试输入一个结果等于原始数字值的简单数学表达式。例如,如果原始值为2,尝试提交
1+1。如果应用程序做出相同的响应,则表示它易于受到攻击。
2.如果证实被修改的数据会对应用程序的行为造成明显影响,则前面描述的测试方法最为可
靠。例如,如果应用程序使用数字化PageID参数指定应返回什么内容,则用1+1代替2得
到相同的结果明显表示存在SQL注入。但是,如果能够在数字化参数中插入任意输入,但
应用程序的行为却没有发生改变,那么前面的检测方法就无法发现漏洞。
3.如果第一个测试方法取得成功,你可以利用更加复杂的,使用特殊SQL关键字和语法的表
达式进一步获得与漏洞有关的证据。ASCII命令就是一个典型的示例,它返回被提交字符
的数字化ASCII代码。例如,67-ASCII('A')
4.如果单引号被过滤掉,那么前面的测试方法就没有作用。但是,这时可以利用这样一个事
实:即在必要时,数据库会隐含地将数字数据转换为字符串数据。
提示:
在探究应用程序是否存在SQL注入之类的缺陷时,我们常常会犯一个错误,即忘记某
些字符在HTTP请求中具有的特殊含义。如果你希望在攻击有效载荷中插入这些字符,必须谨
慎的对它们进行URL编码,确保应用程序按预料的方式解释它们。
1.&和=用于连接名/值时,建立查询字符产和POST数据块,应当使用%26与%3d。
2.查询字符串不允许出现空格,空格会导致字符串终止,应使用+或%20编码。
3.+被编码为空格,如果想在字符串中使用+,需编码为%2b。因此在前面的数字化
实例中,1+1应使用1%2b1。
4.分号用于分割cookie字段,必须使用%3b对其编码。
部分代码如下:
// connectivity
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '<font color= "#0000ff">';
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
这篇关于sqli-labs ---- Less-2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!