iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
1
Security

我搶到旗子了!30天CTF入門系列 第 5

Day05 [General Skill] Linux基本指令(續)

CTF題目的解法有非常多種,可以先試著自己解看看,解出來後可以再看看別人怎麼解,這樣練習可以很好的訓練自己利用不同的思維來解題,我們就來進行今天的題目吧~

直接nc 2018shell.picoctf.com 31711

題目給了一串2進位的數字要我們轉成單字,這裡推薦一個很實用的進位轉換的網站
https://www.asciitohex.com/
直接把數字複製下來貼上去轉換,接下來又有第二題給的是16進位的數字,然後程式就中止了,因為題目有時間限制,這題的確是可以靠手速解出來,不過提示有說到,大概就是python是個很好個工具,我們就用python解看看吧

這邊會使用到一個python library叫做 pwntools,他是一個很強大的library,他的詳細使用方法請參考文件,pwntools

這邊直接貼上程式碼

#!/usr/bin/env python
from pwn import *

l = remote('2018shell.picoctf.com',31711) #相當於nc 2018shell.picoctf.com 31711
l.recvuntil('stored')

# 第一個問題 binary->ascii
l.recvuntil(' the ')
binary = hex(int(l.recvuntil('as ')[:-3].replace(' ',''),2))[2:].decode('hex')
l.recv()
l.sendline(binary)

#第二個問題 hexadecimal->ascii
l.recvuntil(' the ')
hexadecimal = l.recvuntil('as ')[:-3]
l.recv()
l.sendline(hexadecimal.strip().decode('hex'))

#第三個問題 octal->ascii
l.recvuntil(' the  ')
octal = l.recvuntil('as ')[:-3]
octal = ''.join([chr(int(i,8)) for i in octal.split()])
l.recv()
l.sendline(octal)

# Flag
print l.recv()

先把題目前面的廢話利用recvuntil()讀到要轉換的數字前,再把數字讀進來做進位轉換的處理,透過sendline將答案傳給server,這樣一來就不用練手速解的那麼辛苦啦~

$ ./solve.py
[+] Opening connection to 2018shell.picoctf.com on port 31711: Done
You got it! You're super quick!
Flag: picoCTF{delusions_about_finding_values_68051dea}

[*] Closed connection to 2018shell.picoctf.com port 31711

python在CTF中非常實用,他簡潔的語法可以為解題速度帶來很大的提昇


這題要到shell server做,一樣直接cd到題目給的位子,進到裡面就養成好習慣先ls看看有什麼,
但是ls出來並沒有東西,這時我們利用前幾天講過的ls -al可以看到一個可疑的 . 這個.與當前目錄的 . 是不一樣的,但是我們要對他下什麼指令他會認為是對當前目錄所以都不行

這邊突然靈光一閃,想到一個很奇葩的方法,我用鼠標將他從最前面一格一格反白,竟然發現他的名稱其實是, . 後面接上兩個空白,所以就直接 cat就可以找到Flag啦

$ cat ".  "
picoCTF{j0hn_c3na_paparapaaaaaaa_paparapaaaaaa_22f627d9}

這個Flag好像有聲音!?


題目說你可以用stdin,stdout,stderr找到Flag嗎?
這裡會用到Linux的標準輸出入重新導向,還記得昨天有一題有使用到 echo '剛剛複製的內容' > authorized_keys 當中的 > 就是將echo的輸出導向至authorized_keys這個文件

進到資料夾後裡面有一個 in-out-error的檔案,先執行他看看

他叫我們輸入 Please may I have the flag? 輸入後他出現了一堆我們看不懂的東西,不過既然提示說可以把stdout與stderr分開
這裡可以使用 ./in-out-error 1>/dev/null 其中裡面的1可以換成2試試看,會看到不一樣的東西唷
這邊也介紹一下 /dev/null是 Linux 系統的空裝置,所有寫入這個檔案的資料都會被丟棄,從這裡讀入的檔案會得到EOF,就像是一個黑洞的概念

因為題目有要求輸入一串字所以這邊可以再用到pipe的概念
echo "Please may I have the flag?" | ./in-out-error 1>/dev/null
就可以得到很多很多的Flag picoCTF{p1p1ng_1S_4_7h1ng_b6f5a788}

今天的題目稍微有比較難一點,也開始進入到2顆星的題目,General Skill的部份大概在兩天就會介紹完,再來就要往其他的領域探索囉~


上一篇
Day04 [General Skill] Linux基本指令(續)
下一篇
Day06 [General Skill]Linux基本指令(續)
系列文
我搶到旗子了!30天CTF入門30

1 則留言

0
pornhub1998
iT邦見習生 ‧ 2020-03-13 19:35:00

suck my dick

我要留言

立即登入留言