mysql 绕过addslashes_代码审计Day13 - 特定场合下addslashes函数的绕过

原标题:代码审计Day13 - 特定场合下addslashes函数的绕过前言大家好,我们是红日安全-代码审计小组。最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫PHP-Audit-Labs。现在大家所看到的系列文章,属于项目第一阶段的内容,本阶段的内容题目均来自PHP SECURITY CALENDAR 2017。对于每一道题目,我们均给出对应的分析,并结...
摘要由CSDN通过智能技术生成

原标题:代码审计Day13 - 特定场合下addslashes函数的绕过

前言

大家好,我们是红日安全-代码审计小组。最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫PHP-Audit-Labs。现在大家所看到的系列文章,属于项目第一阶段的内容,本阶段的内容题目均来自PHP SECURITY CALENDAR 2017。对于每一道题目,我们均给出对应的分析,并结合实际CMS进行解说。在文章的最后,我们还会留一道CTF题目,供大家练习,希望大家喜欢。下面是第13篇代码审计文章:

Day 13 - Turkey Baster

代码如下:

e3e0b91b768f4bcb8d0f88be32e88ccb.jpeg

这是一道典型的用户登录程序,从代码来看,考察的应该是通过SQL注入绕过登陆验证。代码第33行,通过POST方式传入user和passwd两个参数,通过isValid()来判断登陆是否合法。我们跟进一下isValid()这个函数,该函数主要功能代码在第12行-第22行,我们看到13行和14行调用sanitizeInput()针对user和password进行相关处理。

跟进一下sanitizeInput(),主要功能代码在第24行-第29行,这里针对输入的数据调用addslashes函数进行处理,然后再针对处理后的内容进行长度的判断,如果长度大于20,就只截取前20个字符。addslashes函数定义如下:

addslashes— 使用反斜线引用字符串

stringaddslashes( string$str)

作用:在单引号(')、双引号(")、反斜线()与 NUL(NULL字符)字符之前加上反斜线。

我们来看个例子:

ec38233bc4824b8cb5ef19b0f8e19b6c.jpeg

那这题已经过滤了单引号,正常情况下是没有注入了,那为什么还能导致注入了,原因实际上出在了substr函数,我们先看这个函数的定义:

substr— 返回字符串的子串

stringsubstr( string$string, int$start[, int$length] )

作用:返回字符串string由start和length参数指定的子字符串。

我们来看个例子:

6b9858e59e21b1a0f55e460ac3de52bf.png

那么再回到这里,我们知道反斜杠可以取消特殊字符的用法,而注入想要通过单引号闭合,在这道题里势必会引入反斜杠。所以我们能否在反斜杠与单引号之间截断掉,只留一个反斜杠呢?答案是可以,我们看个以下这个例子。

f98329a99e7ae5568c071043249025b7.png

在这个例子中,我们直接使用题目代码中的过滤代码,并且成功在反斜杠和单引号之间截断了,那我们把这个payload带入到题目代码中,拼接一下第17行-第19行代码中的sql语句。

selectcount(p) fromuseruwhereuser='1234567890123456789' AND password = '$pass'

这里的sql语句由于反斜杠的原因,user = '1234567890123456789'最后这个单引号便失去了它的作用。这里我们让pass=or 1=1#,那么最后的sql语句如下ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值