当前位置: 首页 > news >正文

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题(任重道远)

前面很简单 都是签到题

这里主要记录一下没想到的题目

[GDOUCTF 2023]hate eat snake js前端修改

这里 是对js的处理

有弹窗 说明可能存在 alert

我们去看看js

这里进行了判断 如果 getScore>-0x1e9* 我们结合上面 我觉得是60

然后我们去看看定义

找到了定义分数的方法 我们可以通过前端定义

Snake.prototype.getScore = () => 100

来设定我们的分数为100

[NISACTF 2022]babyupload os.path.join漏洞

这里通过源代码可以获取备份文件

from flask import Flask, request, redirect, g, send_from_directory
import sqlite3
import os
import uuidapp = Flask(__name__)SCHEMA = """CREATE TABLE files (
id text primary key,
path text
);
"""def db():g_db = getattr(g, '_database', None)if g_db is None:g_db = g._database = sqlite3.connect("database.db")return g_db@app.before_first_request
def setup():os.remove("database.db")cur = db().cursor()cur.executescript(SCHEMA)@app.route('/')
def hello_world():return """<!DOCTYPE html>
<html>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">Select image to upload:<input type="file" name="file"><input type="submit" value="Upload File" name="submit">
</form>
<!-- /source -->
</body>
</html>"""@app.route('/source')
def source():return send_from_directory(directory="/var/www/html/", path="www.zip", as_attachment=True)@app.route('/upload', methods=['POST'])
def upload():if 'file' not in request.files:return redirect('/')file = request.files['file']if "." in file.filename:return "Bad filename!", 403conn = db()cur = conn.cursor()uid = uuid.uuid4().hextry:cur.execute("insert into files (id, path) values (?, ?)", (uid, file.filename,))except sqlite3.IntegrityError:return "Duplicate file"conn.commit()file.save('uploads/' + file.filename)return redirect('/file/' + uid)@app.route('/file/<id>')
def file(id):conn = db()cur = conn.cursor()cur.execute("select path from files where id=?", (id,))res = cur.fetchone()if res is None:return "File not found", 404# print(res[0])with open(os.path.join("uploads/", res[0]), "r") as f:return f.read()if __name__ == '__main__':app.run(host='0.0.0.0', port=80)

读取完毕后发现 不允许有后缀

并且读取文件是通过

    # print(res[0])with open(os.path.join("uploads/", res[0]), "r") as f:return f.read()

这里来进行的

这里主要是 os.path.join 存在一个漏洞

第一个以”/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始

这个时候 我们如果输入 /flag 就会读取/flag 生成 uuid 那么这个时候的flag其实就是原本存储的文件

所以我们可以实现文件读取

[NISACTF 2022]level-up   create_function代码注入

这里也挺有意思的 记录一下

通过前面的 MD5 sha1 绕过

我们可以到第五关

<?php
//sorry , here is true last level
//^_^
error_reporting(0);
include "str.php";$a = $_GET['a'];
$b = $_GET['b'];
if(preg_match('/^[a-z0-9_]*$/isD',$a)){show_source(__FILE__);
}
else{$a('',$b);
}

这种格式我们就可以想到可能是create_function

我们来了解一下

$a('',$b);我们对 $b输入注入}system('tac /flag');//

这样源代码是什么呢

create_function('',a)会被构造为function fT() {a;}这个时候我们输入构造function fT() {}system('tac /flag');//}这个时候 就构造闭合 实现了注入

然后前面的正则是不允许字母数字下划线开头 所以我们构造 \

http://www.lryc.cn/news/211506.html

相关文章:

  • ArcGIS Maps SDK for JS:隐藏地图边框
  • 带你秒懂MySQL!! 一万字详细知识点和基础操作 欢迎评论区怼我 (三)
  • kubeadmin部署k8s1.27.4
  • 【Aurix Tricore】HighTec启动代码crt0-tc37x.c分析笔记
  • Linux高级命令(扩展)
  • LLM在text2sql上的应用 | 京东云技术团队
  • 【MySQL】 复合查询 | 内外连接
  • 【linux】麒麟v10安装openjdk8
  • 项目部署与上线
  • 系统架构主题之八:非功能性需求对系统架构及设计的影响
  • 盛元广通化工实验室管理系统
  • 代码没注释?一个方法几百行?
  • Angular-04:指令
  • [SpringCloud] Eureka 与 Ribbon 简介
  • 【Python 零基础入门】常用内置函数 再探
  • 10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节
  • 亮氨酸脯氨酸肽——一种新型的医药中间体研究肽
  • Ubuntu 22.04 开机闪logo后卡在/dev/sda3: clean
  • avue-crud 自定义列
  • 达索系统SOLIDWORKS 2024 装配体新增功能
  • 电脑入门:电脑专业英语500词,供新手参考
  • 采购管理工具-采购软件-Leangoo免费看板工具
  • 【23真题】大神凭这套拿452分!看看你能拿多少?
  • 大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)
  • CSS基础入门04
  • LeetCode2741.特别的排列 状压
  • 【Linux】Centos 8 服务器部署:阿里云域名注册、域名解析、个人网站 ICP 备案详细教程
  • Sass、Less和Stylus之间有什么主要的区别?
  • 第八章 软件测试自动化
  • 科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命