◆宋超
(江蘇聯(lián)合職業(yè)技術(shù)學院無錫旅游商貿(mào)分院 江蘇 214000)
沒有網(wǎng)絡安全就沒有國家安全,目前“網(wǎng)絡安全”賽項已成為各級各類職業(yè)院校比拼實力的舞臺,一場“網(wǎng)絡安全”技能競賽通常由兩部分組成:CTF 和AWD,在AWD 中各個參賽隊伍被分配了若干靶機,這些靶機存在著各種漏洞,在規(guī)定時間內(nèi)參賽隊伍要盡力加固自己的靶機,并利用漏洞攻擊對方靶機以獲得flag(flag 是靶機root 目錄下flagvalue.txt 文件的內(nèi)容),具有很強的競技性。靶機上漏洞類型多樣,如高端口后門、Webshell、數(shù)據(jù)庫漏洞等,現(xiàn)實中由于“網(wǎng)絡安全”賽項靶機數(shù)量巨大,單憑手動攻擊很難在短時間獲得大量flag,于是利用編程語言編寫自動化攻擊腳本,批量獲得flag 顯然是必要的。
Python 語言是當今編程語言中的熱點,它有著高效的數(shù)據(jù)結(jié)構(gòu),簡單的面向?qū)ο箝_發(fā)的環(huán)境,豐富的標準庫等特點,廣泛應用在網(wǎng)絡數(shù)據(jù)的爬取,人工智能,大數(shù)據(jù)分析等多方面。在網(wǎng)絡攻防中Python程序常用的第三方庫有OS 庫、requests 庫,MySQLdb 庫等。
在高職“網(wǎng)絡安全”AWD 競賽中常見的靶機漏洞有系統(tǒng)服務漏洞、網(wǎng)站漏洞、數(shù)據(jù)庫
漏洞等,其中系統(tǒng)服務漏洞如一些常規(guī)端口漏洞:21、22、23端口的弱密碼,著名的139、445 端口的“永恒之藍”漏洞,3389 端口的藍屏攻擊、cve-2019-0708 漏洞等,還有就是系統(tǒng)的高端口后門;網(wǎng)站漏洞包括命令執(zhí)行、文件包含、文件上傳、SQL 注入等;數(shù)據(jù)庫漏洞則是通過數(shù)據(jù)庫連接的弱密碼,運行數(shù)據(jù)庫語句進行系統(tǒng)滲透。
系統(tǒng)的后門端口往往是程序員預留在系統(tǒng)中以便可以修改系統(tǒng)缺陷的端口,最著名的是Windows 自動更新,如果后門被他人知道,后果將是不堪設(shè)想的。后門端口一般大于1024(小于1024 的是常規(guī)端口),如知名漏洞機 Metasplotable2-Linux 后門端口為1524,Windows 的遠程管理服務WinRM 默認為5985 端口,開啟后門端口也可使用木馬程序,這類木馬程序由C 或C++語言編寫并編譯生成,如int main(){ serv_addr.sin_family=2;serv_addr.sin_addr.s_addr=0;serv_addr.sin_port=0x901F ;sock=socket(2,1,0);bind(sock,(struct sockaddr*)&serv_addr,0x10);listen(sock,1);dup2(cli,0);dup2(cli,1);dup2(cli,2);execve("/bin/sh",0,0);},該程序在運行時開放了一個8080 的后門端口,攻擊機只需利用NC 工具連入這個后門端口就能輕松進入靶機系統(tǒng)。
網(wǎng)站漏洞通常是因為網(wǎng)站開發(fā)人員安全意識不足,對程序參數(shù)沒有嚴格限制造成的。知名的網(wǎng)站漏洞有信息泄漏漏洞、目錄遍歷漏洞、命令執(zhí)行漏洞、文件包含漏洞、SQL 注入漏洞、跨站腳本漏洞等。其中,網(wǎng)站的命令執(zhí)行通常利用網(wǎng)站中可執(zhí)行系統(tǒng)命令的頁面,通過構(gòu)造并拼接一些系統(tǒng)命令,從而對靶機系統(tǒng)進行滲透,如知名的滲透測試網(wǎng)站DVWA,在Low 模式下,Ping 測試網(wǎng)頁中,只需要在待測試的IP地址后拼接|、&、;等特殊符號并加入要執(zhí)行的命令如whoami、id 等,即可獲得靶機的系統(tǒng)信息。命令執(zhí)行漏洞的核心是網(wǎng)頁上的命令執(zhí)行函數(shù),如PHP 網(wǎng)頁中的system()、passthru()、shell_exec()、eval()等。
數(shù)據(jù)庫漏洞是高職“網(wǎng)絡安全”競賽中AWD階段靶機中常見的漏洞,如MySQL 數(shù)據(jù)庫的弱密碼漏洞、Phpmyadmin 萬能密碼繞過,MSSQL 數(shù)據(jù)庫弱口令等。攻擊者在登錄數(shù)據(jù)庫后,利用數(shù)據(jù)庫的查詢語句如select load_file(‘/root/flagvalue.txt’);可以輕松獲得靶機flag 或利用SQL 語句select ‘<?php @eval($_POST[‘a(chǎn)a’];?> ‘into outfile ‘/var/www/html/1.php’ ;向網(wǎng)站目錄里寫入一句話木馬以便進一步進行滲透。
高職“網(wǎng)絡安全”競賽的AWD階段一般分為兩部分即比賽開始時的加固階段,參賽者只能對各自的靶機進行加固,加固階段之后則進入對攻階段。由于參賽隊伍較多,靶機數(shù)量巨大,手動攻擊獲取flag效率較低,編寫合適的腳本進行自動化攻擊顯然是首選。
以下是Python 編寫的高端口(10003)漏洞攻擊腳本,攻擊效果如圖1 所示。
圖1 利用高端口漏洞自動化獲得flag
以下是Python 編寫的網(wǎng)站命令執(zhí)行漏洞攻擊腳本,攻擊效果如圖2 所示。
以下是Python 編寫的Mysql 數(shù)據(jù)庫漏洞的攻擊腳本,攻擊效果如圖3 所示。
圖3 利用數(shù)據(jù)庫漏洞自動化獲得flag
以上是高職“網(wǎng)絡安全”技能競賽中三個自動化攻擊的Python 腳本,由于競賽中采用的閉卷形式,腳本必須短小精悍。在現(xiàn)實對抗比賽中筆者曾做過實驗,30 臺靶機(Linux 系統(tǒng)),百兆局域網(wǎng)下,三種攻擊腳本在五分鐘內(nèi)就會獲取全部flag。此外結(jié)合靶機的網(wǎng)站漏洞如存在的一句話木馬,可利用如下程序批量獲得靶機flag。
總之,無論是對靶機進行攻擊還是加固,其前提就是獲取靶機信息,知道漏洞點在哪里,如何在短時間內(nèi)得到靶機系統(tǒng)漏洞點并編寫一套行之有效的自動化的腳本是今后研究的重點。