拿下了一個(gè)美女圖片網(wǎng)站
相關(guān)閱讀:
300本計(jì)算機(jī)編程的經(jīng)典書(shū)籍下載
AI全套:Python3+TensorFlow打造人臉識(shí)別智能小程序
最新人工智能資料-Google工程師親授 Tensorflow-入門到進(jìn)階
黑馬頭條項(xiàng)目 - Java Springboot2.0(視頻、資料、代碼和講義)14天完整版
來(lái)自:FreeBuf.COM,起于凡而非于凡
鏈接:https://www.freebuf.com/articles/web/250308.html
說(shuō)明
本文只是介紹一些很簡(jiǎn)單的思路。而這些思路想要成功實(shí)現(xiàn),基本就需要網(wǎng)站創(chuàng)建者犯一些低級(jí)的錯(cuò)誤了。
這有些類似于初中、高中的一些數(shù)學(xué)題,數(shù)學(xué)沒(méi)及格的人,也可以用用帶入特殊值這個(gè)方法,比如帶入0、1等等特殊值,雖然比較無(wú)腦,但偶爾還真能拿到分。
PS:本文僅用于技術(shù)研究與討論,嚴(yán)禁用于非法用途,違者后果自負(fù)
某天在無(wú)聊的瀏覽網(wǎng)頁(yè)的過(guò)程中,偶然間,偶然的點(diǎn)進(jìn)了某個(gè)美女圖片網(wǎng)站。
想著也是無(wú)聊,就隨便看看唄。
結(jié)果一個(gè)圖集就放出3張圖,剩余的就要VIP(充錢),太可惡了!
無(wú)聊的我就想看看能不能繞過(guò)限制,直接看到整個(gè)圖集。

如果使用的是網(wǎng)站框架,那我基本就直接放棄了,低版本框架雖然會(huì)有通用的漏洞(我沒(méi)能力利用),但低級(jí)錯(cuò)誤基本沒(méi)有的。
先創(chuàng)建了個(gè)賬戶,登錄之后查看了下存儲(chǔ),發(fā)現(xiàn)沒(méi)有使用cookie,反而使用了sessionStorage和localStorage:
cookie

sessionStorage

從這里以及文章最開(kāi)始的圖來(lái)判斷,這個(gè)網(wǎng)站使用了不少前端的東西,很可能有些功能就是在前端實(shí)現(xiàn)的,或者使用了ajax技術(shù)。
登錄、權(quán)限認(rèn)定
登錄賬戶后,先判斷圖集加載頁(yè)面怎么認(rèn)定用戶的權(quán)限的,看看會(huì)不會(huì)用到sessionStorage的uid或者token。
這里就要介紹下怎么使用火狐瀏覽器分析前端的代碼了。
按F12打開(kāi)開(kāi)發(fā)者工具,然后按照?qǐng)D中的說(shuō)明,查看加載圖集頁(yè)面時(shí)所發(fā)起的ajax請(qǐng)求:

從上圖得知,一共發(fā)起了4次ajajx請(qǐng)求,根據(jù)相應(yīng)的內(nèi)容,getContentInfo接口返回了圖集的數(shù)據(jù)。

那看看發(fā)起請(qǐng)求的代碼是怎么樣的吧,選中堆棧跟蹤,可以看到請(qǐng)求代碼的調(diào)用過(guò)程,從下至上:

具體的位置,我們通過(guò)點(diǎn)擊堆棧跟蹤函數(shù)名右側(cè)的藍(lán)色鏈接,就可以直接跳轉(zhuǎn)過(guò)去:

window.onload


這里可以看到傳入了一個(gè)object,就是getData,里面的token就是sessionStorage的token:

如果前端代碼編寫(xiě)不規(guī)范(比如這里對(duì)前端代碼都沒(méi)有混淆),那么變量很可能暴露在全局環(huán)境中。
直接在開(kāi)發(fā)者工具的控制臺(tái)中輸出cid就能看到值了:
那其實(shí)到這我又沒(méi)法進(jìn)行下去了,傳入token是為了判斷用戶身份,傳入cid是判斷是哪一個(gè)圖集。
而對(duì)于token我也沒(méi)辦法對(duì)它做什么事情,也沒(méi)法冒充其他用戶的身份。
如果他傳入的是uid,也就是用戶id,那倒還可以試一試。
最后跟著代碼走下去的結(jié)果果然是這樣,沒(méi)有什么可以插手的地方。
想了下,有沒(méi)有可能接口返回的數(shù)據(jù)是完整的,然后只是用js代碼將其隱藏而已……
但是最開(kāi)始查看的返回?cái)?shù)據(jù)的時(shí)候,返回的圖片的url就3個(gè):

我不死心,把所有的字段都看了遍,還真有發(fā)現(xiàn),在圖集的下面,有一個(gè)推薦圖片:

所以也返回了這部分的數(shù)據(jù):

點(diǎn)開(kāi)一看,終于發(fā)現(xiàn)低級(jí)錯(cuò)誤了,url沒(méi)做處理,返回了整個(gè)圖集圖片的url:

也就是說(shuō),雖然這頁(yè)面的圖集本身的其余圖片我沒(méi)法看到,但是它頁(yè)面中推薦的圖集的圖片我全都可以看到:

注意:直接使用圖片地址其實(shí)還是不能查看到圖片,需要在地址后面加上一個(gè)參數(shù):

但是這個(gè)參數(shù)每次登錄后都是固定的,可以從localStorage中得到,也可以從免費(fèi)可觀看的圖片地址中得到,意義不大。
在圖集的下面,有一個(gè)評(píng)論區(qū),當(dāng)然,也是接口返回的數(shù)據(jù)。
在這里還是沒(méi)進(jìn)行處理,把所有評(píng)論用戶的用戶名全暴露了(手機(jī)號(hào)碼),當(dāng)然這些客戶的口令一般也不會(huì)出現(xiàn)很弱的口令,所以我沒(méi)去嘗試。
但是上傳這些圖集的賬戶的口令,那就不好說(shuō)了,關(guān)注圖集上傳者后:


我也就隨便一試,居然還真使用了弱口令,下圖是登錄成功后”我的作品“頁(yè)面:

點(diǎn)擊一個(gè)作品進(jìn)去,顯示已購(gòu)買:

僅僅知道登錄頁(yè)面A的地址,然后查看登錄頁(yè)面的Js文件。
發(fā)現(xiàn)登錄成功后使用js進(jìn)行跳轉(zhuǎn),跳轉(zhuǎn)到主頁(yè)面B,并且登錄成功后的在sessionStorage中設(shè)置了一些字段。
先直接訪問(wèn)主頁(yè)面B,發(fā)現(xiàn)會(huì)先將頁(yè)面的框架加載完畢后,再跳轉(zhuǎn)回頁(yè)面A。
由此可以得出判斷,B頁(yè)面的跳轉(zhuǎn)語(yǔ)句和A頁(yè)面差不多,都是使用Js語(yǔ)句實(shí)現(xiàn)的。
禁用Js功能,再進(jìn)入B頁(yè)面,發(fā)現(xiàn)果然停止了跳轉(zhuǎn)。
但是雖然頁(yè)面框架正常加載,但卻沒(méi)載任何數(shù)據(jù)。
查看B頁(yè)面加載的Js文件,在跳轉(zhuǎn)回A頁(yè)面的代碼前后找到了判斷語(yǔ)句,使用sessionStorage中的字段進(jìn)行判斷。
于是設(shè)置sessionStorage中的相關(guān)字段,繞過(guò)了登錄的過(guò)程,數(shù)據(jù)正常加載了,達(dá)到了滲透的目的。
感想
舉個(gè)簡(jiǎn)單的例子,如網(wǎng)站的數(shù)據(jù)檢驗(yàn)功能,不允許前端提交不符合當(dāng)前要求規(guī)范的數(shù)據(jù)(比如年齡文本框部分不能提交字母)。
那么為了實(shí)現(xiàn)這個(gè)功能,首先開(kāi)發(fā)者肯定要在前端實(shí)現(xiàn)該功能,直接在前端阻止用戶提交不符規(guī)范的數(shù)據(jù),否則用戶體驗(yàn)會(huì)很差,且占用服務(wù)器端的資源。
但是沒(méi)有安全意識(shí)或覺(jué)得麻煩的開(kāi)發(fā)者就會(huì)僅僅在前端用Js進(jìn)行校驗(yàn),后端沒(méi)有重復(fù)進(jìn)行校驗(yàn)。
這樣就很容易給惡意用戶機(jī)會(huì):比如不通過(guò)前端頁(yè)面,直接向后端接口發(fā)送數(shù)據(jù):或者,前端代碼編寫(xiě)不規(guī)范,用戶可以直接在瀏覽器控制臺(tái)中用自己寫(xiě)的Js代碼覆蓋原有的Js代碼;或者,用戶還可以直接在瀏覽器中禁用Js;等等。總之,前端的傳過(guò)來(lái)的數(shù)據(jù)可信度基本上可以認(rèn)為比較低,太容易被利用了。
而我的思路都是很簡(jiǎn)單的,就是關(guān)注比較重要的幾個(gè)節(jié)點(diǎn),看看有沒(méi)有可乘之機(jī)。如登錄、權(quán)限判定、數(shù)據(jù)加載等前后,對(duì)方是怎么做的,用了什么樣的技術(shù),有沒(méi)有留下很明顯的漏洞可以讓我利用。
像這兩個(gè)網(wǎng)站,加載的Js文件都沒(méi)有進(jìn)行混淆,注釋也都留著,還寫(xiě)得很詳細(xì)。比較湊巧的是,這兩個(gè)網(wǎng)站都用到了比較多的前端的技術(shù),也都用到了sessionStorage。
特別的,它們都把很多的業(yè)務(wù)功能放在前端實(shí)現(xiàn),于是存在明顯漏洞的可能性就比較大,就值得我去嘗試。
-End-
全棧架構(gòu)社區(qū)交流群
?「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進(jìn)行加群。歡迎有想法、樂(lè)于分享的朋友們一起交流學(xué)習(xí)。
掃描添加好友邀你進(jìn)架構(gòu)師群,加我時(shí)注明【姓名+公司+職位】看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人往期資源:
Flutter 移動(dòng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 視頻(開(kāi)發(fā)你自己的抖音APP)Java面試進(jìn)階訓(xùn)練營(yíng) 第2季(分布式篇)
Java高級(jí) - 分布式系統(tǒng)開(kāi)發(fā)技術(shù)視頻
2019最新Python視頻:從入門到Swiper項(xiàng)目實(shí)戰(zhàn)
2019年Android應(yīng)用程序開(kāi)發(fā)
2019重磅高級(jí)資源:Java并發(fā)編程原理和實(shí)戰(zhàn)
最新黑馬大數(shù)據(jù)資源:深入解析docker容器化技術(shù)
最新Java后端實(shí)戰(zhàn)視頻:SSM框架在線商城系統(tǒng)
2019最新黑客技術(shù)之Windows網(wǎng)絡(luò)安全精講
2019最新Python實(shí)戰(zhàn)視頻:Python+Django項(xiàng)目實(shí)
黑馬 - Python數(shù)據(jù)結(jié)構(gòu)與算法系列課程
