Web

Week 1

1. 1zflask

解题思路:

首先打开容器发现出现404网页,刚开始很懵,后来明白了原来是出题人没做主页nishen太懒。根据题目描述,
我们访问robots.txt,发现一个/s3recttt路由,访问下载源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
import flask
from flask import Flask, request, send_from_directory, send

app = Flask(__name__)

@app.route('/api')
def api():
cmd = request.args.get('SSHCTFF', 'ls /')
result = os.popen(cmd).read()
return result

@app.route('/robots.txt')
def static_from_root():
return send_from_directory(app.static_folder,'robots.txt')

@app.route('/s3recttt')
def get_source():
dile_path = "app.py"
return send_file(file_path, as_attachment=true)

if __name__ =='__main__':
app.run(debug-True)

我们可以看到/api路由,默认传参SSHCTFF=ls /,执行结果通过os.open读取,访问该路由则会列出:

我们把参数值改一下变成SSHCTFF=cat /flag就能成功得到flag了。

2. ez_gittt

解题思路:

开启题目查看源码看到注释里有“你说这个Rxuxin会不会喜欢把自己的秘密写到git之类什么的”,可能存在git泄露,拿dirsearch扫一下确实存在,再用GitHack克隆目录,然后使用cd命令进入dist文件中新生成的文件,再使用git log命令查看历史提交记录,如下

3.jvav

解题思路:

开启题目发现如图输入框,而且可以执行

再根据题目描述“如果你已经会用java写hello world了,那么可以试试java怎么执行system command”,题目意思很明确,我们只需要用java写实现命令执行的代码就行了,不会写直接AI一把梭就行了,需要注意的是我们定义的类需要是demo(public class demo),然后按部就班ls /再cat /flag就行了。flag: SHCTF{1cd97424-7553-4571-a6cc-c9d7a2cc8237}

4. 蛐蛐? 蛐蛐!

解题思路:

首先查看源码发现有个重要的source.txt,访问一下得到如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if($_GET['ququ'] == 114514 && strrev($_GET['ququ'])!= 415411){
if($_POST['ququ']!=null){
$eval_param = $_POST['ququ'];
if(strncmp($eval_param,'ququk1',6)===0){
eval($_POST['ququ']);
}else{
echo("不知道为啥变乱码了");
}
}
ehco("不知道为啥变乱码了");


}
else{
echo("不知道为啥变乱码了");
}
?>

第一个条件get传参ququ=114514,但其反转字符串不等于415411,ququ=114514a就能绕过,然后post传参,并且当前六个字段是ququk1时,eval函数会将ququ的值作为php代码执行(注意代码闭合不要漏了;),简单的rce,直接常规ls 和cat得到flag。

5.单身十八年的手速

解题思路:

点击就送flag(偷个懒)。

Week 2

1. guess_the_number

解题思路:

打开容器要求我们输入一个数字,先审计源码,发现一个新的路由/s0urce ,访问一下,得到一个.py文件,文件中包含以下代码。

审一下代码再根据题目描述易知这是一道伪随机数生成的题目,我们只需要找到seed,就能得到对应生成的num1,num2,编写一个脚本来帮助我们完成这项工作。审一下代码再根据题目描述易知这是一道伪随机数生成的题目,我们只需要找到seed,就能得到对应生成的num1,num2,编写一个脚本来帮助我们完成这项工作。回到题目将5188946490打进输入框,就能成功得到flag。

flag为SHCTF{7his_NUm6ER_i5_e45y_huEs5_1cdb9cf5f25e}

2. 登陆验证

解题思路:

一个登录框,要提交Username和Passaword,可以爆破密码试一下,两个都输入admin,回显你不是admin,说明密码应该是对的结合题目,应该只有jwt验证,抓到拿到响应包中的jwt,解密,把’role’:”user”改成’role’:”admin”,签名无效,结合题目存在密钥加密,在kali中使用jwt_tool把密钥爆出来,我们用kali自带的rockyou.txt字典(使用前要解压缩)进行爆破得到密钥为222333。用修改好的jwt重新发包得到flag。

也可以直接在网页修改token,把修改好的jwt贴进去,刷新一下页面就会能得到flag了。

3.自助查询

解题思路:

很明显是一个sql注入,输入1查询,回显的语句是SELECT username,password FROM users WHERE id=(“1
很明显是字符型注入需要我们用”)闭合,然后常规操作,联合查询注入,爆库爆表爆字段,查到字段内容后我们发现出题人把东西藏到注释里了,我们查看注释得到flag。

Week 3

1. 小小cms

解题思路:

扫目录发现管理员入口,访问,有验证码不好爆破先不考虑,查了以下这是yzmcms的后台登陆入口,有默认账号密码,且都是yzmcms,登进去sql语句执行被ban了,搞不了,

看一下数据管理的内容发现flag,备份后下载打开,fake难绷,返返回网站首页可以看到yzmcms是7.0版本的,去搜一下该版本存在的历史漏洞,该版本存在rce漏洞这就和题目描述相吻合了,我找了一个漏洞复现做参考YzmCMS 7.0任意函数调用RCE 漏洞研究分析

有现成payload,修改一下法宝得到flag。