2017年11月9日星期四

【技术分享】CTF中带来的IO_FILE新思路

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
【技术分享】CTF中带来的IO_FILE新思路  阅读原文»

2017-11-09 09:54:56 阅读:3161次 收藏 来源: 安全客 作者:FlappyPig

http://pic1.hackdig.com/pp/214a8a6035b31e2495d6d890f5a69a03991b2bbcd5e4d20bfa5df308e9f5a2100d35172c242cdd4c6da4b8d49e242da3.jpg

作者:FlappyPig

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言


之前一直打算写一份有关IO_FILE的文章,但是由于自己太忙,所以一直都没有写。最初接触到IO_FILE是在pwnable.tw网站上做题时,碰到的题目能够通过对stdin进行伪造的话,能够把伪造虚表的地址以及虚表中的函数。从而造成任意代码执行。

之后再次遇见IO_FILE的时候是在2016的hitcon上面的house of orange,这个题目将IO_FILE和堆中的unsorted bin attack结合了起来。通过unsorted bin attack修改了IO_list_all,在flush io的时候造成了任意代码的执行。这样的攻击方法都是通过伪造IO_FILE的结构体,修改虚表的位置来利用的。

但是之后,由于ubuntu17.04的发布,libc-2.24.so中增加了对vtable的check,所以之前通过修改虚表来进行漏洞利用的方法现在已经用不了了。


新的思路


之后在参加WCTF 2016的时候,hitcon给出了challenge wannaheap。这个题目当时所有参赛的队伍没有一个做出来。之后在赛后分享的时候,根据它们的讲述,才发现这个题目为什么当时没有人解出来......它将IO_FILE的利用带上了一个新的层面。我们下面对这个题目详细分析一下来进一步加深对IO_FILE利用的理解,本文中对wannaheap的解题思路完全是根据当时hitcon在WCTF上分享的来的。


Wannaheap


题目的结构体只有两个,chunk和node

struct __attribute__((packed)) __attribute__((aligned(4))) node
{
  _QWORD left;
  _QWORD right;
  __int64 key;
  __int64 data;
  _DWORD random;
};
struct __attribute__((aligned(8))) chunk
{
  _QWORD real_addr;
  _QWORD addr;
};

首先它实现了一个前后都有随机数据和随机大小的堆分配结构,这样的话,堆的分配就变得难以预测。

http://p0.qhimg.com/t01f1102516fe9471a2.png

分配的大小是rand1 + size + rand2,其中size是想要分配的大小。

所以这中间的这个堆块的位置是很难找到的,calloc设置的size大小也是很难控制的。

http://pic1.hackdig.com/pp/7c360a5426b1886df0a9cfdd6f6282835f25b7b8a8f11855490f2f2f4ca80edfb6f6ad9a4c4840f9c174f6feca03fea5.jpg

http://p9.qhimg.com/t019f1790f9c437b658.png

分配的chunk就像上面这样,后面会把这里的地址存到一个global的数组里面去。

chunk的存储方式像是一个存在key值的红黑树,左子树的key值小于根节点,右子树的key值大于根节点。

【技术分享】利用 Python 打造反向 TCP 后门  阅读原文»

2017-11-09 10:44:21 阅读:3095次 收藏 来源: 0x00sec.rog 作者:shan66

t01d8f6beb895ef2fbc.jpg

译者:shan66

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


Python的反向TCP后门


在Linux中,我们需要在一个安全的环境中进行黑客攻击(渗透测试)。通常情况下,我们做的第一件事就是安装虚拟化软件,同时安装能找到的所有操作系统发行版。在黑客攻击的阶段,为了拿下目标机器,我们需要借助某种程序来感染系统。这种做法的缺点是:防病毒产品对于那些广为人知的Metasploit文件都了如指掌,因此,为了攻陷受害者机器,我们需要禁用这些产品――但这种做法不太现实。因此,这就迫使我们开发自己的攻击程序。当然,这方面的程序(即Payload)有很多种类型,而今天要讲的,则是反向TCP程序。

反向TCP:在正常转发连接中,客户端是通过服务器的开放端口连接到服务器的,但在反向连接的情况下,客户端会主动打开服务器上将要连接的端口。反向连接最常见的用途就是绕过防火墙和路由器的安全限制。

例如,在阻止入站连接的防火墙后面的电脑上运行的后门,可以轻松建立出站连接,通过Internet与远程主机进行通信。一旦建立了连接,远程主机就可以向后门发送命令。这种通信方式对攻击者来说很有帮助,因为在受害者机器上启动本地Shell是非常容易的。

在这个文章系列中,我们将利用Python开发一个反向TCP程序。那么,我们为什么要分成多个部分呢?这是因为,在每个部分中,我们都会为Shell引入一个新的函数、命令或代码,这样能够使其更加灵活。我们要从头开始,打造一款真正属于自己的、令人敬畏的、奇幻无比的、难以置信的……(我觉得这些形容词已经差不多够了)Shell。

在这篇文章中,我们会把Shell锻造得稍微漂亮一些。下面,让我们先从服务器(攻击方)脚本开始。


脚本编写:IMPORT语句


下面是我们新写的import语句

#!/usr/bin/env python
import socket, sys, os

不错! !


脚本编写:脚本的彩色显示函数


这个函数能够让我们的Shell变得异彩纷呈。

http://p3.qhimg.com/t017a1371224e1638a6.png

图1

这个函数能够将传递给它的文本赋予指定的颜色。它可以接受的参数:

1."r" 或 "red" ――红色

2."g" 或 "green"――绿色

3."b" 或 "blue"――蓝色

4."y" 或 "yellow" ――黄色

5."lgray" ――浅灰

6."underline" ―― 带下划线的文本

7."strike" ―― 带删除线的文本


脚本编写:banner函数


虽然这几个函数都不是必需的,但是可以改善用户体验。 我们可以根据自己的喜好进行相应的定制。

http://p8.qhimg.com/t0165cf396d38aa4131.png

阅读更多内容

没有评论:

发表评论