⭐unctf2020
水一波簡單題。。菜狗前來報道。。大佬輕噴。。如果有時間做題就好了嗚嗚嗚
⭐misc
1、baba_is_you
題目告訴我們,了解png文件格式。
下載得到一張png格式的圖片。
用010editor打開查看,發現最后含有一個B站網址
https://www.bilibili.com/video/BV1y44111737
訪問,查看評論區得到flag
flag:
unctf{let's_study_pwn}
2、陰陽人編碼
下載得到一個pdf,里面文字全是 (陰陽怪氣)。仔細查看,陰陽怪氣也就分為三種:
就這.
不會吧!
就這¿
結合題目中給出的編碼,很容易想到Ook!
編碼
於是,將就這.
替換為.
不會吧!
替換為!
就這¿
替換為?
得到如下:
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook.
Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook.
Ook?Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.Ook.
Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook.
Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook? Ook.
將他復制到揭秘網址進行解密 :
https://www.splitbrain.org/services/ook
得到
flag{9_zhe_Jiu_zhe_8_hui_8}
3、 爺的歷險記
這個附件有點大啊,下載得到一個游戲,(殺死耗子得經驗做任務的“窒息”游戲)
解壓一看
發現 www
的文件夾,直接點進去看,(眾所周知,主要的資源全在這個文件夾里頭)
index.html 根網頁,點進去 出一個error 很真實,環境沒搭建怎么出東西
但這里提示我們 這個 data文件夾很重要
點擊進入,發現一堆json文件,一開始 一系列的map00x.json 引人注意,點進去查看,好像是每一關的任務,但是flag均沒有出現。后來,終於在 Items.json
這個文件里面找到 flag 包括之前的fake flag也在里面。
UNCTF{WelC0me_70_UNCTF2oZ0~}
4、YLB's CAPTCHA - 簽到題
進入一個網頁,ctrl+u查看網頁源碼
<body>
<div class="quote" id="neat">總決賽 彳亍 YLB 驗證碼 服務器宕機 CISCN 知乎 RNM,退錢 有碼無🐴 宕機的平台 2020 WIFI 出題 AWD 業界毒瘤 洋垃圾 陰間平台 CTF春晚 phpstudy 選手主辦方一起AWD 靶機重置 Misc選手狂喜 國際大廠 斷網 Oo0ilLlWwKkSsOoPpCcZz 平台特色 不想打可以不打 PATCH 爛 選手AD 易霖博 鼓掌 Python簽到Pwn題 Docker下發機制 規則反復橫跳 BuildBreakFix OCR 平台被攻擊 AP隔離 運維是新人 義務承辦比賽 提高業界知名度 40道題目,就4題能用的 鼓勵PY 野雞比賽 只開MYSQL的WEB題 ylb倒閉了嗎 買設備提分數 最重要的比賽,最垃圾的平台 交不上去的flag YLBNB 狂歡的知乎 請不要再給ylb壓力了 三個半小時的解題賽 臨時改賽制 祝早日倒閉 易霖博牛逼 全場等待修平台 選手Attack主辦方Defense 免費的快樂水</div>
<form action="./index.php" method="post">
<img src="image_captcha.php" onclick="this.src='image_captcha.php?'+new Date().getTime();"><br/>
<input type="text" name="captcha" placeholder="Entry the CAPTCHA" style="text-align: center;background-color: #53656f;"><br/>
<input type="submit" value="Submit" class="button">
</form>
<script src="./title.js"></script>
</body>
注意到最下面還有一句:
<p>Get 10 points to get flag<br>Your point: </p>
也就是說最直觀的方法,就是讀取驗證碼得到十分,獲取flag。
於是,介於 驗證碼比較難認,將其圖片保存,用stegesolve 換個通道進行查看。
【注意】大小寫要區分!!!
【一步錯全盤皆輸】 得到
UNCTF{7ed2cc4f-184b-43ec-bc21-bc100dbdf9f6}
5、躲貓貓
下載得到一個excel。 用010editor查看 504B0304
修改后綴名 zip 發現基本上都是 xml 文件。放在 idea中進行查看,
最后在 sharedDtrings.xml
發現怪異之處。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="2" uniqueCount="2"><si><t>dW5jdGYlN0I3MzgzYjY3ZGU5MTA2YTZmMTBmZGJlNGU4ZWJjNjRjZSU3RA==</t><phoneticPr fontId="1" type="noConversion"/></si><si><t>你居然把貓貓移開了,但是你也找不到flag</t><phoneticPr fontId="1" type="noConversion"/></si></sst>
注意到一串base64加密的字符串。
dW5jdGYlN0I3MzgzYjY3ZGU5MTA2YTZmMTBmZGJlNGU4ZWJjNjRjZSU3RA==
解密得到
flag
unctf{7383b67de9106a6f10fdbe4e8ebc64ce}
6、網絡深處1
下載附件,得到一段撥號音音頻,一個txt情景步驟導入,和一個有密碼的壓縮包。
在txt里面有一串數字,估計是最終flag的來源之處。
636806841748368750477720528895492611039728818913495104112781919263174040060359776171712496606031373211949881779178924464798852002228370294736546700438210687486178492208471812570216381077341015321904079977773352308159585335376746026882907466893864815887274158732965185737372992697108862362061582646638841733361046086053127284900532658885220569350253383469047741742686730128763680253048883638446528421760929131783980278391556912893405214464624884824555647881352300550360161429758833657243131238478311219915449171358359616665570429230738621272988581871
txt中已經很清楚的告訴我們,必須要解開壓縮包,才能搞清楚這串數字的含義。
而壓縮包密碼就是電話號碼,也就是蘊含在波號音中。
靠人耳辨別是什么號碼,(對我來說)簡直白日做夢。
直接上工具 : dtmf2num.exe
附上下載地址 dtmf2num官方網址 dtmf2num下載地址
下載好后,對此執行命令:
dtmf2num.exe 撥號音.wav
直接出來了:
DTMF2NUM 0.1.1
by Luigi Auriemma
e-mail: aluigi@autistici.org
web: aluigi.org
- open 撥號音.wav
wave size 35200
format tag 1
channels: 1
samples/sec: 8000
avg/bytes/sec: 16000
block align: 2
bits: 16
samples: 17600
bias adjust: -3
volume peaks: -29471 29471
normalize: 3296
- MF numbers: 74
- DTMF numbers: 15975384265
得到 壓縮包密碼為: 15975384265
解壓后,又得到一段音頻和一個txt。
通過txt,我們知道,在音頻中蘊含着一個極大的線索,用於破解那串數字。
用 audacity
音頻文件打開 ,查看波形,沒發現啥。
於是切到 頻譜圖,發現一個關鍵詞 tupper
一開始還不知道是啥意思,於是直接百度 tupper
經過多番搜索,終於 找到了 Tupper自我指涉公式造圖
於是 上腳本:(其實)那串神秘數字就是 k
"""
Copyright (c) 2012, 2013 The PyPedia Project, http://www.pypedia.com
<br>All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
# Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
# Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
http://www.opensource.org/licenses/BSD-2-Clause
"""
__pypdoc__ = """
Method: Tupper_self_referential_formula
Link: http://www.pypedia.com/index.php/Tupper_self_referential_formula
Retrieve date: Tue, 11 Mar 2014 03:15:49 +0200
Plots the [http://en.wikipedia.org/wiki/Tupper's_self-referential_formula Tupper's_self-referential_formula]:
: <math>{1\over 2} < \left\lfloor \mathrm{mod}\left(\left\lfloor {y \over 17} \right\rfloor 2^{-17 \lfloor x \rfloor - \mathrm{mod}(\lfloor y\rfloor, 17)},2\right)\right\rfloor</math>
The plot is the very same formula that generates the plot.
[[Category:Validated]]
[[Category:Algorithms]]
[[Category:Math]]
[[Category:Inequalities]]
"""
def Tupper_self_referential_formula():
k = 636806841748368750477720528895492611039728818913495104112781919263174040060359776171712496606031373211949881779178924464798852002228370294736546700438210687486178492208471812570216381077341015321904079977773352308159585335376746026882907466893864815887274158732965185737372992697108862362061582646638841733361046086053127284900532658885220569350253383469047741742686730128763680253048883638446528421760929131783980278391556912893405214464624884824555647881352300550360161429758833657243131238478311219915449171358359616665570429230738621272988581871
# love yiran
def f(x, y):
d = ((-17 * x) - (y % 17))
e = reduce(lambda x, y: x * y, [2 for x in range(-d)]) if d else 1
f = ((y / 17) / e)
g = f % 2
return 0.5 < g
for y in range(k + 16, k - 1, -1):
line = ""
for x in range(0, 107):
if f(x, y):
line += "@"
else:
line += " "
print(line)
# Method name =Tupper_self_referential_formula()
if __name__ == '__main__':
# print __pypdoc__
returned = Tupper_self_referential_formula()
if returned:
print(str(returned))
執行命令。
遠處觀看 效果更佳哦!!
得到flag
flag{Y29pbA==}
7、被刪除的flag
下載附件,得到一個 flag
文件。
未知格式,直接用010editor打開,ctrl+f 一搜 unctf
, flag就出了。
unctf{congratulations!}
8、你能破解我的密碼嗎
附件下載得到一個 shadow
文件。
root:!:18556:0:99999:7:::
daemon:*:18474:0:99999:7:::
bin:*:18474:0:99999:7:::
sys:*:18474:0:99999:7:::
sync:*:18474:0:99999:7:::
games:*:18474:0:99999:7:::
man:*:18474:0:99999:7:::
lp:*:18474:0:99999:7:::
mail:*:18474:0:99999:7:::
news:*:18474:0:99999:7:::
uucp:*:18474:0:99999:7:::
proxy:*:18474:0:99999:7:::
www-data:*:18474:0:99999:7:::
backup:*:18474:0:99999:7:::
list:*:18474:0:99999:7:::
irc:*:18474:0:99999:7:::
gnats:*:18474:0:99999:7:::
nobody:*:18474:0:99999:7:::
systemd-network:*:18474:0:99999:7:::
systemd-resolve:*:18474:0:99999:7:::
systemd-timesync:*:18474:0:99999:7:::
messagebus:*:18474:0:99999:7:::
syslog:*:18474:0:99999:7:::
_apt:*:18474:0:99999:7:::
tss:*:18474:0:99999:7:::
uuidd:*:18474:0:99999:7:::
tcpdump:*:18474:0:99999:7:::
avahi-autoipd:*:18474:0:99999:7:::
usbmux:*:18474:0:99999:7:::
rtkit:*:18474:0:99999:7:::
dnsmasq:*:18474:0:99999:7:::
cups-pk-helper:*:18474:0:99999:7:::
speech-dispatcher:!:18474:0:99999:7:::
avahi:*:18474:0:99999:7:::
kernoops:*:18474:0:99999:7:::
saned:*:18474:0:99999:7:::
nm-openvpn:*:18474:0:99999:7:::
hplip:*:18474:0:99999:7:::
whoopsie:*:18474:0:99999:7:::
colord:*:18474:0:99999:7:::
geoclue:*:18474:0:99999:7:::
pulse:*:18474:0:99999:7:::
gnome-initial-setup:*:18474:0:99999:7:::
gdm:*:18474:0:99999:7:::
guguguguji:$1$AH$xtjky.3kppbU27tR0SDJT.:18556:0:99999:7:::
systemd-coredump:!!:18556::::::
shadow文件 是linux系統中記載root密碼的保密性文件,可以用 john 來破解。
下載地址: http://www.openwall.com/john/
解壓后,進入 run
目錄。並把 執行命令
john --show shadow
得到 密碼 123456
md5加密
得到flag
unctf{e10adc3949ba59abbe56e057f20f883e}
9、mouse_click
下載附件,拿到 mouse_click.pcapng
很顯然,USB流量分析。
USB協議鼠標數據部分在Leftover Capture Data域中,數據長度為
四個字節
。
第一個字節代表按鍵:
如 0x00時,代表沒有按鍵、0x01時,代表左鍵,0x02時,代表當前按鍵為右鍵。
第二個字節代表鼠標水平偏移量:
值為正時,代表鼠標水平右移多少像素,為負時,代表水平左移多少像素。
第三個字節與第二字節類似,代表垂直上下移動的偏移。
1、將mouse_click.pcapng
中的 Leftover Capture Data域 數據導出
tshark -r mouse_click.pcapng -T fields -e usb.capdata > data.txt
tshark -r mouse_click.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > data.txt #提取並去除空行
得到 如下圖 data.txt 文件
2、規范冒號格式
一般提取會有冒號 格式為 xx:xx:xx:xx
於是 運行腳本 maohao.py
f=open('data.txt','r')
fi=open('out.txt','w')
while 1:
a=f.readline().strip()
if a:
if len(a)==8: # 鼠標流量的話len改為8,鍵盤為16
out=''
for i in range(0,len(a),2):
if i+2 != len(a):
out+=a[i]+a[i+1]+":"
else:
out+=a[i]+a[i+1]
fi.write(out)
fi.write('\n')
else:
break
fi.close()
python maohao.py
3、鼠標流量轉換為坐標
再將所得到的鼠標流量轉換為xy坐標,運行 腳本 mouse.py
如下
nums = []
keys = open('out.txt','r')
f = open('xy.txt','w')
posx = 0
posy = 0
for line in keys:
if len(line) != 12 :
continue
x = int(line[3:5],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 127 :
y -= 256
posx += x
posy += y
btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
f.write(str(posx))
f.write(' ')
f.write(str(posy))
f.write('\n')
f.close()
python mouse.py
得到:
4、gnuplot繪制圖像
運行 gnuplot.exe
將圖像繪制出來
gnuplot> plot "xy.txt"
gnuplot>
最后得到:
很顯然,圖像反了。對其垂直翻轉一下,flag就出了
unctf{U5BC@P}
10、撕壞的二維碼
下載得到一張二維碼,只不過不全。
眾所周知,一張二維碼有三個定位符,補全右上角那個,即可出flag
且記,掃的時候,將二維碼大小稍微調小一點。
unctf{QR@2yB0x}
11、倒影
下載附件得到一個 倒影.exe 用010editor打開,發現 FF D8 FF E0
的文件頭,顯然這是一張 jpg。
往后拉,發現 最后有一串base64編碼字符串。
MDAwMDAwMDAwMEI0MDAwMDAwQTUwMDEwMDAxMDAwMDAwMDAwNjA1MEI0MDUxMDZENkE5RUEyNEU1NzY3MTA2RDdBRDU4QUMyMjk0MDEwNkQ3QUQ1OEFDMjI5NDAwMDgxMDAxMDAwMDAwMDAwMDAwMjAwQTA0Nzg3NDdFMjc2MTZDNjY2MDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwNDIwMDgwMDAwMDAwOTEwMDAwMDA1Mjk3RDQ1MzVFMTU1NUU1QzkwMDAwODAxMDAwQTAwMEYzMjAxMEI0MDVCNEVDQzdFOTg4OUVERjFCQTMwQzZGRjcxODM2RUJDRkU5QTczNUVGRDZFNTAxQ0UxNDEwOTUwNTgyNzc2NEI2OURDMzdDNkUyRTQ3ODc0N0UyNzYxNkM2NjYwMDAwMDA4MDAwMDAwMDkxMDAwMDAwNTI5N0Q0NTM1RTE1NTVFNUM5MDAwMDgwMTAwMEEwNDAzMEI0MDU=
得到一串 十六進制字符串
0000000000B4000000A500100010000000006050B405106D6A9EA24E5767106D7AD58AC22940106D7AD58AC229400081001000000000000200A0478747E27616C666000000000000000200000000000000420080000000910000005297D4535E1555E5C90000801000A000F32010B405B4ECC7E9889EDF1BA30C6FF71836EBCFE9A735EFD6E501CE14109505827764B69DC37C6E2E478747E27616C66600000080000000910000005297D4535E1555E5C90000801000A04030B405
shift+v 復制進010editor。
注意: 40 30 B4 05
反一下 就是 50 4B 03 04
說明,要把得到的十六進制字符串倒序 ==》 倒影的真正含義。
附java腳本 :
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String str[] = s.split("");
for(int i=str.length-1;i>=0;--i) {
System.out.print(str[i]);
}
}
}
得到:
504B03040A00010800009C5E5551E5354D79250000001900000008000000666C61672E747874E2E6C73CD96B46772850590141EC105E6DFE537A9EFCBE63817FF6C03AB1FDE9889E7CCE4B504B01023F000A00010800009C5E5551E5354D792500000019000000080024000000000000002000000000000000666C61672E7478740A002000000000000100180004922CA85DA7D60104922CA85DA7D6017675E42AE9A6D601504B050600000000010001005A0000004B0000000000
修改后綴名 zip。 得到一個加密的壓縮包。
但沒有其他提示,直接暴力破解一下
得到 密碼: 658745
解壓得到flag
UNCTF{Th13_Is_@_F1@G}
12、EZ_IMAGE
下載得到 225張雜亂無章的jpg圖。解法很簡單,就是將這圖拼起來即可。
1、 montage
命令
使用該命令,實現多張圖合並成為一張圖。 montage命令詳解
(kali Linux)安裝命令:
apt-get install graphicsmagick-imagemagick-compat
進入解壓后的文件夾目錄下,執行命令
montage *.jpg -tile 15x15 -geometry +0+0 1.jpg
得到:
2、 gaps命令自動拼圖
git clone https://github.com/nemanja-m/gaps.git
cd gaps
先用 pip3安裝好以下庫:
pip3 install numpy
pip3 install opencv-python
pip3 install matplotlib
pip3 install pytest
pip3 install pillow
安裝完成后,打開 requirements.txt
修改里面庫對應的版本。
此為版本號 , 比如我是:
numpy==1.18.4
opencv-python==4.4.0.46
matplotlib==3.2.2
pytest==4.6.11
pillow==6.2.1
再執行以下命令。
pip3 install -r requirements.txt
sudo apt-get install python-tk
pip3 install -e .
安裝完成后,將之前合成的1.jpg 拖到 gaps-master
該目錄下, 執行以下命令:
gaps --image=1.jpg --population=500 --size=60 --save
【注意】一定要控制 pieces等於圖的總張數
最后得到
flag即為:
UNCTF{EZ_MISC_AND_HACK_FUN}
⭐Crypto
1、easy_rsa
下載得到 rsa 加密腳本,比較簡單:
from Crypto.Util import number
import gmpy2
from Crypto.Util.number import bytes_to_long
p = number.getPrime(1024)
q = number.getPrime(1024)
if p > q:
a = p + q
b = p - q
print(a,b)
n = p * q
e = 65537
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = bytes_to_long(b'msg')
c = pow(m,e,n)
print(c)
#320398687477638913975700270017132483556404036982302018853617987417039612400517057680951629863477438570118640104253432645524830693378758322853028869260935243017328300431595830632269573784699659244044435107219440036761727692796855905230231825712343296737928172132556195116760954509270255049816362648350162111168
#9554090001619033187321857749048244231377711861081522054479773151962371959336936136696051589639469653074758469644089407114039221055688732553830385923962675507737607608026140516898146670548916033772462331195442816239006651495200436855982426532874304542570230333184081122225359441162386921519665128773491795370
#22886015855857570934458119207589468036427819233100165358753348672429768179802313173980683835839060302192974676103009829680448391991795003347995943925826913190907148491842575401236879172753322166199945839038316446615621136778270903537132526524507377773094660056144412196579940619996180527179824934152320202452981537526759225006396924528945160807152512753988038894126566572241510883486584129614281936540861801302684550521904620303946721322791533756703992307396221043157633995229923356308284045440648542300161500649145193884889980827640680145641832152753769606803521928095124230843021310132841509181297101645567863161780
很容易得到 p q 且已知 n e 直接上腳本 跑即可:
import libnum
from Crypto.Util.number import long_to_bytes
a = 320398687477638913975700270017132483556404036982302018853617987417039612400517057680951629863477438570118640104253432645524830693378758322853028869260935243017328300431595830632269573784699659244044435107219440036761727692796855905230231825712343296737928172132556195116760954509270255049816362648350162111168
b = 9554090001619033187321857749048244231377711861081522054479773151962371959336936136696051589639469653074758469644089407114039221055688732553830385923962675507737607608026140516898146670548916033772462331195442816239006651495200436855982426532874304542570230333184081122225359441162386921519665128773491795370
c = 22886015855857570934458119207589468036427819233100165358753348672429768179802313173980683835839060302192974676103009829680448391991795003347995943925826913190907148491842575401236879172753322166199945839038316446615621136778270903537132526524507377773094660056144412196579940619996180527179824934152320202452981537526759225006396924528945160807152512753988038894126566572241510883486584129614281936540861801302684550521904620303946721322791533756703992307396221043157633995229923356308284045440648542300161500649145193884889980827640680145641832152753769606803521928095124230843021310132841509181297101645567863161780
# a = p + q
# b = p - q
p = (a+b) // 2
q = (a-b) // 2
n = q * p
e = 65537
d = libnum.invmod(e, (p - 1) * (q - 1))
m = pow(c, d, n) # m 的十進制形式
string = long_to_bytes(m) # m明文
print(string) # 結果為 b‘ m ’ 的形式
#print(libnum.n2s(m)) #(n2s將數值轉化為字符串)
得到
b'UNCTF{welcome_to_rsa}'
2、簡單的RSA
下載得到一個txt
e= 18437613570247445737704630776150775735509244525633303532921813122997549954741828855898842356900537746647414676272022397989161180996467240795661928117273837666615415153571959258847829528131519423486261757569454011940318849589730152031528323576997801788206457548531802663834418381061551227544937412734776581781
n= 147282573611984580384965727976839351356009465616053475428039851794553880833177877211323318130843267847303264730088424552657129314295117614222630326581943132950689147833674506592824134135054877394753008169629583742916853056999371985307138775298080986801742942833212727949277517691311315098722536282119888605701
c= 140896698267670480175739817539898638657099087197096836734243016824204113452987617610944986742919793506024892638851339015015706164412994514598564989374037762836439262224649359411190187875207060663509777017529293145434535056275850555331099130633232844054767057175076598741233988533181035871238444008366306956934
顯然,這e 非常大。馬上想到是 rsa wiener-attack 。於是 修改腳本如下:
import RSAwienerHacker
e= 18437613570247445737704630776150775735509244525633303532921813122997549954741828855898842356900537746647414676272022397989161180996467240795661928117273837666615415153571959258847829528131519423486261757569454011940318849589730152031528323576997801788206457548531802663834418381061551227544937412734776581781
n= 147282573611984580384965727976839351356009465616053475428039851794553880833177877211323318130843267847303264730088424552657129314295117614222630326581943132950689147833674506592824134135054877394753008169629583742916853056999371985307138775298080986801742942833212727949277517691311315098722536282119888605701
d = RSAwienerHacker.hack_RSA(e,n)
if d:
print(d)
得到 d :
74651354506339782898861455541319178061583554604980363549301373281141419821253
有 c、e、d、n 接下來,有手就行,直接上腳本!
from Crypto.Util.number import long_to_bytes
e= 18437613570247445737704630776150775735509244525633303532921813122997549954741828855898842356900537746647414676272022397989161180996467240795661928117273837666615415153571959258847829528131519423486261757569454011940318849589730152031528323576997801788206457548531802663834418381061551227544937412734776581781
n= 147282573611984580384965727976839351356009465616053475428039851794553880833177877211323318130843267847303264730088424552657129314295117614222630326581943132950689147833674506592824134135054877394753008169629583742916853056999371985307138775298080986801742942833212727949277517691311315098722536282119888605701
c= 140896698267670480175739817539898638657099087197096836734243016824204113452987617610944986742919793506024892638851339015015706164412994514598564989374037762836439262224649359411190187875207060663509777017529293145434535056275850555331099130633232844054767057175076598741233988533181035871238444008366306956934
d = 74651354506339782898861455541319178061583554604980363549301373281141419821253
m = pow(c, d, n) # m 的十進制形式
string = long_to_bytes(m) # m明文
print(string) # 結果為 b‘ m ’ 的形式
得到flag:
b'unctf{wi3n3r_Att@ck}'
3、鞍山大法官開庭之缺的營養這一塊怎么補
顯然題干給出的是一種未知編碼的字符串
ottttootoootooooottoootooottotootttootooottotttooootttototoottooootoooottotoottottooooooooottotootto
先來看一下,里面就涉及兩種字母,很容易讓人想到 二進制 ,嘗試轉字符串,失敗。
還有一種編碼,培根密碼,也是涉及2個字符。嘗試 在線解密
先將 o 替換為A , t替換為B。
ABBBBAABAAABAAAAABBAAABAAABBABAABBBAABAAABBABBBAAAABBBABABAABBAAAABAAAABBABAABBABBAAAAAAAAABBABAABBA
得到flag
unctf{PEIGENHENYOUYINGYANG}
⭐Reverse
1、re_checkin
先考慮有沒有殼。用PEID一查 無。 安心拖入 IDA
先 shift+f12 查看字符串。
發現success
敏感詞,進行追蹤,來到函數sub_401550() 按F5
__int64 sub_401550() { char Str1; // [sp+20h] [bp-60h]@1 sub_40B300(); puts("Welcome!Please Input:"); sub_419C00("%1000s", &Str1); if ( !strcmp(&Str1, &Str2) ) puts("success!"); else puts("fail!"); system("pause"); return 0i64; }
很快發現,strcmp
是 Str1與Str2 對比 ,因為Str1輸入,於是追蹤Str2
發現 在 sub_4015DC 函數,進行查看
void sub_4015DC() { Str2 = 117; byte_42F041 = 110; byte_42F042 = 99; byte_42F043 = 116; byte_42F044 = 102; byte_42F045 = 123; byte_42F046 = 87; byte_42F047 = 101; byte_42F048 = 108; byte_42F049 = 99; byte_42F04A = 111; byte_42F04B = 109; byte_42F04C = 101; byte_42F04D = 84; byte_42F04E = 111; byte_42F04F = 85; byte_42F050 = 78; byte_42F051 = 67; byte_42F052 = 84; byte_42F053 = 70; byte_42F054 = 125; byte_42F055 = 0; }
很顯然 ASCII碼 轉換得到 : 在線網站
得到
unctf{WelcomeToUNCTF}
2、babypy
得到了一個 .exe 和一個txt
txt如下:
313131303130313031313031313130303131303030313130313131303130303031313030313130303131313130313130313031303130303031313031303030303130303030303030313131303130303031303131313131303131303130303130313131303031313031303131313131303131313030313030313130303130313031313030303031303031313030303130303131303030313031313131303031303130313131313130313130303031313030313130303030303031313030303030303131303030313031313131313031
首先對 babypy.exe 進行殼檢查,發現 無殼。
這個時候,我們需要對exe進行反編譯為python源碼。
利用 pyinstxtractor.py
來進行反編譯。 下載地址戳這里
執行命令:
python pyinstxtractor.py babypy.exe
注意到 babypy 重點源文件,但是由於反編譯不是十全十美的,他喪失了文件頭,因此沒有后綴 .pyc
於是,打開一個本身的pyc,查看文件頭
42 0D 0D 0A 00 00 00 00
於是給他補上:
42 0D 0D 0A 00 00 00 00 70 79 69 30 10 01 00 00
並修改后綴名 .pyc 再進行反編譯 生成py文件 反編譯地址
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
import os
import libnum
import binascii
flag = 'unctf{*******************}'
# WARNING: Decompyle incomplete
看到這里,跟自己之前想的很有出入,本來以為會出全部腳本,於是思路斷了。
其實是忘記了,出題方給的重要訊息!那個 tip.txt
於是,解題腳本如下:
import libnum
m = 0x313131303130313031313031313130303131303030313130313131303130303031313030313130303131313130313130313031303130303031313031303030303130303030303030313131303130303031303131313131303131303130303130313131303031313031303131313131303131313030313030313130303130313031313030303031303031313030303130303131303030313031313131303031303130313131313130313130303031313030313130303030303031313030303030303131303030313031313131313031
str = libnum.n2s(m)
print(libnum.b2s(str))
跑出 flag:
unctf{Th@t_is_rea11y_c001}
3、反編譯
下載得到一個 run.exe
加之題目“反編譯” ,與上題一樣的思路。
利用 pyinstxtractor.py
來進行反編譯。
執行命令:
python pyinstxtractor.py run.exe
給run補上,並修改后綴名
42 0D 0D 0A 00 00 00 00 70 79 69 30 10 01 00 00
再進行反編譯 生成py文件 反編譯地址
得到:
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
str2 = 'UMAQBvogWLDTWgX"""k'
flag = ''
for i in range(len(str2)):
flag += chr(ord(str2[i]) + i)
print(flag)
直接跑出flag
UNCTF{un_UN_ctf123}
⭐pwn
1、YLBNB
直接nc一把
nc 45.158.33.12 8000
於是直接上 exp (最簡單的那種)
from pwn import *
p = remote('45.158.33.12', 8000)
payload = ''
p.sendline(payload)
p.interactive()
得到flag
UNCTF{Gu@rd_Th3_Bes7_YLB}
下次一定!!