這是第一次做CTF題目捕发,之前也是看別人的writeup,很多看不懂,但是今天先在ctf實(shí)驗(yàn)吧看了課程-web專題很魂,聽了老師的講導(dǎo)后扎酷,自己也跟著做了一遍,雖然看過了遏匆,但是動手做起來法挨,還是磕磕碰碰的谁榜。
0x00:Forms
解題連接:http://ctf5.shiyanbar.com/10/main.php
打開鏈接后顯示:
發(fā)現(xiàn)只有一個(gè)輸入框,什么也沒有凡纳,查看源代碼窃植,發(fā)現(xiàn)有一個(gè)隱藏的輸入框:
這時(shí)按F12,修改type="hidden"為"text"后就能看到輸入框了荐糜,其中value=0,這時(shí)候還是不知道另外一個(gè)輸入框該填什么巷怜,然后試著修改了一下value的值,令value=1,再提交一下暴氏,就看到進(jìn)一步的提示了:
這時(shí)復(fù)制pin值到輸入框里就拿到flag
ctf{forms_are_easy}
0x01:貌似有點(diǎn)難
解題鏈接: http://ctf5.shiyanbar.com/phpaudit/
打開鏈接后顯示:
觀察函數(shù)延塑,可以得知,這道題是要我們來修改ip地址答渔,從而得到flag关带。這里就需要了解HTTP的headers中的一些頭部了,其中
X-Forwarded-For:host 就是告訴服務(wù)器本機(jī)的地址是host
那么只要我們發(fā)送的request包中包含X-Forwarded-For:1.1.1.1 就可以得到flag.這里可以用到burpsuit去截包沼撕,然后修改header宋雏,發(fā)送后就能得到結(jié)果。另外务豺,我還實(shí)驗(yàn)了另外的兩個(gè)函數(shù)磨总,也發(fā)送了包含Client-IP:1.1.1.1和Remote-addr:1.1.1.1的包,前者成功得到flag,但是后面的不行冲呢,我估計(jì)應(yīng)該是前面拼寫錯(cuò)誤舍败,因?yàn)橐婚_始我也是用X-Forwarded-For去實(shí)驗(yàn),但是因?yàn)槠村e(cuò)了一直得不到結(jié)果敬拓。
很明顯這里就能得到flag了:
SimCTF{daima_shengji}
ps: burpsuite我也是第一次用邻薯,也是照著視頻中老師操作的步驟照貓畫虎,有空還需要去看看關(guān)于burpsuite的使用方法.
0x02:后臺登錄
這題應(yīng)該是更新過后和老師視頻中講述的不一樣乘凸,自己也是弄了有點(diǎn)時(shí)間厕诡,期間google了很多東西,但是也學(xué)到了很多.
解題鏈接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
打開鏈接后顯示:
這題看注釋里看到了sql語句的構(gòu)造营勤,所以一開始想到了sql注入灵嫌,但是觀察構(gòu)造的語句,發(fā)現(xiàn)用戶輸入的內(nèi)容先經(jīng)過了md5函數(shù)的編碼葛作,才進(jìn)行sql語句構(gòu)造寿羞。所以這時(shí)直接去查看php中md5函數(shù),google了一下發(fā)現(xiàn)這個(gè)函數(shù)是存在不合理的地方赂蠢。
php中的md5函數(shù)绪穆,它有兩個(gè)參數(shù)string和raw。第一個(gè)參數(shù)string是必需的,規(guī)定要計(jì)算的字符串玖院。第二個(gè)參數(shù)raw可選菠红,規(guī)定十六進(jìn)制或二進(jìn)制輸出格式:
TRUE - 原始 - 16 字符二進(jìn)制格式
FALSE - 默認(rèn) - 32 字符十六進(jìn)制數(shù)
示例如下:
<?php
$str = "Shanghai";
echo "字符串:".$str."
"; echo "TRUE - 原始 16 字符二進(jìn)制格式:".md5($str, TRUE)."
"; echo "FALSE - 32 字符十六進(jìn)制格式:".md5($str)."
"; ?>
輸出為:
字符串:Shanghai
TRUE - 原始 16 字符二進(jìn)制格式:Tf頦+飼X0蠨鎗?)?
FALSE - 32 字符十六進(jìn)制格式:5466ee572bcbc75830d044e66ab429bc
由上述的例子可以知道當(dāng)?shù)诙€(gè)參數(shù)是true時(shí),該函數(shù)輸出的是以二進(jìn)制的字節(jié)來輸出的难菌,而二進(jìn)制打印在屏幕時(shí)會先轉(zhuǎn)換成字符串试溯,那么就會存在編碼問題.所以這時(shí)構(gòu)造可以注入的sql語句,我們就可以逆hash輸出它原來的表示形式郊酒。但是我們都知道hash是不可逆的遇绞,所以想到的就是窮舉法。下面這篇外國大佬的博客寫了他當(dāng)時(shí)做這題的辦法和思路猎塞,以及最后的結(jié)果试读。趕緊收藏一波
博客鏈接:http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes
這里貼上兩個(gè)別人構(gòu)造好的字符串:
content: 129581926211651571912466741651878684928 (這是我們輸入的字符串,用來進(jìn)行md5編碼)
hex: 06da5430449f8f6f23dfc1276f722738? (編碼后得到的二進(jìn)制字節(jié)碼荠耽,用16進(jìn)制的形式表示)
raw: \x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8
string: T0Do#'or'8 (這是通過二進(jìn)制字節(jié)碼在utf-8編碼下顯示出來的字符串)
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
經(jīng)過試驗(yàn),兩個(gè)都是成功的比藻。把content的內(nèi)容復(fù)制到輸入框里就得到flag
flag{ffifdyop_has_trash}
這是第一次寫博客铝量,很亂,而且也不懂的排版银亲,看起來也不美觀慢叨,還是需要多去看看大佬們的博客,學(xué)習(xí)別人的技術(shù)同時(shí)也學(xué)習(xí)一下怎么把博客寫好.