1. 程式人生 > >2018鵬程杯 初賽 Writeup

2018鵬程杯 初賽 Writeup

1.簽到
公眾號回覆
2.Traffic Light
misc
stegsolve開啟看可以發現1000多幀
網上找了個指令碼分離所有幀(python3+PIL)
根據紅黃綠訊號猜測0 1 空格
可以影象識別 但細心點可以發現檔案大小並不相同 於是根據影象大小得到一串數字 相應的圖片做一個對映即可
3.Quotes
misc
腦洞題
My+mission+in+life+is+not+mer ely+to+survive+but to+thrive+and+to+do+so+w ith+s 空 ome+pass i on+some+compass ion+so me+humor+and+some+style


有個地方有空格 額外注意一下 上面我用漢字表示了 markdown吃空格

#include <bits/stdc++.h>
using namespace std;
int cal(string s){
	int ans = 0;
	for(int i=0;i<s.size();++i){
		if(s[i]=='+') ans++;
	}
	return ans;
}
char emm[]={" abcdefghijklmnopqrstuvwxyz"};
int main(){
	string s;
	string ans;
	while(cin>>s){
		int
t = s.size(); t -= cal(s); ans += emm[t]; } cout<<ans<<endl; return 0; }

4.GreatWall
misc
lsb
stegsolve開啟
data-extract
在這裡插入圖片描述
匯出bin…
刪去前面沒用的字元 他是個jpg…
jpg裡是+ - —— 猜測為分隔符 0 1
在這裡插入圖片描述
5.MyBlog
web

  1. 掃後臺 http://58.20.46.148:26111/index.php
  2. response flag: JTNGZmxhZw==
  3. 解碼得到 ‘?flag’
  4. 根據提示about也有後端?
  5. http://58.20.46.148:26111/YWJvdXQ=.php about base64加密後。。
  6. 格式:echo “str” | base64
    將字串str+換行 編碼為base64字串輸出。

格式:echo -n “str” | base64
將字串str編碼為base64字串輸出。注意與上面的差別。
7./index.php?flag=php://filter/convert.base64-encode/resource=YWJvdXQ%3D

<?php

	$filename = 'flag.txt';
	$flag = 'flag.txt';
	extract($_GET);
	
	if(isset($sign)){
		$file = trim(file_get_contents($filename));
		if($sign === $file){
			echo 'Congratulation!<br>';
			echo file_get_contents($$falg);
		}
		else{
			echo 'don`t give up';
		}
	}
	
?>

8.審計php程式碼 如何bypass?
當傳進去的引數作為檔名變數去開啟檔案時,可以將引數php://傳進,同時post方式傳進去值作為檔案內容,供php程式碼執行時當做檔案內容讀取
POST傳值

6. what’s this

  1. 得到一張玫瑰圖片 改成zip解壓
  2. word改成zip解壓
  3. 在這裡插入圖片描述
  4. 可以看到word裡有一段隱藏文字
  5. 在這裡插入圖片描述
  6. 將其改成jpg 發現並不能開啟
  7. zip2.zip中有一個檔案和2-stage似乎一樣 所以可以明文攻擊
  8. 但是我們發現CRC32並不一樣 所以010editor開啟2-stage.what 再隨便開啟一個png 修改檔案頭
    在這裡插入圖片描述
  9. 然後用神器archpr 明文攻擊一下
    得到:Hello_Hi
  10. ps:你有沒有發現那個txt。。。有同學指出將word裡的隱藏文字copy到txt中同樣可以實現明文攻擊
  11. 解壓之後修改2-stage為jpg
  12. python lsb.py extract 2-stage out Hello_Hi
    是個圖片 考慮lsb
  13. file一下發現是個zip 解壓之
  14. 在這裡插入圖片描述
  15. 發現只有4個位元組 暴力跑crc32
import datetime
import binascii
def showTime():
	print datetime.datetime.now()

def crack():
	crcs = set([0x99BED60E])
	r = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
	for a in r:
		for b in r:
			for c in r:
				for d in r:
					txt = a+b+c+d
					# print txt
					crc  =binascii.crc32(txt)
					if (crc & 0xFFFFFFFF) in crcs:
						print txt

crack()

得到girl
解壓之後得到fakeflag 很失望了
16. 回到word解壓之後的檔案中 我們可以發現有個I_Love_You.emf大小剛好702位元組和我們的zip4相同。。。
17. 異或?

file1 = open("I_Love_You.emf",'rb')
file2 = open("zip4.zip",'rb')
f1 = file1.read()
f2 = file2.read()
print len(f1),len(f2)
out = ''
for i in range(len(f2)):
	out += chr(ord(f1[i])^ord(f2[i]))
with open('flag.zip','wb') as f:
	f.write(out)

解壓之後發現真的是flag~

出題人nb