SQL花式延时/布尔注入与PHP白名单函数利用方法

本文介绍了在CTF比赛中遇到的SQL时间盲注问题,包括如何绕过过滤机制,使用rpad、笛卡尔积、get_lock和benchmark等方法实现延时注入。此外,文章还探讨了PHP白名单函数的利用,利用base_convert和异或运算构造payload,执行系统命令。
摘要由CSDN通过智能技术生成

0x01 冗长的前奏:

    来源于两道CTF题目,引发自闭中的一点点思考。

    想中止这一切菜鸡的挣扎。

(顺便分享一篇大佬的SQL注入文章https://blog.csdn.net/nzjdsds/article/details/86767711

 

 

0x02 CTF中的强行时间盲注

2-1题目情况:

  

 

 

2-2题目思路

    先尝试常规方法

admin' and '1'='1 提示密码错误

admin' andd '1'='1 提示数据库操作失败

说明是字符型,没有过滤空格、单引号,我们的语句是生效的。

 

但发现or if sleep benchmark会被替换成QWQ~卖萌,就没法任意的登录了

(过滤or的坑还在于,information_shcema中有 or )

通过fuzz,测试得出|竖线也会被替换成QWQ~

 

    尝试绕过(利用可能删除SQL语句中的尖括号,重拼接敏感单词)

发现写成 o<a>r 会变成 or

自动删去<a> ,规则是完整尖括号,中间字母开头,例如<abcdefgh12345>都会整个删掉,<1abc>则不删。

原理大概是,为了防止html标签进入数据库,在出库显示的时候,直接html注入,或者xss了,所以做的过滤。

 

    即使成功拼接出了or,还提示数据库错误,无法万能密码登录

    想想语句,大概是 select * from user where username='xxx' and password='xxx'

这样的语句,只好盲注,但发现sleep()不能用。

 

 

2-3 不用sleep的延时注入

  rpad函数

主要MySQL、Oracle中

rpad(str1,length,str2)

如select rpad('abc',10,'z');

abc只有3位,要用7位'z'去凑齐10位length

结果如下:

此函数也有从头截断功能,若需要从abcdef中截取abc,只需要Length为3

第一个参数也可以是数字

 

那么用这个函数怎么造成延时呢?

1' ^( (ascii(substr(user(),1,1))-99) and (concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值