6.SQL injection


点击跳转到MIDDLE级别

点击跳转到HIGN级别

1.LOW级别:

输入1' OR '1'='1
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
第一个'闭合查询语句中的'号,然后1=1又使等式恒真从而读取了什么数据。

6.SQL injection_第1张图片
image.png

与数据库中的内容核对,结果一致
6.SQL injection_第2张图片
image.png

--------------------------------------------------------------------------------------------------------------------

2.MIDDLE级别:

' . mysql_error() . '
' ); // Get results $num = mysql_numrows( $result ); $i = 0; while( $i < $num ) { // Display values $first = mysql_result( $result, $i, "first_name" ); $last = mysql_result( $result, $i, "last_name" ); // Feedback for end user echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"; // Increase loop count $i++; } //mysql_close(); } ?>

可以看到,Medium级别的代码利用mysql_real_escape_string函数对特殊符号
\x00,\n,\r,,’,”,\x1a进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。

使用burpsuite抓包改包:


6.SQL injection_第3张图片
image.png

6.SQL injection_第4张图片
image.png

--------------------------------------------------------------------------------------------------------------

3.HIGN级别:

Something went wrong.
' ); // Get results $num = mysql_numrows( $result ); $i = 0; while( $i < $num ) { // Get values $first = mysql_result( $result, $i, "first_name" ); $last = mysql_result( $result, $i, "last_name" ); // Feedback for end user echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"; // Increase loop count $i++; } mysql_close(); } ?>

可以看到,与Medium级别的代码相比,High级别的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。但可以被注释掉,只能防止一般的sqlmap注入,还是可以手注出来。


6.SQL injection_第5张图片
image.png

网站怎么避免被SQL注入?

1.参数化查询,提前编译sql语句,使注入失效
2.掐死'号,不让程序被截断
3.限制数据库权限,不允许读写文件,拒绝除select之外的一切不必要操作。

你可能感兴趣的:(6.SQL injection)