unctf2020 部分簡單題題解


⭐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自我指涉公式造圖


附一篇大佬的介紹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}

下次一定!!


【轉載請放鏈接】https://www.cnblogs.com/Jlay/p/unctf_2020.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM