查个壳,是
OD加载后直接运行,通过字符串搜索去查找,并未找到提示信息“口令解码失败”。
尝试再命令窗口输入
所以前面OD解析“口令解码失败”编码问题,搜索不到。再次尝试进入内存
另外找到一篇讨论
不过此处也没什么用了,因为
在输入
此时做了一番思考,作为
那么通过调用栈回溯到
在
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
tElock 1.0 (private) -> tE! *,没脱过,常规脱壳方法尝试弄不掉,百度一番看到挺多经验分享的,但都是0.9x版本的分析,不适用于本版本,那就放弃脱壳了。OD加载后直接运行,通过字符串搜索去查找,并未找到提示信息“口令解码失败”。
尝试再命令窗口输入
bp printf,然后F9,OD断下,此时参数如下,OD并没有解析出中文字符,用工具查看一番,发现是UTF-8编码。所以前面OD解析“口令解码失败”编码问题,搜索不到。再次尝试进入内存
(M)窗口,Ctrl+B后在HEX输入字符的UTF-8编码,然后搜索,果然找到了。另外找到一篇讨论
OD编码问题的文章,有兴趣的可以看看:https://bbs.pediy.com/thread-181118.htm不过此处也没什么用了,因为
bp printf也能找到关键代码。在输入
uid和口令之后,在printf断下,查看此时调用堆栈。调用堆栈
地址 堆栈 函数过程 / 参数 调用来自 结构
1104BE80 00461BBD <jiubugao.printf> jiubugao.00461BB8
1104BE84 1104C160 format = ""
1104BE88 110101B0
1104BEA4 004635DD jiubugao.00461AD0 jiubugao.004635D8
1104BEC4 00462FA1 jiubugao.004635A0 jiubugao.00462F9C
1104BEF8 0047BA5A 包含jiubugao.00462FA1 jiubugao.0047BA58
1104BF28 0047BAF5 jiubugao.0047B9F0 jiubugao.0047BAF0
1104BF4C 0048C220 <jiubugao.printf> jiubugao.0048C21B
1104BF50 1104BF9C format = "?J"
1104BF54 00000001
1104BFCC 0042609A 包含jiubugao.0048C220 jiubugao.00426098
此时做了一番思考,作为
console程序,整个代码都在main中完成,可能大概代码结构如下:int main() {
printf("【春节】解题领红包之三\n");
printf("请输入您的吾爱破解uid:);
scanf("%s", &uid);
printf("请输入您的口令:);
scanf("%s", &code);
if(check(uid, code)) {
printf("口令解码失败");
} else {
//
}
}那么通过调用栈回溯到
mian,真个代码结构就会很清楚了,算法分析也应该会更简单。在
OD中回溯直到0048C220看到结构类似上面猜测的代码,然后dump出来,通过IDA查看确认了一下,应该没错了。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
首先通过wmic ntdomain get domainname,检测一下是否加域。如果加域的话,将域的用户名和密码加入到破解口令列表中。这个列表中存储着常见的弱口令
然后通过findip这个函数,获取主机的ip,网段一类的信息。然后调用scansmb这个函数,这个函数调用scan2函数去检测目标是否开放445。病毒会打开65533端口,如果被扫描的机器打开了65533端口,那就说明已被感染。随后调用validate这个函数
validate函数主要的作用是,通过弱口令密码表,爆破SMB服务。爆破成功的话,将该扫描工具复制到被攻击的机器上运行。
def validate(ip):
for u in userlist2:
for p in passlist:
if u == '' and p != '':
continue
for d in domainlist:
if PSEXEC(ee2, dl, 'cmd.exe /c c:\\windows\\temp\\svchost.exe', u, p, d).run(ip):
print 'SMB Succ!'
return
这是入侵的一种。第二种是通过findip获取网段 ip信息后,调用check_thread这个函数去打ms17-010。所以你会发现这段py代码其实就是python版ms17010的攻击代码,参见https://github.com/worawit/MS17-010/blob/master/zzz_exploit.py
入侵成功后,会在目标机器上执行smb_pwn函数中的代码。直接吧攻击代码贴出来,大家就知道怎么解决这个病毒了
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
然后通过findip这个函数,获取主机的ip,网段一类的信息。然后调用scansmb这个函数,这个函数调用scan2函数去检测目标是否开放445。病毒会打开65533端口,如果被扫描的机器打开了65533端口,那就说明已被感染。随后调用validate这个函数
validate函数主要的作用是,通过弱口令密码表,爆破SMB服务。爆破成功的话,将该扫描工具复制到被攻击的机器上运行。
def validate(ip):
for u in userlist2:
for p in passlist:
if u == '' and p != '':
continue
for d in domainlist:
if PSEXEC(ee2, dl, 'cmd.exe /c c:\\windows\\temp\\svchost.exe', u, p, d).run(ip):
print 'SMB Succ!'
return
这是入侵的一种。第二种是通过findip获取网段 ip信息后,调用check_thread这个函数去打ms17-010。所以你会发现这段py代码其实就是python版ms17010的攻击代码,参见https://github.com/worawit/MS17-010/blob/master/zzz_exploit.py
入侵成功后,会在目标机器上执行smb_pwn函数中的代码。直接吧攻击代码贴出来,大家就知道怎么解决这个病毒了
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
不管使用哪种语言,加载动态链接库后,参考接口使用格式,传入任务JSON,返回检测结果,也可启动WEB API接口,通过http协议进行调用。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
接口调用说明
/* 发起任务,传入任务JSON,格式为:
{
"type": "web", //目标类型web或者service
"netloc": "http://xxx.com", //目标地址,web为URL,service格式为123.123.123.123:22
"target": "wordpress", //目标名称,决定使用哪些POC进行检测
'meta':{
'system': 'windows', //操作系统,部分漏洞检测方法不同系统存在差异,提供给插件进行判断
'pathlist':[], //目录路径URL列表,部分插件需要此类信息,例如列目录漏洞插件
'filelist':[], //文件路径URL列表,部分插件需要此类信息,例如struts2漏洞相关插件
'passlist':[] //自定义密码字典,留空则使用内置默认字典
}
}
返回是否存在漏洞和漏洞检测结果
*/
Check(taskJSON string) (bool, []map[string]string)
// 获取插件列表信息
GetPlugins() []map[string]string
/* 配置设置,传入配置JSON,格式为:
{
"timeout": 15, // 插件连接超时
"aider": "http://123.123.123.123:8088", // 漏洞辅助验证接口,部分漏洞无法通过回显判断是否存在漏洞,可通过辅助验证接口进行判断。
"http_proxy": "http://123.123.123.123:1080", // HTTP代理,所有插件http请求流量将通过代理发送(需使用内置的http请求函数util.RequestDo)
'pass_list': ['passtest'], // 默认密码字典,不定义则使用硬编码在代码里的小字典
'extra_plugin_path': '/tmp/plugin/' // 除已编译好的插件(Go、JSON)外,可指定额外插件目录(仅支持JSON插件),指定后程序会周期读取加载插件
}
*/
SetConfig(configJSON string)
// 开启web接口,如果觉得类型转换麻烦或者想多个系统共用一个实例,可开启后通过web接口进行调用,webapi调用格式请查看例子:/example/call_webapi_test.py
StartWebServer()
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
通过一个简单的例子,来看看如何快速上手Airtest。
例如我现在想使用电脑控制手机,打开微信。
此时,点击下图中方框框住的
此时,把鼠标移动到Airtest右边的手机屏幕区域,鼠标会变成十字型。在微信图标的左上角按下鼠标左键不放,并拖到微信右下角松开鼠标。此时请注意中间代码区域发生了什么变化,如图所示。
好了。以上就是你需要使用电脑打开微信所要进行的全部操作。
点击上方工具栏中的三角形图标,运行代码,如图所示。
代码运行完成以后,微信被打开了。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
例如我现在想使用电脑控制手机,打开微信。
此时,点击下图中方框框住的
touch按钮:此时,把鼠标移动到Airtest右边的手机屏幕区域,鼠标会变成十字型。在微信图标的左上角按下鼠标左键不放,并拖到微信右下角松开鼠标。此时请注意中间代码区域发生了什么变化,如图所示。
好了。以上就是你需要使用电脑打开微信所要进行的全部操作。
点击上方工具栏中的三角形图标,运行代码,如图所示。
代码运行完成以后,微信被打开了。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
avaScript 引擎负责运行开发编写的 JS 代码。它由很多部分组成,对我们而言最重要的是 JIT 编译器,它的作用是当有些函数变得很热门被调用很多次时,它会把这个函数编译成机器代码来改进它的性能。JIT 编译器还负责优化代码。它具有很多针对代码的假设,它不希望这些假设崩溃。我们随后会讲讲 JIT 编译器中出现的相关漏洞问题。
来了解下 JavaScript 的基础知识,它是一种动态输入语言,可读性尚可。JS 对象具有“原型”,用于从其它对象中继承各种功能,它在漏洞发现过程中很重要。它可通过 _proto_ 属性更改对象的原型进行修改。 Proxy 是可用于重新定义基础操作的对象。我们可以通过这些基础操作,将调用限制在 getter 和 setter 等函数中。
来看下 ChakraCore。JavaScript 具有数组,而 ChakraCore 具有类型数组。我们来看看第一种类型 JavascriptNativeIntArray。它用于存储整数,每个元素具有四个字节。(举例: varint_arr=[1])另外一种类型是 JavascriptNativeFloatArray,它用于存储浮点数,和C语言不同,它的每个元素具有8个字节(举例 varfloat_arr=[13.37])。 JavascriptArray 用于存储对象(主要是指针),每个元素具有8个字节(举例: varobject_arr=[{}])。
我们来看下如何转换这些类型。
其中最后一种 (也就是 aray2._proto_=array1 中的 array1 直接转换为 JavascriptArray) 转换在 JavaScript 引擎很少见,但对于我们今天讲的主题很重要。当我们有两个数组,并将其中一个设置为另外一个的原型,那么充当原型的这个数组就会被直接转换为 JavascriptArray。这一点我们稍后再着重讲。
我们再来看看这些数组在内存中是什么样的。举个例子:
我们来看看实际在内存中,当调试如下样本代码时,可以看到我们刚才提到的字段状态 (vararr=[0xaaaaaa,0x31377];)。
红框部分是 JavascriptArray 属性,我们能看到数组的初始值,也就是 ArrayFlags 的值。绿框部分是实际的片段属性,它有长度、大小。蓝框是片段的内存布局(包括元素,下图的地址是 pArr->head)。图中右下角我们定义了两个片段。那么什么是 ArrayFlags ?它们是提示数组的某些东西的一些 flag。在这个案例中,它被定义为一个枚举类型。我们感兴趣的字段是 JavascriptArray 的 arrayFlags 字段 HasNoMissingValues(如图)。
在我们的例子中,被我们定义为 ArrayFlags 的 InitialArrayValue 实际上由两个不同的 flag 组成:一个是 ObjectArrayFlagsTag flag,它和我们讲的内容不重要就不讲了;我们将重点看第二个 HasNoMissingValues flag,它说明数组并不存在缺失的值,也就是说数组中不存在任何洞 (holes)。那么,“洞”是什么意思?我们创建一个数组,元素之间有一些值。在 ChakraCore 案例中,它有三个元素,但中间的一个元素是缺失的。
放在这里的值,它们在内存中表示为这些常数。我举这个例子是因为这样我们更容易地能在内存布局中发现它们。
像这里(如图)就存在一个“洞”,它并没有开启 HasNoMissingValues,也就是说数组中存在洞,数组中确实存在缺失的值。这看似很合理,但当我们查看内存布局时,我们会发现一些奇怪之处。我们来看下这些所谓的“缺失的值”是如何在内存中表示的。
这(图)是片段的内存转储,红色部分是数组的元素。我们看到 deadbeef deadbeef ,但在中间即“缺失的值”(“洞”)的位置,我们看到了一些 Magic 常数。 0xfff80002fff80002是从哪里来的?这些常数代表的是“缺失的值”或者说数组中的“洞”似乎能说得通。但如之前所述,我们已经知道有一些东西能代表“缺失的值”,就是没有 HasNoMissingValues flag。而现在我们似乎发现了另外一种表示方法,就是数组的内容(上面提到的 Magic 常量)。
这很奇怪,也引发了很多问题:数组的 flag 和数组的内容不匹配怎么办? HasNoMissingValues 设为真,那么就意味着不存在任何“洞”;但是 数组中实际上存在一个“缺失的值”。另外,我们在某种程度上把“数据”和“元数据”混为一谈了,因为如果把常量当作控制流,那么我们如果能够伪造它的话就很有意思了。
事实证明,我们真的能够伪造这个“缺失的值”。这是由 @s0rryMybad 和 @lokihardt 发现的漏洞(如上图),获得了CVE 编号 CVE-2018-8505。他们就是把我们之前看到的常量转换为浮点数数组,从而伪造了“缺失的值”,进而发现了漏洞。缓解这个漏洞的方法有很多,可以通过不断更改这个Magic值常量或增加更多的检查加固安全性。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
来了解下 JavaScript 的基础知识,它是一种动态输入语言,可读性尚可。JS 对象具有“原型”,用于从其它对象中继承各种功能,它在漏洞发现过程中很重要。它可通过 _proto_ 属性更改对象的原型进行修改。 Proxy 是可用于重新定义基础操作的对象。我们可以通过这些基础操作,将调用限制在 getter 和 setter 等函数中。
来看下 ChakraCore。JavaScript 具有数组,而 ChakraCore 具有类型数组。我们来看看第一种类型 JavascriptNativeIntArray。它用于存储整数,每个元素具有四个字节。(举例: varint_arr=[1])另外一种类型是 JavascriptNativeFloatArray,它用于存储浮点数,和C语言不同,它的每个元素具有8个字节(举例 varfloat_arr=[13.37])。 JavascriptArray 用于存储对象(主要是指针),每个元素具有8个字节(举例: varobject_arr=[{}])。
我们来看下如何转换这些类型。
其中最后一种 (也就是 aray2._proto_=array1 中的 array1 直接转换为 JavascriptArray) 转换在 JavaScript 引擎很少见,但对于我们今天讲的主题很重要。当我们有两个数组,并将其中一个设置为另外一个的原型,那么充当原型的这个数组就会被直接转换为 JavascriptArray。这一点我们稍后再着重讲。
我们再来看看这些数组在内存中是什么样的。举个例子:
我们来看看实际在内存中,当调试如下样本代码时,可以看到我们刚才提到的字段状态 (vararr=[0xaaaaaa,0x31377];)。
红框部分是 JavascriptArray 属性,我们能看到数组的初始值,也就是 ArrayFlags 的值。绿框部分是实际的片段属性,它有长度、大小。蓝框是片段的内存布局(包括元素,下图的地址是 pArr->head)。图中右下角我们定义了两个片段。那么什么是 ArrayFlags ?它们是提示数组的某些东西的一些 flag。在这个案例中,它被定义为一个枚举类型。我们感兴趣的字段是 JavascriptArray 的 arrayFlags 字段 HasNoMissingValues(如图)。
在我们的例子中,被我们定义为 ArrayFlags 的 InitialArrayValue 实际上由两个不同的 flag 组成:一个是 ObjectArrayFlagsTag flag,它和我们讲的内容不重要就不讲了;我们将重点看第二个 HasNoMissingValues flag,它说明数组并不存在缺失的值,也就是说数组中不存在任何洞 (holes)。那么,“洞”是什么意思?我们创建一个数组,元素之间有一些值。在 ChakraCore 案例中,它有三个元素,但中间的一个元素是缺失的。
放在这里的值,它们在内存中表示为这些常数。我举这个例子是因为这样我们更容易地能在内存布局中发现它们。
像这里(如图)就存在一个“洞”,它并没有开启 HasNoMissingValues,也就是说数组中存在洞,数组中确实存在缺失的值。这看似很合理,但当我们查看内存布局时,我们会发现一些奇怪之处。我们来看下这些所谓的“缺失的值”是如何在内存中表示的。
这(图)是片段的内存转储,红色部分是数组的元素。我们看到 deadbeef deadbeef ,但在中间即“缺失的值”(“洞”)的位置,我们看到了一些 Magic 常数。 0xfff80002fff80002是从哪里来的?这些常数代表的是“缺失的值”或者说数组中的“洞”似乎能说得通。但如之前所述,我们已经知道有一些东西能代表“缺失的值”,就是没有 HasNoMissingValues flag。而现在我们似乎发现了另外一种表示方法,就是数组的内容(上面提到的 Magic 常量)。
这很奇怪,也引发了很多问题:数组的 flag 和数组的内容不匹配怎么办? HasNoMissingValues 设为真,那么就意味着不存在任何“洞”;但是 数组中实际上存在一个“缺失的值”。另外,我们在某种程度上把“数据”和“元数据”混为一谈了,因为如果把常量当作控制流,那么我们如果能够伪造它的话就很有意思了。
事实证明,我们真的能够伪造这个“缺失的值”。这是由 @s0rryMybad 和 @lokihardt 发现的漏洞(如上图),获得了CVE 编号 CVE-2018-8505。他们就是把我们之前看到的常量转换为浮点数数组,从而伪造了“缺失的值”,进而发现了漏洞。缓解这个漏洞的方法有很多,可以通过不断更改这个Magic值常量或增加更多的检查加固安全性。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
我通过检查并提取所有相关代码发现该应用程序是用 Django 构建的
在 CGI 协议中,有一些变量,包括要执行的脚本路径。我认为 uWSGI 协议也应该有相同的机制。
以下是从nginx代理到uwsgi套接字的示例数据包:
请注意,查询 uwsgi 套接字需要一些变量。经过一些尝试,我找到了几个重要的变量
所以,如果我能使用以下变量查询 uwsgi 套接字,就足以执行任意脚本:
我需要发送任意 TCP 数据包来查询 uwsgi,因为他们使用的是特殊的二进制协议。您可以在uwsgi 文档中找到 uwsgi 协议的详细信息。它非常简单,就像这样
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
/proc/self/cmdline。首先,我尝试使用SECRET_KEY`from`获取 shell settings.py,但没有找到序列化相关的代码。接下来,我发现 uWSGI 配置使用 TCP 套接字作为 Nginx 代理的后端服务,所以我尝试利用这一点。在 CGI 协议中,有一些变量,包括要执行的脚本路径。我认为 uWSGI 协议也应该有相同的机制。
以下是从nginx代理到uwsgi套接字的示例数据包:
请注意,查询 uwsgi 套接字需要一些变量。经过一些尝试,我找到了几个重要的变量
UWSGI_FILE,并SCRIPT_NAME用它们来指定要执行的脚本路径。 UWSGI_FILE其中一个是脚本路径,SCRIPT_NAME另一个与要触发的函数名称有关(我不知道具体是什么,但并不重要)。所以,如果我能使用以下变量查询 uwsgi 套接字,就足以执行任意脚本:
我需要发送任意 TCP 数据包来查询 uwsgi,因为他们使用的是特殊的二进制协议。您可以在uwsgi 文档中找到 uwsgi 协议的详细信息。它非常简单,就像这样
2 byte (length) + n byte (data)。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM