本日進度:
0x3D
轉成 10 進位,這樣就是答案了
就是要會用 strings 指令,把 binary 檔可讀的東西提出來,然後把 picoCTF
樣式找出來就有了
strings strings | grep pico
按照指示把 nc 到他給的網址,然後就會得到 Flag 了
nc jupiter.challenges.picoctf.org 25103
0x70
轉成文字,這樣就是答案了
進入 medium 了!
這題真的比較難,使用第一個 server 取得密碼
接下來連到第二個 server,然後用剛剛的密碼登入後,他會問一些問題,就網路查一下就有了
接下來看一下他題目說的,flag 在 root 下面,但我們 cd 過去之後卻發現沒有 read 的權限
但有個就坐 /script.py
的東西,是可以讀的,看了一下內容
import os
import pty
incorrect_ans_reply = "Lol, good try, try again and good luck\n"
if __name__ == "__main__":
try:
with open("/home/player/banner", "r") as f:
print(f.read())
except:
print("*********************************************")
print("***************DEFAULT BANNER****************")
print("*Please supply banner in /home/player/banner*")
print("*********************************************")
try:
request = input("what is the password? \n").upper()
while request:
if request == 'MY_PASSW@RD_@1234':
text = input("What is the top cyber security conference in the world?\n").upper()
if text == 'DEFCON' or text == 'DEF CON':
output = input(
"the first hacker ever was known for phreaking(making free phone calls), who was it?\n").upper()
if output == 'JOHN DRAPER' or output == 'JOHN THOMAS DRAPER' or output == 'JOHN' or output== 'DRAPER':
scmd = 'su - player'
pty.spawn(scmd.split(' '))
else:
print(incorrect_ans_reply)
else:
print(incorrect_ans_reply)
else:
print(incorrect_ans_reply)
break
except:
KeyboardInterrupt
本來想說可以直接修改 /script.py
讓他列印 flag
但發現他有鎖 write
的權限,就遇到一點困難了,於是我點下了邪惡 Hint
Do you know about symlinks?
去查了一下才知道這題應該是要我們去建造"軟連結",它跟硬連結的差異在於因為他只是單純的指向原本的檔案,不需要讀取的權限,所以就把 /root/flag.txt
連結到 /home/player/banner
,這樣就應該就能讀到 Flag 了
ln -s /root/flag.txt /home/player/banner
然後按下 Ctrl + C
之後再連一次就能看到 Flag 了
規定終端不能使用任何字母,這我隨便猜 */*
找到 flag
位置之後就不知道要怎麼做了 qaq,於是我去找了別人的 Writeup
看到有人是找到了 base64 的位置 /bin/base64
,然後讓他把 Flag 的內容 base64 一次,之後再自己 decode 回來
但這邊要注意的是如果直接用 /???/????64
會跟 /bin/x86_64
混淆,所以要用 /*/???[!_]64
這樣才能找到正確的位置