密码管理利器: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
私有权限定义错误导致数据被任意访问
私有权限定义经常发生的风险是:定义了私有权限,但是却根本没有定义私有权限的级别,或者定义的权限级别不够,导致恶意应用只要声明这个权限就能够访问到相应的Content Provider提供的数据,造成数据泄露。
以公开的乌云漏洞WooYun-2014-57590为例:
某网盘客户端使用了自己的私有权限,但是在AndroidManifest中却没有定义私有权限,其它APP只要声明这个权限就能访问此网盘客户端提供的Provider,从而访问到用户数据。
在网盘客户端的AndroidManifest中注册Provider时,声明了访问时需要的读写权限,并且权限为客户端自定义的私有权限
但是在AndroidManifest中却没有见到私有权限“com.huawei.dbank.v7.provider.DBank.READ_DATABASE”和“com.huawei.dbank.v7.provider.DBank.WRITE_DATABASE”的定义
反编译客户端后查看到的URI,根据这些可以构造访问到Provider的URI
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
私有权限定义经常发生的风险是:定义了私有权限,但是却根本没有定义私有权限的级别,或者定义的权限级别不够,导致恶意应用只要声明这个权限就能够访问到相应的Content Provider提供的数据,造成数据泄露。
以公开的乌云漏洞WooYun-2014-57590为例:
某网盘客户端使用了自己的私有权限,但是在AndroidManifest中却没有定义私有权限,其它APP只要声明这个权限就能访问此网盘客户端提供的Provider,从而访问到用户数据。
在网盘客户端的AndroidManifest中注册Provider时,声明了访问时需要的读写权限,并且权限为客户端自定义的私有权限
但是在AndroidManifest中却没有见到私有权限“com.huawei.dbank.v7.provider.DBank.READ_DATABASE”和“com.huawei.dbank.v7.provider.DBank.WRITE_DATABASE”的定义
反编译客户端后查看到的URI,根据这些可以构造访问到Provider的URI
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
在进行APP设计时,要清楚哪些Provider的数据是用户隐私数据或者其他重要数据,考虑是否要提供给外部应用使用,如果不需要提供,则在AndroidManifes文件中将其exported属性显式的设为“false”,这样就会减少了很大一部分的攻击面。
人工排查肯定比较麻烦,建议开发者使用阿里聚安全提供的安全扫描服务,在APP上线前进行自动化的安全扫描,尽早发现并规避这样的风险。
注意:
由于Android组件Content Provider无法在Android 2.2(即API Level 8)系统上设为不导出,因此建议声明最低SDK版本为8以上版本(这已经是好几年前的SDK了,现在一般都会大于此版本);
由于API level 在17以下的所有应用的“android:exported”属性默认值都为true,因此如果应用的Content Provider不必要导出,建议显式设置注册的Content Provider组件的“android:exported”属性为false;
如果必须要有数据提供给外部应用使用,则做好设计,做好权限控制,明确什么样的外部应用可以使用,如对于本公司的应用在权限定义时用相同签名即可,合作方的应用检查其签名;不过还是尽量不提供用户隐私敏感信息。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
人工排查肯定比较麻烦,建议开发者使用阿里聚安全提供的安全扫描服务,在APP上线前进行自动化的安全扫描,尽早发现并规避这样的风险。
注意:
由于Android组件Content Provider无法在Android 2.2(即API Level 8)系统上设为不导出,因此建议声明最低SDK版本为8以上版本(这已经是好几年前的SDK了,现在一般都会大于此版本);
由于API level 在17以下的所有应用的“android:exported”属性默认值都为true,因此如果应用的Content Provider不必要导出,建议显式设置注册的Content Provider组件的“android:exported”属性为false;
如果必须要有数据提供给外部应用使用,则做好设计,做好权限控制,明确什么样的外部应用可以使用,如对于本公司的应用在权限定义时用相同签名即可,合作方的应用检查其签名;不过还是尽量不提供用户隐私敏感信息。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
TeslaCrypt(以及AlphaCrypt,下文统称为“TC”)算是比较“成熟”的勒索软件,其版本从0.2逐步升级到目前已知的最高版本4.0+(也不知道有没有Insider Preview)。随着版本的升级,其加密和密钥处理技巧也在不断升级。
勒索软件的制作者为了打到目的,通常会给用户一个比特币钱包的地址。用户向该钱包付款之后,可以得到一个解密密钥,用此密钥即可解密。有报告指出,不同的受害者需要向不同的钱包中打款,这暗示着比特币钱包的生成过程可能与加密密钥的产生存在一定关联。因此,先大致了解下钱包是如何生成的。
比特币钱包生成的基本步骤是:
初始化一对可用于ECDSA签名的密钥Public/PrivateBtcKey
用SHA256对PublicBtcKey做蛤希,得到S256_PublicBtcKey
用RIPEMD-160对上一个结果做哈希,然后在哈希前部加入版本号得到VR160_S256_PublicBtcKey
在上一哈希前部加入版本号,并做两次哈希,将结果的前4字节附加在VR160_S256_PublicBtcKey后,最后使用Base58算法编码。这时得到的就是长33个字符的钱包地址。
TC被首次载入时,就生成了一对PublicBtcKey/PrivateBtcKey。其中,PublicBtcKey就是向用户显示的地址,而PrivateBtcKey则被发送给C&C服务器,以进行之后的转账操作。不同版本的TC,这一点是不变的。
TC作者本次公布的密钥是四号密钥,应用于TC3.0以及TC4.0版本。这两个版本都采用了比较完整的分层密钥机制,并且提高了样本隐蔽性。TC4.0的准备过程
准备随机数生成器等;
生成随机数,并用714号曲线(即secp256k1)建立比特币钱包,对应密钥Public_BtcKey和Private_BtcKey;
对Private_BtcKey做SHA-256哈希,得到Private_HashedPRBK,用Public_BtcKey算出钱包地址,一会展示给客户;
用Private_HashedPRBK带入曲线,得到第二对密钥Public_HashedPRBK;
拥有一对密钥Public/Private_MalMaster。这对密钥里,Public_MalMaster是由TC作者置入程序的,而Private_MalMaster则是本次被作者公布的“主密钥”,难以被运算出来;
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
勒索软件的制作者为了打到目的,通常会给用户一个比特币钱包的地址。用户向该钱包付款之后,可以得到一个解密密钥,用此密钥即可解密。有报告指出,不同的受害者需要向不同的钱包中打款,这暗示着比特币钱包的生成过程可能与加密密钥的产生存在一定关联。因此,先大致了解下钱包是如何生成的。
比特币钱包生成的基本步骤是:
初始化一对可用于ECDSA签名的密钥Public/PrivateBtcKey
用SHA256对PublicBtcKey做蛤希,得到S256_PublicBtcKey
用RIPEMD-160对上一个结果做哈希,然后在哈希前部加入版本号得到VR160_S256_PublicBtcKey
在上一哈希前部加入版本号,并做两次哈希,将结果的前4字节附加在VR160_S256_PublicBtcKey后,最后使用Base58算法编码。这时得到的就是长33个字符的钱包地址。
TC被首次载入时,就生成了一对PublicBtcKey/PrivateBtcKey。其中,PublicBtcKey就是向用户显示的地址,而PrivateBtcKey则被发送给C&C服务器,以进行之后的转账操作。不同版本的TC,这一点是不变的。
TC作者本次公布的密钥是四号密钥,应用于TC3.0以及TC4.0版本。这两个版本都采用了比较完整的分层密钥机制,并且提高了样本隐蔽性。TC4.0的准备过程
准备随机数生成器等;
生成随机数,并用714号曲线(即secp256k1)建立比特币钱包,对应密钥Public_BtcKey和Private_BtcKey;
对Private_BtcKey做SHA-256哈希,得到Private_HashedPRBK,用Public_BtcKey算出钱包地址,一会展示给客户;
用Private_HashedPRBK带入曲线,得到第二对密钥Public_HashedPRBK;
拥有一对密钥Public/Private_MalMaster。这对密钥里,Public_MalMaster是由TC作者置入程序的,而Private_MalMaster则是本次被作者公布的“主密钥”,难以被运算出来;
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
内网渗透思路探索 之新思路的探索与验证
基于这样的渗透思路,开始尝试寻找试验目标。
关于试验用目标,有几点要求,首先是在一个工作组环境中,(其次)拥有较多的主机或者较大网络。经过不断寻找,成功渗透进一个满足我需求的内网。
目标是一个学校,渗透的过程比较平常,注入,上shell,反弹不成功,正向反弹,控制服务器,没有太多的亮点。
然后开始针对网络设备进行攻击。利用正向反弹工具,将我的kali接入了内网,定向攻击网关设备。利用snmp的弱口令,直接获取了三层交换的控制权限。
注:kali的snmpwalk 不能利用proxychains走socks5代理,攻击内网机器,暂不清楚原因。
这里需要多说一下,我并没有直接进行固件级别的EXP测试,因为在exploit-db上的路由器固件的远程命令执行exp并不多,有很多的exp并没有公开,并且由于自己没有构造EXP的能力,遂放弃通过EXP获取权限的思路。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
基于这样的渗透思路,开始尝试寻找试验目标。
关于试验用目标,有几点要求,首先是在一个工作组环境中,(其次)拥有较多的主机或者较大网络。经过不断寻找,成功渗透进一个满足我需求的内网。
目标是一个学校,渗透的过程比较平常,注入,上shell,反弹不成功,正向反弹,控制服务器,没有太多的亮点。
然后开始针对网络设备进行攻击。利用正向反弹工具,将我的kali接入了内网,定向攻击网关设备。利用snmp的弱口令,直接获取了三层交换的控制权限。
注:kali的snmpwalk 不能利用proxychains走socks5代理,攻击内网机器,暂不清楚原因。
这里需要多说一下,我并没有直接进行固件级别的EXP测试,因为在exploit-db上的路由器固件的远程命令执行exp并不多,有很多的exp并没有公开,并且由于自己没有构造EXP的能力,遂放弃通过EXP获取权限的思路。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
jsPDF 本地文件包含/路径遍历(CVE-2025-68428)漏洞分析
此漏洞源于 jsPDF (Node.js 构建版) 的部分方法(loadFile, addImage, html, addFont)未对用户传入的文件路径进行严格的过滤与校验。远程攻击者可构造包含路径遍历序列(如 ../)的恶意请求,绕过预期的资源目录限制,读取服务器上的敏感文件(如配置文件、密钥等),并将文件内容嵌入到生成的 PDF 文档中。
漏洞影响
受影响的版本<=3.0.4
已打补丁的版本版本 >=4.0.0
漏洞复现
通过补丁描述可知,提供俩种解决方式
1. 通过控制 Node.js 进程的文件系统访问权限node --permission --allow-fs-read
2. 通过代码层面添加allowFsRead,设置允许读取文件以及目录
继续查看代码,对process.permission以及this.allowFsRead进行判断
读取文件
在readFileSync函数处下一个断点,没有进行任何判断,直接将相对路径解析为绝对路径
读取文件后返回内容,最后调用writeFileSync读取到的文件内容写入文件
新版本必须配置run node with the --permission and --allow-fs-read flags or set the jsPDF.allowFsRead property.
配置allowFsRead后可以成功运行
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
此漏洞源于 jsPDF (Node.js 构建版) 的部分方法(loadFile, addImage, html, addFont)未对用户传入的文件路径进行严格的过滤与校验。远程攻击者可构造包含路径遍历序列(如 ../)的恶意请求,绕过预期的资源目录限制,读取服务器上的敏感文件(如配置文件、密钥等),并将文件内容嵌入到生成的 PDF 文档中。
import { jsPDF } from "jspdf";
const doc = new jsPDF();
doc.addImage("../secret.txt", "JPEG", 0, 0, 10, 10);
doc.save("test.pdf"); 漏洞影响
受影响的版本<=3.0.4
已打补丁的版本版本 >=4.0.0
漏洞复现
通过补丁描述可知,提供俩种解决方式
1. 通过控制 Node.js 进程的文件系统访问权限node --permission --allow-fs-read
2. 通过代码层面添加allowFsRead,设置允许读取文件以及目录
继续查看代码,对process.permission以及this.allowFsRead进行判断
读取文件
在readFileSync函数处下一个断点,没有进行任何判断,直接将相对路径解析为绝对路径
读取文件后返回内容,最后调用writeFileSync读取到的文件内容写入文件
新版本必须配置run node with the --permission and --allow-fs-read flags or set the jsPDF.allowFsRead property.
配置allowFsRead后可以成功运行
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
❤1