SQL注入笔记 09#

sql二次注入##

为什么要进行编码?

因为原始的格式并不适合传输,比如说一些+,=,&在http请求中会与原始的参数尝试冲突。

例如:http//:www.test.com/index.php?id=1&name=admin&pwd=123

列如用户输入的用户名为:

name=admin=

name=admin&

这样会与前后尝试冲突,所以我们需要将&和=符号进行编码。

什么是二次编码注入?

二次编码注入是在面对php代码或配置,对输入的’(单引号)进行转义的时候,在处理用户输入数据时存在问题,可以绕过转义。

php代码中的urldecode()与php本身处理编码时,两者配合失误,可构造数据消灭\。

####因为sqli-labs里面没有二次编码的页面,所以我们要自己添加一个二次编码注入页面供我们练习,下面是代码:



   < ?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables 
if(isset($_GET['id']))
{
	$id=mysql_real_escape_string($_GET['id']);
	echo 'mysql_real_escape_string:'.$id.'
'; $id=urldecode($id); echo 'urldecode:'.$id.'
'; //connectivity $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 "
"; echo 'your password:'.$row['password']; echo "</font>"; } else { echo "<color= '#99FF00'>"; print_r(mysql_error()); echo "</font>"; } } else{echo "Please input the ID as parameter with numeric value";} ?>

代码分析:

漏洞利用:

url添加’:http://127.0.0.1/sqli-labs-master/Less-1/doublecode.php?id=1%27

发现进行了对’进行了转义

此时我们利用php内置函数urldecode进行第二次转义

http://127.0.0.1/sqli-labs-master/Less-1/doublecode.php?id=1%2527

原因是:%25进行了编码变成了%,之后urldecode将%27再次转义成为了1’

实现了注入:

赞 赏