依舊是個(gè)人學(xué)習(xí)經(jīng)驗(yàn)的記錄瓦盛,非常淺顯的內(nèi)容,如果可以幫到小白們外潜,那就再好不過(guò)啦原环!
前些天由于下載一些素材,需要1個(gè)金幣处窥,充值付費(fèi)1元即可嘱吗。
在充值的時(shí)候,發(fā)現(xiàn)最低付費(fèi)金額為20元滔驾,我用不完剩下的這個(gè)錢(qián)啊...突發(fā)奇想谒麦,我能否通過(guò)簡(jiǎn)單的(我會(huì)的)方式,只充值1元錢(qián)哆致,換取1個(gè)金幣下載素材呢绕德?
經(jīng)過(guò)嘗試,最后成功繞過(guò)驗(yàn)證沽瞭,通過(guò)支付寶支付1元錢(qián)迁匠,用1個(gè)金幣成功下載了素材。#理論上這是酷酷的黑客行為驹溃。
總結(jié)了一下城丧,想要繞過(guò)前端限制大概可以分為3步。
-
查看控制臺(tái)(F12)豌鹤,確定是前端驗(yàn)證(js腳本限制)
-
找到真正控制提交的函數(shù)亡哄,以及需要提交的數(shù)據(jù)
-
控制臺(tái)內(nèi)調(diào)用函數(shù)和相應(yīng)參數(shù)
舉一個(gè)栗子
-
首先嘗試下載資源
Paste_Image.png -
余額不足,需要充值布疙。順手查看了一下蚊惯,這里跳轉(zhuǎn)去充值,是單純單獨(dú)的充值頁(yè)面灵临,沒(méi)有從這里帶去任何參數(shù)截型。
Paste_Image.png -
到了充值頁(yè)面,輸入1元儒溉,鼠標(biāo)焦點(diǎn)點(diǎn)擊其他地方宦焦。右側(cè)立即出現(xiàn)驗(yàn)證失敗的字樣:“...最小金額20金幣” ,推測(cè)可能為失焦時(shí)對(duì)文本框內(nèi)容進(jìn)行判斷。 并且點(diǎn)擊支付也提示失敗波闹。
Paste_Image.png
查看對(duì)應(yīng)的<input>標(biāo)簽后酝豪,沒(méi)有發(fā)現(xiàn)onblur屬性,判斷為js/jQuery 精堕。搜索<input>的name孵淘,找到一大段js,發(fā)現(xiàn)果然是最普通最簡(jiǎn)單的前端js腳本限制了充值金額20元 歹篓。
到這里瘫证,可以判斷我們有機(jī)會(huì)繞過(guò)了,可以嘗試一下滋捶。(仍然可能在服務(wù)器端做了限制痛悯,那我等菜雞就沒(méi)轍了)
Paste_Image.png -
查看支付的動(dòng)作,發(fā)現(xiàn)返回 user_pay()的結(jié)果:
Paste_Image.png
找到user_pay()重窟,發(fā)現(xiàn)3個(gè)重要的支付動(dòng)作所必須的參數(shù)cash 、pay_mode惧财、bank_type 以及支付函數(shù)pay():
function user_pay() { if (check_recharge() == false) { return false; } //支付金額 var cash = parseFloat($("#recharge").val()) + 0; //支付方式--財(cái)富通巡扇,支付寶 var pay_mode = $(":radio[name='online']:checked").val(); //財(cái)富通就要添加銀行類(lèi)型 var bank_type = $(":radio[name='bank_type']:checked").val(); //彈出付款窗口 pay(pay_mode, cash, bank_type); return false; }
注釋都寫(xiě)好了... 這三個(gè)參數(shù)分別是金額,支付方式垮衷,銀行類(lèi)型厅翔。
我們用支付寶支付,不需要bank_type 搀突,那么pay_mode等參數(shù)怎么獲取值呢刀闷?我們可以直接在控制臺(tái)調(diào)用頁(yè)面內(nèi)的方法
-
直接復(fù)制"="右側(cè)的函數(shù)在控制臺(tái)內(nèi),回車(chē)仰迁。(注意頁(yè)面的狀態(tài)應(yīng)該為填寫(xiě)完所有需要的數(shù)據(jù)甸昏,準(zhǔn)備提交時(shí))
Paste_Image.png
Paste_Image.png
喔。原來(lái)cash就是當(dāng)前填寫(xiě)的充值金額(肯定早猜到了吧XD)徐许,而選擇了支付寶的話(huà)施蜜,pay_mode參數(shù)就是"alipaydual", 同理,bank_type的值是1001 雌隅。
-
剛才的js中翻默,還有一段真正的調(diào)用支付的函數(shù):
pay(pay_mode, cash, bank_type);
嘗試填入cash為1,pay_mode為alipaydual恰起, bank_type填1001
報(bào)錯(cuò)了修械,也是中文符號(hào)。仔細(xì)看下检盼,alipaydual應(yīng)該是一個(gè)值肯污,一個(gè)字符串,所以加引號(hào)。
pay("alipaydual", 0.1, 1001);
Paste_Image.png
雖然依舊返回了一個(gè)false仇箱,但是成功調(diào)起了支付窗口县恕,跳轉(zhuǎn)去支付寶頁(yè)面支付即可。
Paste_Image.png
另外覺(jué)得支付寶的console內(nèi)容好可愛(ài)呢...
over ,對(duì)于一個(gè)非計(jì)算機(jī)專(zhuān)業(yè)非開(kāi)發(fā)崗的同學(xué)而言,第一次繞過(guò)簡(jiǎn)單認(rèn)證檩淋,是非常有趣的一件事。