當(dāng)前位置:首頁 >  站長 >  建站經(jīng)驗(yàn) >  正文

滲透測試 網(wǎng)站代碼審計(jì)等基礎(chǔ)方法篇

 2019-09-25 10:25  來源: A5用戶投稿   我來投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競價(jià),好“米”不錯(cuò)過

這幾天整理了下網(wǎng)站滲透測試中基礎(chǔ)部分的第三節(jié),我們SINE安全滲透工程師對代碼安全審計(jì),手工滲透測試檢查代碼的危險(xiǎn)漏洞方法,找出安全問題重點(diǎn),配合工具掃描來達(dá)到測試漏洞的目的,本測試重點(diǎn)僅限于客戶授權(quán)才能操作,切記忽非法嘗試入侵!以下方法只是提供網(wǎng)站安全檢測的具體參考意見。

1.5. 代碼審計(jì)

1.5.1. 簡介

代碼審計(jì)是找到應(yīng)用缺陷的過程。其通常有白盒、黑盒、灰盒等方式。白盒指通過對源代碼的分析找到應(yīng)用缺陷,黑盒通常不涉及到源代碼,多使用模糊測試的方式,而灰盒則是黑白結(jié)合的方式。

1.5.2. 常用概念

1.5.2.1. 輸入

應(yīng)用的輸入,可以是請求的參數(shù)(GET、POST等)、上傳的文件、網(wǎng)絡(luò)、數(shù)據(jù)庫等用戶可控或者間接可控的地方。

1.5.2.2. 處理函數(shù)

處理數(shù)據(jù)的函數(shù),可能是過濾,也可能是編解碼。

1.5.2.3. 危險(xiǎn)函數(shù)

又常叫做Sink Call、漏洞點(diǎn),是可能觸發(fā)危險(xiǎn)行為如文件操作、命令執(zhí)行、數(shù)據(jù)庫操作等行為的函數(shù)。

1.5.3. 自動(dòng)化審計(jì)

一般認(rèn)為一個(gè)漏洞的觸發(fā)過程是從輸入經(jīng)過過濾到危險(xiǎn)函數(shù)的過程,而審計(jì)就是尋找這個(gè)鏈條的過程。

1.5.3.1. 危險(xiǎn)函數(shù)匹配

白盒審計(jì)最常見的方式是通過搜尋危險(xiǎn)函數(shù)與危險(xiǎn)參數(shù)定位漏洞,比較有代表性的工具是Seay開發(fā)的審計(jì)工具。這種方法誤報(bào)率相當(dāng)高,這是因?yàn)檫@種方法沒有對程序的流程進(jìn)行深入分析,另一方面,這種方式通常是孤立地分析每一個(gè)文件,忽略了文件之間復(fù)雜的調(diào)用關(guān)系。

具體的說,這種方式在一些環(huán)境下能做到幾乎無漏報(bào),只要審計(jì)者有耐心,可以發(fā)現(xiàn)大部分的漏洞,但是在高度框架化的代碼中,能找到的漏洞相對有限。

1.5.3.2. 控制流分析

在后來的系統(tǒng)中,考慮到一定程度引入AST作為分析的依據(jù),在一定程度上減少了誤報(bào),但是仍存在很多缺陷。

而后,Dahse J等人設(shè)計(jì)了RIPS,該工具進(jìn)行數(shù)據(jù)流與控制流分析,結(jié)合過程內(nèi)與過程間的分析得到審計(jì)結(jié)果,相對危險(xiǎn)函數(shù)匹配的方式來說誤報(bào)率少了很多,但是同樣的也增加了開銷。

1.5.3.3. 灰盒分析

國內(nèi)安全研究員fate0提出了基于運(yùn)行時(shí)的分析方式,解決了控制流分析實(shí)現(xiàn)復(fù)雜、計(jì)算路徑開銷大的問題。

1.5.4. 手工審計(jì)方式

拿到代碼,確定版本,確定能否正常運(yùn)行

找歷史漏洞

找應(yīng)用該系統(tǒng)的實(shí)例

簡單審計(jì),運(yùn)行審計(jì)工具看是否有漏洞

大概看懂整個(gè)程序是如何運(yùn)行的

文件如何加載

類庫依賴

有沒有加載waf

數(shù)據(jù)庫如何連接

mysql/mysqli/pdo

有沒有用預(yù)編譯

視圖如何形成

能不能xss

能不能模版注入

SESSION如何處理

文件

數(shù)據(jù)庫

內(nèi)存

Cache如何處理

文件cache可能寫shell

數(shù)據(jù)庫cache可能注入

memcache

看賬戶體系

管理員賬戶的密碼

加密方式

泄漏數(shù)據(jù)后能不能爆破密碼

重置漏洞

修改密碼漏洞

修改其他人密碼

普通用戶的帳號

能否拿到普通用戶權(quán)限

普通用戶帳號能否*

重點(diǎn)找沒有帳號的情況下可以訪問的頁面

是不是OAuth

攻擊

SQLi

看全局過濾能否bypass

看是否有直接執(zhí)行sql的地方

看是用的什么驅(qū)動(dòng),mysql/mysqli/pdo

如果使用PDO,看是否是直接執(zhí)行的地方

XSS

全局bypass

直接echo

看視圖是怎么加載的

FILE

上傳下載覆蓋刪除

包含

LFI

RFI

全局找include, require

正常上傳

看上傳是如何確定能否上傳文件的

RCE

call_user_func

eval

assert

preg_replace /e

XXE

CSRF

SSRF

反序列化

變量覆蓋

extract

parse_str

array_map

LDAP

XPath

Cookie偽造

過濾

找WAF

看waf怎么過濾的,相應(yīng)的如何繞過

點(diǎn)擊添加圖片描述(最多60個(gè)字)

1.6. WAF

1.6.1. 簡介

1.6.1.1. 概念

WAF(Web Application Firewall,Web應(yīng)用防火墻)是通過執(zhí)行一系列針對HTTP/HTTPS的安全策略來專門為Web應(yīng)用提供加固的產(chǎn)品。 在市場上,有各種價(jià)格各種功能和選項(xiàng)的WAF。在一定程度上,WAF能為Web應(yīng)用提供安全性,但是不能保證完全的安全。

1.6.1.2. 常見功能

檢測異常協(xié)議,拒絕不符合HTTP標(biāo)準(zhǔn)的請求

對狀態(tài)管理進(jìn)行會(huì)話保護(hù)

Cookies保護(hù)

信息泄露保護(hù)

DDoS防護(hù)

禁止某些IP訪問

可疑IP檢查

安全HTTP頭管理

X-XSS-Protection

X-Frame-Options

機(jī)制檢測

CSRF token

HSTS

1.6.1.3. 布置位置

按布置位置,WAF可以分為云WAF、主機(jī)防護(hù)軟件和硬件防護(hù)。云WAF布置在云上,請求先經(jīng)過云服務(wù)器而后流向主機(jī)。主機(jī)防護(hù)軟件需要主機(jī)預(yù)先安裝對應(yīng)軟件,如mod_security、ngx-lua-waf等,對主機(jī)進(jìn)行防護(hù)。硬件防護(hù)指流量流向主機(jī)時(shí),先經(jīng)過設(shè)備的清洗和攔截。

1.6.2. 防護(hù)方式

WAF常用的方法有關(guān)鍵字檢測、正則表達(dá)式檢測、語法分析、行為分析、聲譽(yù)分析、機(jī)器學(xué)習(xí)等。

基于正則的保護(hù)是最常見的保護(hù)方式。開發(fā)者用一些設(shè)定好的正則規(guī)則來檢測載荷是否存在攻擊性?;谡齽t的防護(hù)較為簡單,因此存在一些缺點(diǎn)。例如只能應(yīng)用于單次請求,而且正則很難應(yīng)用到一些復(fù)雜的協(xié)議上。

基于語法的分析相對正則來說更快而且更準(zhǔn)確,這種分析會(huì)把載荷按照語法解析成的符號組,然后在符號組中尋找危險(xiǎn)的關(guān)鍵字。這種方式對一些載荷的變式有較好的效果,但是同樣的,對解析器要求較高。

基于行為的分析著眼的范圍更廣一些,例如攻擊者的端口掃描行為、目錄爆破、參數(shù)測試或者一些其他自動(dòng)化或者攻擊的模式都會(huì)被納入考慮之中。

基于聲譽(yù)的分析可以比較好的過濾掉一些可疑的來源,例如常用的VPN、匿名代理、Tor節(jié)點(diǎn)、僵尸網(wǎng)絡(luò)節(jié)點(diǎn)的IP等。

基于機(jī)器學(xué)習(xí)的WAF涉及到的范圍非常廣,效果也因具體實(shí)現(xiàn)和場景而較為多樣化。

除了按具體的方法分,也可以根據(jù)白名單和黑名單的使用來分類。基于白名單的WAF適用于穩(wěn)定的Web應(yīng)用,而基于黑名單則適合處理已知問題。

1.6.3. 掃描器防御

基于User-Agent識別

基于攻擊載荷識別

驗(yàn)證碼

1.6.4. WAF指紋

額外的Cookie

額外的Header

被拒絕請求時(shí)的返回內(nèi)容

被拒絕請求時(shí)的返回響應(yīng)碼

IP

1.6.5. 繞過方式

1.6.5.1. 基于架構(gòu)的繞過

站點(diǎn)在WAF后,但是站點(diǎn)可直連

站點(diǎn)在云服務(wù)器中,對同網(wǎng)段服務(wù)器無WAF

1.6.5.2. 基于資源的繞過

使用消耗大的載荷,耗盡WAF的計(jì)算資源

1.6.5.3. 基于解析的繞過

字符集解析不同

協(xié)議覆蓋不全

協(xié)議解析不正確

站點(diǎn)和WAF對https有部分不一致

WAF解析與Web服務(wù)解析不一致

同一個(gè)參數(shù)多次出現(xiàn),取的位置不一樣

HTTP Parameter Pollution (HPP)

HTTP Parameter Fragmentation (HPF)

1.6.5.4. 基于規(guī)則的繞過

等價(jià)替換

等價(jià)函數(shù)

等價(jià)變量

關(guān)鍵字拆分

字符串操作

大小寫變換

select => sEleCt

<>alert(1)

字符編碼

URL編碼

十六進(jìn)制編碼

Unicode解析

HTML

JSFuck

其他編碼格式

字符干擾

注釋

空字符

NULL (x00)

空格

回車 (x0d)

換行 (x0a)

垂直制表 (x0b)

水平制表 (x09)

換頁 (x0c)

特殊符號

注釋符

引號(反引號、單引號、雙引號)

利用服務(wù)本身特點(diǎn)

替換可疑關(guān)鍵字為空

selselectect => select

少見特性未在規(guī)則列表中

2.1. 域名信息

2.1.1. Whois

Whois 可以查詢域名是否被注冊,以及注冊域名的詳細(xì)信息的數(shù)據(jù)庫,其中可能會(huì)存在一些有用的信息,例如域名所有人、域名注冊商、郵箱等。

2.1.2. 搜索引擎搜索

搜索引擎通常會(huì)記錄域名信息,可以通過 site:域名的語法來查詢。

2.1.3. 第三方查詢

網(wǎng)絡(luò)中有相當(dāng)多的第三方應(yīng)用提供了子域的查詢功能,下面有一些例子,更多的網(wǎng)站可以在 8.1 工具列表 中查找。

DNSDumpster

Virustotal

CrtSearch

threatminer

Censys

2.1.4. ASN信息關(guān)聯(lián)

在網(wǎng)絡(luò)中一個(gè)自治系統(tǒng)(Autonomous System, AS)是一個(gè)有權(quán)自主地決定在本系統(tǒng)中應(yīng)采用何種路由協(xié)議的小型單位。這個(gè)網(wǎng)絡(luò)單位可以是一個(gè)簡單的網(wǎng)絡(luò)也可以是一個(gè)由一個(gè)或多個(gè)普通的網(wǎng)絡(luò)管理員來控制的網(wǎng)絡(luò)群體,它是一個(gè)單獨(dú)的可管理的網(wǎng)絡(luò)單元(例如一所大學(xué),一個(gè)企業(yè)或者一個(gè)公司個(gè)體)。

一個(gè)自治系統(tǒng)有時(shí)也被稱為是一個(gè)路由選擇域(routing domain)。一個(gè)自治系統(tǒng)將會(huì)分配一個(gè)全局的唯一的16位號碼,這個(gè)號碼被稱為自治系統(tǒng)號(ASN)。因此可以通過ASN號來查找可能相關(guān)的IP,例如:

whois -h whois.xxx.net -- '-i origin AS111111' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq

nmap -- targets-asn ---args targets-asn.asn=15169

2.1.5. 域名相關(guān)性

同一個(gè)企業(yè)/個(gè)人注冊的多個(gè)域名通常具有一定的相關(guān)性,例如使用了同一個(gè)郵箱來注冊、使用了同一個(gè)備案、同一個(gè)負(fù)責(zé)人來注冊等,可以使用這種方式來查找關(guān)聯(lián)的域名。一種操作步驟如下:

查詢域名注冊郵箱

通過域名查詢備案號

通過備案號查詢域名

反查注冊郵箱

反查注冊人

通過注冊人查詢到的域名在查詢郵箱

通過上一步郵箱去查詢域名

查詢以上獲取出的域名的子域名

2.1.6. 網(wǎng)站信息利用

網(wǎng)站中有相當(dāng)多的信息,網(wǎng)站本身、各項(xiàng)安全策略、設(shè)置等都可能暴露出一些信息。

網(wǎng)站本身的交互通常不囿于單個(gè)域名,會(huì)和其他子域交互。對于這種情況,可以通過爬取網(wǎng)站,收集站點(diǎn)中的其他子域信息。這些信息通常出現(xiàn)在Java文件、資源文件鏈接等位置。

網(wǎng)站的安全策略如跨域策略、CSP規(guī)則等通常也包含相關(guān)域名的信息。有時(shí)候多個(gè)域名為了方便會(huì)使用同一個(gè)SSL/TLS證書,因此有時(shí)可通過證書來獲取相關(guān)域名信息。

2.1.7. 證書透明度

為了保證HTTPS證書不會(huì)被誤發(fā)或偽造,CA會(huì)將證書記錄到可公開驗(yàn)證、不可篡改且只能附加內(nèi)容的日志中,任何感興趣的相關(guān)方都可以查看由授權(quán)中心簽發(fā)的所有證書。因此可以通過查詢已授權(quán)證書的方式來獲得相關(guān)域名。

2.1.8. 域傳送漏洞

DNS域傳送(zone transfer)指的是冗余備份服務(wù)器使用來自主服務(wù)器的數(shù)據(jù)刷新自己的域(zone)數(shù)據(jù)庫。這是為了防止主服務(wù)器因意外不可用時(shí)影響到整個(gè)域名的解析。

一般來說,域傳送操作應(yīng)該只允許可信的備用DNS服務(wù)器發(fā)起,但是如果錯(cuò)誤配置了授權(quán),那么任意用戶都可以獲得整個(gè)DNS服務(wù)器的域名信息。這種錯(cuò)誤授權(quán)被稱作是DNS域傳送漏洞。

2.1.9. Passive DNS

Passive DNS被動(dòng)的從遞歸域名服務(wù)器記錄來自不同域名服務(wù)器的響應(yīng),形成數(shù)據(jù)庫。利用Passive DNS數(shù)據(jù)庫可以知道域名曾綁定過哪些IP,IP曾關(guān)聯(lián)到哪些域名,域名最早/最近出現(xiàn)的時(shí)間,為測試提供較大的幫助。Virustotal、passivetotal、CIRCL等網(wǎng)站都提供了Passive DNS數(shù)據(jù)庫的查詢。

2.1.10. SPF記錄

SPF(Sender Policy Framework)是為了防止垃圾郵件而提出來的一種DNS記錄類型,是一種TXT類型的記錄,用于登記某個(gè)域名擁有的用來外發(fā)郵件的所有IP地址。通過SPF記錄可以獲取相關(guān)的IP信息。

2.1.11. CDN

2.1.11.1. CDN驗(yàn)證

可通過多地ping的方式確定目標(biāo)是否使用了CDN 等。

2.1.11.2. 域名查找

使用了CDN的域名的父域或者子域名不一定使用了CDN,可以通過這種方式去查找對應(yīng)的IP。

2.1.11.3. 歷史記錄查找

CDN可能是在網(wǎng)站上線一段時(shí)間后才上線的,可以通過查找域名解析記錄的方式去查找真實(shí)IP。

2.1.12. 子域爆破

在內(nèi)網(wǎng)等不易用到以上技巧的環(huán)境,或者想監(jiān)測新域名上線時(shí),可以通過批量嘗試的方式,找到有效的域名,以上等內(nèi)容基礎(chǔ)全面性比較覆蓋網(wǎng)站安全方便的滲透測試方法,如果對此有需求可以聯(lián)系專業(yè)的網(wǎng)站安全公司來處理解決,防止被入侵被攻擊之類的安全問題。

申請創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

熱門排行

信息推薦