宽字节注入与二次注入[文末彩蛋]

释放双眼,带上耳机,听听看~!


在进行php 连接mysql 时,当设置”ser character_set_client=gbk” 时会导致一个编码转换的注入问题,也就是熟悉的宽字节注入

当存在宽字节注入时,%df%27 可把程序中过滤的\ (%5c)吃掉。

例如:/1.php?id=1存在宽字节注入时,则: /1.php?id=-1’and 1=1%23 单引号会被转义成 \’

但是提交:/1.php?id=-1%df’and 1=1%23 时,%df和\ 反斜杠(%5c) 组合 %df%5c 编码后是一个汉字,这时候单引号依然存在,则会闭合成功,形成注入漏洞。

形成原因:由于设置Mysql 服务器客户端数据编码是GBK ,set character_set_client=gbk执行语句时进行GBK 转码时形成攻击,通常都设置方法是:SET NAMES ‘gbk’,等同于:

 SET
 character_set_connection=’gbk’,
 character_set_results=’gbk’,
 character_set_client=’gbk’

[节选自尹毅的代码审计《企业级web代码安全架构》]    

在线上靶子上试一下

 https://www.xss.tv/payload/sql/sql-wide.php?id=5%20and%201=2%df%27%20and%201=2%23

我们提交的语句是

 and 1=2 %df'and 1=1%23

原理

%df%27= >(addslashes)>%df%5c%27>(GBK)>運’ 用户输入=>过滤函数=>代码层的$sql>mysql处理请求==>mysql中的sql

 默认编码character_set_client>根据character_set_connection转码>更新数据库时转化成字段 所对应的编码

宽字节注入修复

使用mysql_set_charset(GBK)指定字符集

使用mysql_real_escape_string进行转义

代码审计

全局搜索关键词

SET  NAMES

 mysql_query("SET NAMES gbk");

character_set_client=gbk

mysql_set_charset(‘gbk’)

二阶注入**

一阶注入:

  1. 一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的

  2. .攻击者在http请求中提交非法输入

  3. 应用程序处理非法输入,使用非法输入构造SQL语句

  4. 在攻击过程中向攻击者返回结果

二阶注入:

  1. 攻击者在http请求中提交恶意输入

  2. 恶意输入保存在数据库中

  3. 攻击者提交第二次http请求

  4. 为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句

  5. 如果攻击成功,在第二次请求响应中返回结果

 <?php
 $a=addslashes($GET['id']);
 $b=urldecode($a);
 echo '$a='.$a;
 echo '<br/>';
 echo '$b='.$b;
 ?>

addslashes函数,将单引号等字符 转义变成\’。

数据存进数据库后,数据又被还原,在这种情况下,如果发现一个新的注入同 时引用了被插入的数据库数据,就可以实现闭合新发现的注入漏洞引发二次注入

 https://www.xss.tv/payload/sql/sql-two.php?id=9%27and1=1
 select * from article where id = 9'and1=1

在线靶子练习,也可以使用上述代码进行练习

代码审计中也是通过搜索urldecode和rawurldecode挖掘二次注入

线上靶场练习,靶场不错,

http://www.xss.tv/index.php?key=65d9916f6c399b24#

彩蛋

兄弟的渗透导航,很不错,推荐大家收藏

https://www.shentoushi.top/

也可以点击原文哦

本文源自微信公众号:渗透云笔记

人已赞赏
安全工具

Ubuntu Server 第八章 DNS服务

2019-10-16 17:03:56

安全工具

Linux部分常用命令学习记录

2019-10-16 17:04:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索