sqli-labs通关记 lesson1~10

"""本人网安小白,此贴仅作为记录我个人测试的思路、总结以便后期复习;今后本着少就是多,慢就是快的方式一步一个脚印进行学习,把这个知识点学扎实了,再学另外一个知识点。费曼教授是不是曾经说过以教代学是最好的学习方式?有很多错点可圈可指,所以也请dalao指出不对的地方,所谓教他人的时候也是在稳固自身"""

未做严格排版,后面有时间了再来整理整理

Ps:靶机链接:https://blog.csdn.net/qq_35258210/article/details/112465795

目录

Lesson1

Lesson2

Lesson3

Lesson4

Lesson5

Lesson6

Lesson8

Lesson9

Lesson10


# 边实践变记录后面还有65关卡,每通10关卡记录一贴

Lesson1

1、原语句 select * from users where id =‘$id’ 注入 2、字符型注入:这里使用的是单引号包裹id值

3、验证漏洞:mysql语法报错发现是字符型注入后在最后加个单引号,再加个注释把原来的单引号注释掉,在判断是否存在sql注入 and 1=1 ,and 1=2 返回的结果不一致,所以可能存在sql注入

4、漏洞利用(union联合查询):select * from users where id = ‘1’ union select —+‘

Lesson2

原,可能是这样的

select * from user where id =$id

注入

字符型注入:$id值没有任何引号包括

判断漏洞类型:mysql语法报错发现是数字型注入后在1前加个单引号,在1后面加个单引号把它括起来,再用order by 二分法判断字段长度,判断出来是3,这时使用union select联合查询

漏洞利用:select * from user where id = '1' union select 1,database(),3

Lesson3

1、原语句,可能是这样的

(select * from user where id ='$id')

2、字符型注入:可以看到mysql语法报错$id值是用单引号包括的而且单引号后面还有个括号,可以得知这条查询语句是有一对括号包括起来的

3、判断漏洞类型:知道是单引号字符型漏洞后,在1后面加个单引号代替原来的单引号,再加个括号代替原来的括号,再把后面原来的单引号和括号,这样就可以在我们输入的括号后面使用union select 联合查询了。当然,要在1前面加个-号,因为查询没有-1,所以会执行union后的语句

4、验证利用:(select * from user where id='-1') union select 1,database(),3 %23

Lesson4

1、原语句,可能是这样的

(select * from user where id="$id")

2、字符型注入:$id是有双引号括起来的而且后面还有括号包括,初步判定这条查询语句是用括号包裹的

3、判断漏洞类型:(和lesson3一样的验证手法只不过把单引号改为双引号)知道是双引号字符型漏洞后,在1后面加个双引号代替原来的双引号,再加个括号代替原来的括号,再把后面原来的双引号和括号,这样就可以在我们输入的括号后面使用union select 联合查询了。当然,要在1前面加个-号,因为查询没有-1,所以会执行union后的语句

4、漏洞利用:(select * from user where id="-1") union select 1database(),version() %23

Lesson5

1、原语句可能是这样的

'select * from user where id='$id''

2、判断漏洞类型:此处mysql语句报错发现$id值是用单引号包括的而且整条查询语句都在单引号里,在1后面加个单引号代替,再把另外一个单引号的注释掉;使用and 1=1,and 1=2时只会显示 You are in .... 和什么都不显示,可以初步判定这里不可以直接获取数据库数据,因此不能使用union联合查询,可以尝试使用boolean盲注来判定数据库的内容,先用length函数判定库名的长度,经测试库名的长度为8

知道了长度位8后继续猜测库名的首字符,使用substr函数截取库名的首字符,一般范围在[a-z]、0-9之间,判断是否等于s时显示的是 You are in ... ,判断是否是其他字母是没有显示内容,那么可以断定库名的首字符就是s

知道了库名首字符是s后继续猜测第二个,经反复猜测得出第二个字符是e

这里可以使用burpsuite进行抓包导入字典爆破,标记s字符位置点击Add$

添加密码字典文件点击右上角start开启爆破

下图可以看到s返回的长度和其他是不一样的,而且查看html代码也可以看到是返回了Yuo are in...

可以确定库名第一个字符就是s,接下来修改下substr截取从2开始即可,一直爆破到第八个,就能获取到库名了

经测试得出库名的8个字符为:s,e,c,u,r,i,t,y=security,知道了当前库名后,再继续猜测当前数据库的第一个表名,经过测试得出第一个表名为:emails

验证是否猜测正确,上去数据库管理平台看下,证明猜测的是正确的

漏洞利用:'select * from user where id='1'

' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),6,1)='s' %23

Lesson6

1、原语句可能是这样的,经测试初步判定 select * from user where id="$id"

2、判断漏洞类型:此处mysql语句报错发现$id值是用双引号包括的而且整条查询语句都在双引号里,在1后面加个双引号代替,再把另外一个双引号的注释掉;使用and 1=1,and 1=2时只会显示 You are in ....,回显结果单一可以判定不可以使用boolean注入,这时可以尝试使用绝招 sleep盲注,sleep成功执行证明此处存在sql注入漏洞;使用length判断当前数据库的库名是否大于1,如果大于的话就睡眠5秒,否则返回1就是不睡眠,经反复测试,得知当前数据库库名长度大于8小于7,那就是8咯

大于9返回1,所以得出库名没有大于9所以不执行sleep

这时就可以使用if配合substr猜测当前数据库库名、表名、字段等,这里截取库名的首字符=s时执行了sleep睡眠了s秒,当没判断对的时候返回1不会执行sleep,以此类推反复测试即可获取到想要的数据,步骤和lesson5一样

1、猜测原语句

select * from user where id=$id(因为报错只显示语法错误,没有更多的内容了so猜错了)

看了源码,是这样的:select * from user where id=(('$id'))

2、判断漏洞类型:因为题目特殊,在1后面加单引号双引号只显示语法错误并没有显示其他内容,so偷看了下源码,知道了是双括号和单引号包括的,在1后面加个单引号再加两个括号替换原来的,把后面的'))注释掉,使用and 1=1,and 1=2,回显结果有You are in...Use outfile,还有显示语法错误,经测试此处存在sleep盲注漏洞

sleep盲注漏洞利用:1')) and (if(length(database())>0,sleep(5),1)) %23

sleep盲注漏洞利用:1')) and (if(substr(database(),1,1)='s',sleep(5),1)) %23

也可以用order by查询字段长度,union查询,漏洞利用:

1')) union select 1,if(substr(database(),1,1)='s',sleep(5),1),3 %23

反复测试判断即可获取想要的数据

当然题目是让用outfile输出文件;可以尝试判断是否有读写文件的权限 1')) and(select count() from mysql.user)>0/判断下如果正常返回则表示拥有读写权限,刚网上学的*/--+

返回You are in..Use outfile则表示拥有读写权限,返回语法错误则无权限

嗯。。。。。。瓜皮,写不进去,也看了其他道友的文章,还是写不进,没辙了后面再搞

Lesson8

1、猜测原语句

select * from user where id='$id'

在1后面加双引号显示的结果和1是一样的,加单引号什么都不显示,可以处于判断此处使用单引号闭合,使用单引号替换后再加个注释把后面的单引号注释起来

2、判断注入类型:因为没有报错回显所以此处无法使用union查询,and1=1显示正常,and1=2什么都不显示,初步判断此处存在注入漏洞,由于没有回显内容,所以可以尝试使用绝招sleep盲注

3、sleep盲注漏洞验证利用:' and if(substr(database(),1,1)='s',sleep(5),1) --+

拼接后的sql语句

select * from user where id='1' and if(substr(database(),1,1)='s',sleep(5),1) #'

Lesson9

1、原语句。。。嗯.....这关的条件太苛刻了吧。在1后面加什么都只返回 You are in.... ,and 1=1、1=2返回都没有变化,也不返回正确后者错误,怎么测试都只返回 You are in.... ,so 没猜出来。参考了其他道友的思路,先加个引号闭合,再注释掉后面那不知道什么语句

2、判断注入类型:由于回显的内容太过单一,没测出来是什么类型注入,根据题目指示使用sleep盲注

3、sleep盲注漏洞验证利用:' and if(substr(database(),1,1)='s',sleep(5),1) --+

拼接后应该是这样的:

select * from user where id='1' and if(substr(database(),1,1)='s',sleep(5),1) #'

和前几关的sleep盲注一样,一个一个去猜,猜对了睡眠5秒,否则不睡眠,以此类推。

Lesson10

1、原语句,这题也是time型盲注,和lesson9一样只不过把单引号换成了双引号

select * from user where id="$id"

2、判断注入类型:在1后面添加双引号代替原来的双引号,再把原来的注释掉

3、sleep盲注漏洞验证利用:” and if(substr(database(),1,1)='s',sleep(5),1) --+

拼接后应该是这样的:

select * from user where id=”1“ and if(substr(database(),1,1)='s',sleep(5),1) #“

和前几关的sleep盲注一样,一个一个去猜,猜对了睡眠5秒,否则不睡眠,以此类推。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值