payload sql注入_宽字节注入与二次注入

在进行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 '
'; 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挖掘二次注入

欢迎关注作者微信公众渗透云笔记

98ec1d06c0df6798ebed1dcc931a399a.png
1a8c9832dd2d668851ee4cdff0f36f02.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值