# JavaWeb
# 部署 webgoat
- 环境下载并 webgoat 启用环境
1 | webgoat 下载地址 |
注意如果是本地回环地址无法抓取到数据包,需要切换成本地 ip 地址
# jar 文件反编译
拿到 jar 文件,先用 unzip 进行解压,用 IDEA 工具将其打开;
对照数据包,定位 url 如 / WebGoat/PathTraversal/profile-upload-remove-user-input;
在 java 源码中定位到 PathTraversal 的库文件,并右键加载为库后可查到源代码;
在 PathTraversal 中查看 ProfileUploadRemoveUserInput 方法看起功能,对照 html 界面查看传参规则及限制进行绕过。
# jwt 使用及攻击
- jwt 说明
jwt 是用来判断当前的用户是游客、注册用户还是管理员的,写在 cookie 部分,由三部分组成,分别为 header 加密算法、payload 内容,signature 签名组成,中间由小数点隔开,可在 https://jwt.io 上看这个 jwt 的具体内容是什么。
1 | jwt 例子 |
- jwt 攻击
(1)签名没验证空加密
可寻找相关脚本尝试空加密,但是这种概率非常小;
(2)爆破密匙:
如果能够获取到源码拿到加密算法中的加密密匙,可以寻找相关脚本进行破解密钥,由密匙和高级管理用户重新生成 jwt 来跳过身份验证;
jwt 密钥爆破工具链接:https://github.com/brendan-rius/c-jwt-cracker
(3)KID 利用:
kid 参数用于读取密钥文件,但系统并不会知道用户想要读取的到底是不是密钥文件,所以,如果在没有对参数进行过滤的前提下,攻击者可以读取到系统的任意文件的
# javaweb 其他漏洞
(1)目录遍历:有的目录做了限制只能解析 jpg/png 文件,但是在上传文件时跳过了这个限制,将文件上传到了其他目录,而其他目录也有可能是可以解析脚本语言的。
(2)认证绕过:将用户上传的数据与数据库比对,如果用户上传的两个键值在数据库中不存在即 a=null&b=null,则可以伪造两个数据库不存在的 key 值进行认证绕过。
(3)组件漏洞:java 的组件有很多,如 log 4 j、xstream 等 jar 包存在安全漏洞的话,则可以通过寻找相关漏洞版本的 poc 尝试漏洞利用。
(4)其他中高危:不安全的反序列化、XML 外部实体、访问控制(隐藏属性、越权)。
# javaScript
# js 渗透知识
(1)什么是 js 渗透
在 Javascript 中也存在变量和函数,当存在可控变量及函数调用即可参数漏 洞 JS 开发的 WEB 应用和 PHP,JAVA,NET 等区别在于即没有源代码,也可以通过浏览器的查看源代码获取真实的点。所以相当于 JS 开发的 WEB 应用属于 白盒测试 (默认有源码参考)。
(2)如何判定 JS 开发应用
插件 wappalyzer、源代码简短、引入多个 js 文件、一般有 /static/js/app.js 等顺序的 js 文件、cookie 中有 connect.sid。
(3)如何利用 js 代码
寻找接口,手机号码登录,验证码接收等文件,验证对方逻辑、或逻辑考 虑不全面的地方;如根据返回的验证码是 200 判断验证码有效,则可以测试修改返回包中的验证码返回值是否能绕过,如有一个重置手机号密码的 url 地址,可以直接访问测试是否有认证限制;也可以寻找框架漏洞测试如 node.js/vue.js, 框架漏洞较少。
# js 文件获取
(1)如何获取更多的 JS 文件?
JsFinder、Packer-Fuzzer、扫描器后缀替换字典
(2)如何快速获取价值代码?
1 | 快速获取有价值的js代码 |
(3)js 安全漏洞
前端验证修改返回数据包、URL 地址泄漏、未授权访问、框架漏洞
# python
# pyc 文件反编译
- PY 反编译 PYC 编译文件反编译源码
pyc 文件是 py 文件编译后生成的字节码文件 (byte code),pyc 文件经过 python 解释器最终会生成机器码运行。因此 pyc 文件是可以跨平台部署的,类似 Java 的.class 文件,一般 py 文件改变后,都会重新生成 pyc 文件。
1 | pyc反编译平台: |
# SSTI 模板注入
(1)什么是 SSTI? 有什么漏洞危害?
漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作 为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执 行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执 行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。
(2)如何判断检测 SSTI 漏洞的存在?
输入的数据会被浏览器利用当前脚本语言调用解析执行
(3)SSTI 安全问题在生产环境那里产生?存在模版引用的地方,
如 404 错误页面展示
存在数据接收引用的地方,如模版解析获取参数数据
一般需要获取到源码之后再去分析漏洞产生的地方,黑盒测试比较难发现
# SSTI 利用代码
漏洞详情:https://blog.csdn.net/houyanhua1/article/details/
1 | 利用代码分析 |
-
url_for () 函数是用于构建操作指定函数的 URL, url_fo 会返回视图函数对应的 URL。如果定义的视图函数是带有参数的,则可以将这些参数作为命名参数传入
/shrine/{{url_for.__globals__}}
/shrine/{{url_for.__globals__['current_app'].config}}
-
get_flashed_messages () 函数是获取传递过来的数据,返回之前在 Flask 中通过 flash () 传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages () 方法取出 (闪现信息只能取出一次,取出后闪现信息会被清空)。
/shrine/{{get_flashed_messages.__globals__}}
/shrine/{{get_flashed_messages.__globals__['current_app'].config}}
# SSTI 反弹 shell
1 | 常用来确定是否存在SSTI漏洞的payload: |