sql-labs less33-35 宽字节注入

2019-05-20  本文已影响0人  Yix1a

原url:

http://192.168.137.138/sqli-labs-master/Less-33

按照提示添加id值


               AddSlashes()

定义和用法

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

*单引号(')

*双引号(")

*反斜杠(\)

*NULL

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

实例:

<?php
str = "Who's Bill Gates?"; echostr . " This is not safe in a database query.
";
echo addslashes($str) . " This is safe in a database query.";
?>

运行结果

Who's Bill Gates? This is not safe in a database query.
Who's Bill Gates? This is safe in a database query.


前台测试

添加 ' 和 "

页面返回没有变化

页面hint:

Hint: The Query String you input is escaped as : 2'
The Query String you input in Hex becomes : 325c27

和 less-32 有点类似哈

先用 %bf 来试试(宽字节注入)

语句:

1%bf'

效果如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1?'' LIMIT 0,1' at line 1

由页面反馈的信息,得知 闭合条件 是 '

后面的注入方式一样,直接 union select

-----------------------------------less-34-----------------------------------

原url:

http://192.168.137.138/sqli-labs-master/Less-34

由页面看出,这是一个 post 注入

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

这里说一个 hackbar 的小技巧:

之前,每次注入练习,我都是从 url 框中 复制到 hackbar 中,其实有个按钮:

Load URL 这个,点一下,直接获取url(要先访问)

同样的

post注入的时候

(先提交一个用户名和密码(正确和错误都无所谓))然后点 Load URL ,就自动获取了

post格式了

Referrer 注入相同的原理

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

观察到,当 用户名 和 密码 都是正确的时候(也就是成功登陆)

会反馈用户名和密码 的信息

那么 在 成功登陆 后 使用 联合查询 速度更快

不过 在测试 闭合条件的时候,返回效果如下:

Hint: The Username you input is escaped as : admin'
Hint: The Password you input is escaped as : 123

转义了,用上节课的知识

' 前面 加上 一个 81~FE 的 高位 url编码 比如:%ee

效果如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123' LIMIT 0,1' at line 1

页面hint:

Hint: The Username you input is escaped as : admin?'
Hint: The Password you input is escaped as : 123

成功绕过转义

从 语法 错误信息 中 看出,闭合条件不知道有没有猜测正确,

那么现在试试 ') 的闭合条件

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' and password='123' LIMIT 0,1' at line 1

从 password='123' 看出:闭合条件就是 '

联合查询:

Your Login name:1
Your Password:2

接下来就不细说了

--------------------------------------less-35--------------------------------

这是最最最简单的

不信看源码:

// take the variables
if(isset(_GET['id'])) {id=check_addslashes(_GET['id']); //echo "The filtered request is :" .id . "
";

//logging the connection parameters to a file for analysis.
fp=fopen('result.txt','a'); fwrite(fp,'ID:'.id."\n"); fclose(fp);

// connectivity

mysql_query("SET NAMES gbk");//宽字节注入的必备条件,设置宽字节字符集,若不设置,那么宽字节注入无效,因为 mysql 不会按照 宽字节 的理解方式 去组合 %bf%5c,那么单引号也无法逃逸了

sql="SELECT * FROM users WHERE id=id LIMIT 0,1";

id根本就没有 设置闭合条件

上来就直接 union select

所以,这个练习中,addslshes 就是个摆设,因为不用其他字符,也就不用考虑 被转义的问题了

---------------------------------less-33的源码-------------------------------

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");

function check_addslashes(string) {string= addslashes(string); //转义处理 returnstring;
}

// take the variables
if(isset(_GET['id'])) {id=check_addslashes(_GET['id']); //echo "The filtered request is :" .id . "
";

//logging the connection parameters to a file for analysis.
fp=fopen('result.txt','a'); fwrite(fp,'ID:'.id."\n"); fclose(fp);

// connectivity

mysql_query("SET NAMES gbk");
sql="SELECT * FROM users WHERE id='id' LIMIT 0,1";
result=mysql_query(sql);
row = mysql_fetch_array(result);

if($row)
{
echo '<font color= "#00FF00">'; 
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>";  
}

}
else { echo "Please input the ID as parameter with numeric value";}

?>
</font> </div></br></br></br><center>
<img src="../images/Less-33.jpg" />
</br>
</br>
</br>
</br>
</br>
<font size='4' color= "#33FFFF">
<?php
function strToHex(string) {hex='';
for (i=0;i < strlen(string);i++)
{
hex .= dechex(ord(string[i])); } returnhex;
}
echo "Hint: The Query String you input is escaped as : ".id ."<br>"; echo "The Query String you input in Hex becomes : ".strToHex(id);
?>

上一篇下一篇

猜你喜欢

热点阅读