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
- 掃後臺 http://58.20.46.148:26111/index.php
- response flag: JTNGZmxhZw==
- 解碼得到 ‘?flag’
- 根據提示about也有後端?
- http://58.20.46.148:26111/YWJvdXQ=.php about base64加密後。。
- 格式: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
- 得到一張玫瑰圖片 改成zip解壓
- word改成zip解壓
- 可以看到word裡有一段隱藏文字
- 將其改成jpg 發現並不能開啟
- zip2.zip中有一個檔案和2-stage似乎一樣 所以可以明文攻擊
- 但是我們發現CRC32並不一樣 所以010editor開啟2-stage.what 再隨便開啟一個png 修改檔案頭
- 然後用神器archpr 明文攻擊一下
得到:Hello_Hi - ps:你有沒有發現那個txt。。。有同學指出將word裡的隱藏文字copy到txt中同樣可以實現明文攻擊
- 解壓之後修改2-stage為jpg
python lsb.py extract 2-stage out Hello_Hi
是個圖片 考慮lsb- file一下發現是個zip 解壓之
- 發現只有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