【问题标题】:Powershell read shellcode from filePowershell 从文件中读取 shellcode
【发布时间】:2023-01-26 19:52:25
【问题描述】:

我有一个执行 shellcode 的 powershell 脚本。
$code = 0xe8,0x3b,0x3d,0x03,0x00,0x3b,0x3d,0x03
$code.GetType()
[Byte[]] $buf = $code
$buf.Length

上面命令的输出是

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
8

但是当我将 shellcode 保存在文本文件中并执行它时,它不会执行并且缓冲区长度也不同。

$codes = @(Get-Content -Raw C:\Users\abc\Downloads\code.txt)
$codes.GetType()
[Byte[]] $buf = $codes.ToCharArray()
echo $buf.Length

上述命令的输出

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
39

我可以通过任何机会从文本文件执行上述 shellcode 并保持缓冲区长度不变。

【问题讨论】:

  • 您需要 Get-Content C:\Users\abc\Downloads\code.txt -Encoding Byte(或 PowerShell 7 中的 Get-Content C:\Users\abc\Downloads\code.txt -AsByteStream
  • 即使尝试 @(Get-Content C:\Users\abc\Downloads\code.txt -Encoding Byte) 结果也是一样的。
  • 然后您可能将文字字符串 0xe8,0x3b,0x3d,0x03,0x00,0x3b,0x3d,0x03 存储在文件中,请参阅下面我的回答中的第二个建议 :)
  • 该文件包含一长串 shellcode,上面的 shellcode 是它的 sn-p。

标签: windows powershell shellcode


【解决方案1】:

如果文件由 8 个字节组成,请使用 Get-Content -Encoding Byte

# Windows PowerShell
$codes = @(Get-Content C:UsersbcDownloadscode.txt -Encoding Byte)

# PowerShell 7
$codes = @(Get-Content C:UsersbcDownloadscode.txt -AsByteStream)

如果文件改为包含文字字符串 0xe8,0x3b,0x3d,0x03,0x00,0x3b,0x3d,0x03,则您需要拆分列表并首先将它们解析为数值:

$codes = @(Get-Content -Raw C:UsersbcDownloadscode.txt)
$codes = $codes.Trim() -split '(?s)[s,]+' -as [byte[]]

【讨论】:

  • 该文件包含一长串 shellcode,上面的 shellcode 是它的 sn-p。
  • @Vikas 我已经更新了答案以考虑到这一点
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2022-01-05
相关资源
最近更新 更多