跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

穿透技巧——快捷文件的参数隐藏技巧


RenX6

推荐的帖子

0x00 前言

最近phrozensoft在自己的博客中介绍了使用快捷方式的技巧,实现了应用程序存储在快捷方式中,当用户打开快捷方式时,应用程序被释放并通过vbs脚本运行。

我对这个比较感兴趣,因为快捷键的参数默认有260的长度限制,我在学习jsrat的过程中也遇到过这个问题(最后通过调用sct文件解决了长度限制问题)。

Phrozensoft分享了Delphi格式的POC代码。本文将对其进行测试,研究lnk的文件格式,开发powershell实现对应的POC代码,并简单分析该技术的利用和防御方法。

Phrozensoft博客地址:

https://www . phrozensoft . com/2016/12/shortcut s-as-entry-points-for-malware-POC-part-2-19

0x01 简介

Delphi

它是Windows平台下著名的快速应用开发工具。

Borland公司研发

还可以在LINUX平台上开发应用,以及其在LINUX上对应的产品Kylix。

常见版本:

Borland Delphi 7

德尔福2010

0x02 Delphi POC测试

Phrozensoft博客还分享了其他poc函数,比如生成lnk文件的python脚本,本文不会介绍,只测试Delphi POC。

环境搭建:

测试系统:Win7 x86

Delphi版本:Delphi 2010

注:

使用Delphi 7时,会出现编译失败的错误,提示“文件未找到系统。sysutils.dcu "

换成Delphi 2010后,对poc稍加修改和编译。

1.新建工程

打开Delphi 2010

选择文件-新建-其他-控制台应用程序。

直接复制poc码,提示错误,如图。

2-1.png

2.修改poc

测试后,系统。SysUtils需要改为SysUtils。

已编译,如图所示

2-2.png

3.编译

选择项目-构建所有项目。

如图所示,编译成功,Project1.exe生成。

2-3.png

4.测试

创建一个新的test.txt,并填写超过260个字符的数据:

回声123456781 123456781

在cmd下,执行以下命令:

Project1.exe测试. txt测试. lnk

生成test.lnk

查看命令行参数,只能看到长度为260的字符串,如图。

2-4.png

但是,lnk文件的大小是2.45kb,如图所示

2-5.png

(看起来我们找到了一些有趣的东西)

Cmd打开test.lnk文件,lnk文件的参数正常执行,显示的字符超过260个字符,不被截断,如图。

2-6.png

使用Hex Editor hex editor查看lnk文件格式,如图所示。

2-7.png

注:

不能使用UltraEdit,默认情况下会打开lnk指向的文件。

如图所示,指向cmd.exe。

2-8.png

0x03 Lnk文件格式介绍

1、整体结构

文件标题

外壳项目Id列表段

文件位置信息段

描述字符段

相对路径段

工作目录段

命令行段

图标文件段

附加信息段

2、文件头结构

1.

偏移 长度 说明
0h 4字节 固定值,字符为L

3-1.png

2.

偏移 长度 说明
4h 4字节 GUID

3-2.png

3.

偏移 长度 说明
14h 4字节 属性标志位

这四个字节用二进制表示。如果位0-6为1,则意味着lnk文件包含以下属性:

0位具有外壳项目id列表。

1位指向一个文件或文件夹。

2位存在描述字符串

3位有相对路径。

4位有工作路径。

5位有命令行参数。

6位有自定义图标。

3-3.png

14h偏移量,取4字节为000000f5,二进制表示为11110101。

位0、2、4、5和6是1,并且相应地包含以下属性:

有一个外壳项目id列表。

存在描述字符串

有工作路径。

命令行参数存在。

自定义图标存在。

4.

偏移 长度 说明
18h 4字节 目标文件属性
1ch 8字节 文件创建时间
24h 8字节 文件修改时间
2ch 8字节 文件最后一次访问时间
34h 4字节 目标文件长度
38h 4字节 自定义图标个数
3ch 4字节 窗口执行方式:1.正常2.最小化3.最大化
40h 4字节 热键

3、shell item id list

根据14h位置,test.lnk中有一个shell项目id列表,所以从4ch开始的第一段就是shell项目id列表。

偏移 长度 说明
4ch 2字节 shell item id list总长度

3-4.png

外壳项目id列表的总长度为0129。

下一段(描述字符串)的起始地址是004e 0129=0177h。

4、描述字符串

偏移 长度 说明
004e+0129=0177h 2字节 长度(Unicode),实际长度要乘以2

3-5.png

描述字符串的长度是000c(Unicode)

下一段(工作路径)的起始地址是0177 2 000 C 2=0191 h。

5、工作路径

偏移 长度 说明
0177+2+000c2=0191h 2字节 长度(Unicode),实际长度要乘以2

3-6.png

工作路径长度是0012(Unicode)

下一段的起始地址(命令行参数)是0191 2 00122=01b7h。

6、命令行参数

偏移 长度 说明
0191+2+00122=01b7h 2字节 长度(Unicode),实际长度要乘以2

3-7.png

命令行参数长度为039f(Unicode)

下一段(自定义图标)的起始地址是01b7 2 039f2=08f7h。

7、自定义图标

偏移 长度 说明
01b7+2+039f2=08f7h 2字节 长度(Unicode),实际长度要乘以2

3-8.png

自定义图标的长度为000bf(Unicode)

下一段(自定义图标)的起始地址为08f7 2 000b2=090fh。

0x04 实现原理

结合Delphi的poc代码和lnk文件的格式,对比正常Lnk文件和POC文件的区别,发现只有命令行参数的长度不同。

因此,推断出这样的原理:

只要命令行参数长度超过260!

测试powershell代码:

$ file=Get-Content ' c:\ test \ test . txt '

$ wsh shell=New-Object-com Object WScript。壳

$Shortcut=$WshShell。create shortcut(' c:\ test \ test . lnk ')

$快捷方式。target path=' % SystemRoot % \ system32 \ cmd . exe '

$快捷方式。icon location=' % SystemRoot % \ System32 \ shell32 . dll,21 '

$快捷方式。参数=“”$ file

$快捷方式。保存()

在test.txt中编写以下内容:

/c开始calc.exe

命令执行后生成的test.lnk文件的格式如图所示,包含260个空格字符,后跟有效载荷代码。

4-1.png

检查文件参数,如图,全部用空格字符填充,有效载荷隐藏成功。

4-2.png

运行test.lnk,计算器弹出,有效载荷执行成功。

完整的过程如下

5-1.gif

Gif在线地址:

https://raw . githubusercontent . com/3g student/BlogPic/master/2016-12-31/5-1 . gif

0x05 利用思路

有效负载可以放在260个空字符之后。

这样,在文件属性中无法查看有效载荷,而只能通过文件格式进行分析。

有效载荷加密后,分析变得更加困难。

0x06 防御

注意lnk文件的大小

如有必要,直接分析十六进制lnk文件格式。

0x07 小结

对于lnk文件,虽然通过查看文件属性看不到lnk文件的命令行参数,但不代表不存在。在此,提醒用户注意。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...