Menu

SQL盲注之报错注入总结

0 Comment

其实在前几篇文章当中也有提到过一些报错注入的知识,但还不是很系统,今天这次我通过一个栗子来总结一下SQL报错注入。

任意门:http://ctf5.shiyanbar.com/web/baocuo/index.php

这道题没有登陆框,但需要POST方法来提交数据,我们可以用hackbar来实现

用burp抓包后放入repeater里面来重复提交

提交任意数据,不出意外的登陆失败

看来在username和password都存在着注入点

先在username和password上fuzz一波,看过滤掉了哪些关键字和关键符号

先创建一个txt文件,里面总结上关键字和关键符号

在burp的intruder上fuzz一波

先fuzz一下username

load进txt文件

可以看到,context length为270和273的都是被禁止的

所以说username禁掉了()=等符号 ,但updatexml等报错函数没有禁掉

同种方法我们再来fuzz一波password,看有什么符号被禁掉

我们可以看到password过滤掉了updatexml和extractvalue两个报错函数,所以在password参数上不能使用报错函数了(其实这里出题人忘了过滤掉exp()这个报错函数,所以其实还是可以在password参数里直接使用报错函数的,我们在后面会具体展示)

这里我们先用第一种方法——HPF(http分割注入)

我们回到repeater里来构造语句

username参数可以使用updatexml等报错函数,但却不能用()

但password可以用(),这样就可以进行构造

username=1′ and updatexml/*&password=*/(1,concat(0x24,(select database()),0x24),1) and ‘1

这个构造语句把中间的password参数给注释掉了,形成了完整的updatexml报错函数

在=号被过滤的情况下,可以用 regexp database()或者regexp ‘ffll44jj’,in (6572726f725f62617365645f687066),!(table_schema<>database())或者      !(table_schema<>’error_based_hpf’)

爆出flag

前面还说过还有一个报错函数exp()没有过滤掉,我们来简单用一下这个函数。

username=1&password=2′ or (exp(~(select*from(select value from ffll44jj)a)))||’1

想了解exp这个报错函数的可以看看这篇文章https://osandamalith.com/2015/07/15/error-based-sql-injection-using-exp/

中文版http://drops.xmd5.com/static/drops/tips-8166.html

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注