JavaScript有效载荷和支持软件将用作XSS有效载荷或后剥削植入物,以在使用目标应用程序时监视用户。还包括一个用于在客户端执行自定义JavaScript有效载荷的C2。
javascript-for-Red-Teams'https://trustedsec.com/blog/js-tap-tap-weponizing-javascript-for-red-teams
JS-TAP版本1:的Shmoocon的简短演示
Hackspacecon的JS-TAP版本2的演示,包括C2以及如何将其用作后剥削植入物:
在此Webinar:中也可以看到演示
有效载荷不需要运行有效载荷的目标用户对正在攻击的应用程序进行身份验证,并且除了找到将JavaScript进入应用程序的方法之外,它不需要任何事先了解应用程序的知识。
JS-TAP没有攻击应用程序服务器本身,而是专注于应用程序的客户端,并大量启动客户端代码。
示例JS-TAP有效载荷包含在有效载荷目录中的telemlib.js文件中,但是该目录中的任何文件都未经身份验证。将telemlib.js文件复制到您希望的任何文件名,并根据需要修改配置。该文件尚未被混淆。在使用之前,强烈考虑更改端点的命名,剥离评论并高度混淆有效载荷。
在使用公开曝光的服务器上之前,请确保仔细查看下面的配置部分。
陷阱模式通过使用iframe陷阱技术建立持久性来对抗这一目标。 JS-TAP有效负载将创建一个完整的IFRAME,并在应用程序中的其他地方启动用户。此开始页面必须提前配置。在initGlobals()功能中,搜索window.taperstartingPage变量,并将其设置为目标应用程序中的适当启动位置。
在陷阱模式下,JS-TAP监视用户在iFrame陷阱中的位置,并欺骗浏览器的地址栏以匹配iframe的位置。
请注意,如果设置CSP或X-Frame-Options标头,则针对目标的应用程序必须允许从相同或SERF iframing。基于JavaScript的帧轴也可以防止iFrame陷阱工作。
请注意,在应用程序的非常特定的位置,或者当我不确定该应用程序在应用程序的认证部分内使用什么资源时,我很幸运地使用陷阱模式在应用程序的非常特定的位置进行剥削植入物。您可以在登录页面中放置一个植入物,并使用陷阱模式和陷阱模式开始页面设置为window.location.href(即当前位置)。当用户访问登录页面时,陷阱将设置,并希望将其包含在IFRAME陷阱内的应用程序的身份验证部分中。
用户刷新页面通常会破坏/逃脱iFrame陷阱。
如果您将有效载荷直接添加到目标应用程序中,则通常使用
用户以植入模式刷新页面通常会继续运行JS-TAP有效载荷。
示例:
mkdir jstapenvironment
Python3 -M Venv Jstapenvonment
来源JSTAPENVIRNTMENT/bin/AICTATE
CD Jstapenvironment
git克隆https://github.com/hoodoer/js-tap
CD JS-TAP
pip3 install -r sumpliont.txt
在调试/单线模式:中运行
python3 jstapserver.py
使用枪gunicorn多线程(生产使用):
./jstaprun.sh在启动上生成了一个新的管理密码。如果您没有在启动打印语句中捕获它,则可以找到保存到admincreds.txt文件的凭据。
如果Jstapserver在启动时找到了现有的数据库,它将询问您是否要将现有客户端保存在数据库中或将这些表放置以启动。
请注意,在Mac上,我还必须在Python之外安装Libmagic。
在本地使用JS-TAP的BREW安装libmagic播放是可以的,但是要在适当的订婚中使用,您需要在公开访问的VPS上运行JS-TAP和设置JS-TAP,并设置为highly设置为true。使用前端的Nginx处理有效的证书。
如果将PROXYMODE设置为True,则JS-TAP服务器将以HTTP模式运行,并从proxyMode标头中获取客户端IP地址,该标题需要将其配置为设置。
当X-Forwarded-For设置为false时,JS-TAP将使用自签名的证书运行,这对于测试很有用。客户端IP将从客户端的源IP中获取。
使用Gunicorn为应用程序服务时的配置有很大的差异是您需要配置工人数量(重量重量过程)和线程(轻量级服务过程)。 JS-TAP是一个非常i/o的重型应用程序,因此除了工人之外,使用线程对扩展多处理器机器的应用程序是有益的。请注意,如果您在同一盒子上使用Nginx,则需要配置NGNIX以使用多个进程,以免代理本身上的瓶颈。
在JSTAPRUN.SH脚本的顶部是jsTapServer.py和numWorkers参数。我喜欢为工人使用CPU + 1的数量,以及4-8个线程,具体取决于处理器的强度。对于nginx的configu
Changelogs
项目公告中记录了重大更改:正在加载...
github.com
Demo
您可以阅读有关JS-TAP的原始博客文章:javascript-for-Red-Teams'https://trustedsec.com/blog/js-tap-tap-weponizing-javascript-for-red-teams
JS-TAP版本1:的Shmoocon的简短演示
Upgrade warning
我不打算为数据库创建迁移脚本,并且版本号凸起通常涉及数据库架构更改(检查ChangElogs)。您可能应该在版本凹痕上删除JSTAP.DB数据库。如果您在JS-TAP服务器中具有自定义有效载荷,请确保在升级之前导出它们。Introduction
JS-TAP是一种通用的JavaScript有效负载和支持软件,可帮助红色团队攻击WebApps。 JS-TAP有效载荷可用作XSS有效载荷或后剥削植入物。有效载荷不需要运行有效载荷的目标用户对正在攻击的应用程序进行身份验证,并且除了找到将JavaScript进入应用程序的方法之外,它不需要任何事先了解应用程序的知识。
JS-TAP没有攻击应用程序服务器本身,而是专注于应用程序的客户端,并大量启动客户端代码。
示例JS-TAP有效载荷包含在有效载荷目录中的telemlib.js文件中,但是该目录中的任何文件都未经身份验证。将telemlib.js文件复制到您希望的任何文件名,并根据需要修改配置。该文件尚未被混淆。在使用之前,强烈考虑更改端点的命名,剥离评论并高度混淆有效载荷。
在使用公开曝光的服务器上之前,请确保仔细查看下面的配置部分。
Data Collected
Client IP address, OS, Browser User inputs (credentials, etc.) URLs visited Cookies (that don't havehttponlyflag set) Local Storage Session Storage HTML code of pages visited (if feature enabled) Screenshots of pages visited Copy of Form Submissions Copy of XHR API calls (if monkeypatch feature enabled)Endpoint Method (GET, POST, etc.) Headers set Request body and响应主体副本的Fetch API调用(如果启用了MonkeyPatch功能)端点方法(获取,发布等)设置请求主体和响应主体Note:能够接收XHR副本和FetchAPI调用的能力。在植入物模式下,仅当前只能复制提取API。Operating Modes
有效载荷具有两种操作模式。该模式是trap还是implant设置在initGlobals()功能中,搜索window.taperMode变量。Trap Mode
陷阱模式通常是您用作XSS有效载荷的模式。执行XSS有效载荷通常是短暂的,用户查看“恶意JavaScript有效负载运行”的页面可能会关闭“浏览器”选项卡(页面不有趣)或在应用程序中的其他地方导航。在这两种情况下,有效载荷都将从内存中删除并停止工作。 JS-TAP需要长时间运行,否则您将无法收集有用的数据。陷阱模式通过使用iframe陷阱技术建立持久性来对抗这一目标。 JS-TAP有效负载将创建一个完整的IFRAME,并在应用程序中的其他地方启动用户。此开始页面必须提前配置。在initGlobals()功能中,搜索window.taperstartingPage变量,并将其设置为目标应用程序中的适当启动位置。
在陷阱模式下,JS-TAP监视用户在iFrame陷阱中的位置,并欺骗浏览器的地址栏以匹配iframe的位置。
请注意,如果设置CSP或X-Frame-Options标头,则针对目标的应用程序必须允许从相同或SERF iframing。基于JavaScript的帧轴也可以防止iFrame陷阱工作。
请注意,在应用程序的非常特定的位置,或者当我不确定该应用程序在应用程序的认证部分内使用什么资源时,我很幸运地使用陷阱模式在应用程序的非常特定的位置进行剥削植入物。您可以在登录页面中放置一个植入物,并使用陷阱模式和陷阱模式开始页面设置为window.location.href(即当前位置)。当用户访问登录页面时,陷阱将设置,并希望将其包含在IFRAME陷阱内的应用程序的身份验证部分中。
用户刷新页面通常会破坏/逃脱iFrame陷阱。
如果您将有效载荷直接添加到目标应用程序中,则通常使用
Implant Mode
植入物模式。也许您在服务器上有一个外壳,该壳托管了应用程序的JavaScript文件。将有效载荷添加到整个应用程序中使用的JavaScript文件(jQuery,main.js等)。理想情况下,哪个文件实际上取决于所讨论的应用以及它如何使用JavaScript文件。植入物模式不需要配置一个启动页,也不需要使用iframe陷阱技术。用户以植入模式刷新页面通常会继续运行JS-TAP有效载荷。
Installation and Start
需要Python3。 JSTAPSERVER需要大量依赖项,您鼓励您使用Python虚拟环境来隔离服务器软件的库(或任何您喜欢的隔离方法)。示例:
mkdir jstapenvironment
Python3 -M Venv Jstapenvonment
来源JSTAPENVIRNTMENT/bin/AICTATE
CD Jstapenvironment
git克隆https://github.com/hoodoer/js-tap
CD JS-TAP
pip3 install -r sumpliont.txt
在调试/单线模式:中运行
python3 jstapserver.py
使用枪gunicorn多线程(生产使用):
./jstaprun.sh在启动上生成了一个新的管理密码。如果您没有在启动打印语句中捕获它,则可以找到保存到admincreds.txt文件的凭据。
如果Jstapserver在启动时找到了现有的数据库,它将询问您是否要将现有客户端保存在数据库中或将这些表放置以启动。
请注意,在Mac上,我还必须在Python之外安装Libmagic。
在本地使用JS-TAP的BREW安装libmagic播放是可以的,但是要在适当的订婚中使用,您需要在公开访问的VPS上运行JS-TAP和设置JS-TAP,并设置为highly设置为true。使用前端的Nginx处理有效的证书。
Configuration
JS-Tap Server Configuration
Debug/Single thread config
如果您在单线螺纹模式下使用jstapserver.py脚本运行JS-TAP(非常适合测试/演示),则直接在JSTAPSERVER.PY脚本中有配置选项。Proxy Mode
用于生产使用JS-TAP应托管在公开的服务器上,并提供Letsencrypt这样的人的适当SSL证书。部署此目的的最简单方法是允许Nginx充当前端,以JS-TAP并处理LetSencrypt证书,然后将解密的流量转发到本地的HTTP流量(即,在同一VPS上运行NGINX和JS-TAP运行)。如果将PROXYMODE设置为True,则JS-TAP服务器将以HTTP模式运行,并从proxyMode标头中获取客户端IP地址,该标题需要将其配置为设置。
当X-Forwarded-For设置为false时,JS-TAP将使用自签名的证书运行,这对于测试很有用。客户端IP将从客户端的源IP中获取。
Data Directory
proxyMode参数告诉js-tap在sqlite数据库和循环目录中要在哪里使用该目录。并非所有的“战利品”存储在数据库中,尤其不是屏幕截图和刮擦HTML文件。Server Port
To change the server port configuration see the last line ofdataDirectoryapp.run(debug=False, host='0.0.0.0', port=8444, ssl_context='adhoc')Gunicorn Production Configuration
Gunicorn is the preferred means of running JS-Tap in production.可以在Jstaprun.sh bash脚本中设置上述相同的设置。启动脚本中设置的值优先于JSTAPSERVER.PY脚本在JS-TAP启动时直接在Gunicorn启动脚本开始时设置的值。使用Gunicorn为应用程序服务时的配置有很大的差异是您需要配置工人数量(重量重量过程)和线程(轻量级服务过程)。 JS-TAP是一个非常i/o的重型应用程序,因此除了工人之外,使用线程对扩展多处理器机器的应用程序是有益的。请注意,如果您在同一盒子上使用Nginx,则需要配置NGNIX以使用多个进程,以免代理本身上的瓶颈。
在JSTAPRUN.SH脚本的顶部是jsTapServer.py和numWorkers参数。我喜欢为工人使用CPU + 1的数量,以及4-8个线程,具体取决于处理器的强度。对于nginx的configu