【攻防世界】warmup

news/2024/10/18 16:49:00/

[HCTF 2018]WarmUp全网最详细解释_[hctf 2018]warmup的解-CSDN博客

 php://filter   读取源码(文件)

php://input  执行php代码,需要post请求提交数据

 Content-Type为image/jpeg        text.

绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht)

1.

知识点

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

随便点进一个,发现文件,可能存在任意文件读取漏洞(路径穿越漏洞),可以实现任意文件的读取。

如果一时半会不知道要读取什么,就先读linux系统都有的文件。

知识点

*  /etc/passwd

*  /etc/environment

*  /etc/hostname

*  /etc/hosts

?file=../../../../../etc/passwd 

发现读取成功,确定有漏洞。 

下一步是读取网站源码。

抓个包,发现服务器是python。既然是python,当前进程肯定是由python xxx.py启动的,只要能

知道当时的命令是什么,就能获取xxx.py的名字,进而读取源码。linux确实有这么个文件,

/proc/self/cmdline:用于获取当前启动进程的完整命令。

?file=../../../../proc/self/cmdline

 

大部分的python网站脚本名都是app.py。该网站使用Python框架,并且因为有app.py可知使用的是flask框架。 读取当前进程的命令行参数。?file=../../../../proc/self/cmdline。发现有一个通过python启动app.py的命令。所以该网站是一个python框架。根据app.py可以知道是flask框架。(该文件常常为flask项目结构中的主程序文件。)

尝试找到并读取app.py,在上一级目录中找到(该路径不是固定的)。读取到app.py的代码内容。

?file=../app.py

import os
import uuid
from flask import Flask, request, session, render_template, Markup
from cat import catflag = ""
app = Flask(__name__,static_url_path='/',static_folder='static'
)
app.config['SECRET_KEY'] = str(uuid.uuid4()).replace("-", "") + "*abcdefgh"  # 此处利用uuid.uuid4()生成了一串id字符串并在后面拼接*abcdefgh
if os.path.isfile("/flag"):  # 导入flag文件并删除掉flag = cat("/flag")os.remove("/flag")@app.route('/', methods=['GET'])
def index():detailtxt = os.listdir('./details/')cats_list = []for i in detailtxt:cats_list.append(i[:i.index('.')])return render_template("index.html", cats_list=cats_list, cat=cat)@app.route('/info', methods=["GET", 'POST'])
def info():filename = "./details/" + request.args.get('file', "")start = request.args.get('start', "0")end = request.args.get('end', "0")name = request.args.get('file', "")[:request.args.get('file', "").index('.')]return render_template("detail.html", catname=name, info=cat(filename, start, end))@app.route('/admin', methods=["GET"])  # 在session信息中admin=1的用户在/admin路径下访问网站可以获得flag,所以要伪造session。
def admin_can_list_root():if session.get('admin') == 1:return flagelse:session['admin'] = 0return "NoNoNo"if __name__ == '__main__':app.run(host='0.0.0.0', debug=False, port=5637)


http://www.ppmy.cn/news/1427875.html

相关文章

面试 Python 基础八股文十问十答第二期

面试 Python 基础八股文十问十答第二期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)为什么有了GIL还要关…

如何根据表名快速定位引用该表的Oracle存储过程

如何根据表名快速定位引用该表的Oracle存储过程 引言场景一:常规查询 - USER_DEPENDENCIES场景二:基于源码搜索 - USER_SOURCE场景三:复杂依赖分析总结与注意事项 引言 在数据库管理和维护过程中,当我们计划对某张特定表进行结构调…

接口压力测试 jmeter--入门篇(一)

一 压力测试的目的 评估系统的能力识别系统的弱点:瓶颈/弱点检查系统的隐藏的问题检验系统的稳定性和可靠性 二 性能测试指标以及测算 【虚拟用户数】:线程用户【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功…

《Java面试自救指南》(专题七)系统场景设计(含分布式、微服务)

文章目录 负载均衡如何实现,有哪几种方式谈谈你对微服务的理解SOA和微服务的区别CAP理论和BASE定理分布式系统需要考虑哪些问题分布式系统如何实现数据一致性如何实现分布式锁你的服务挂了怎么处理限流算法原理和应用分布式ID生成策略一致性算法(2/3pc, paxos, Raft, ZAB)淘…

(0)(0.2) 接近传感器

文章目录 前言 1 配置 2 测试 3 附加功能 前言 Copter/Rover 支持避开飞行器前方可能出现的障碍物。启用这些功能的第一步是安装一个正常工作的接近传感器。ArduPilot 最多支持 4 个传感器。 360 度激光雷达通常作为近距离传感器用于物体回避,但也可将多个测距…

过零可控硅光耦与随机可控硅光耦

无过零检测 推荐型号 MOC3021无过零检测 对应的数据手册 原理框图 工作电流 过零检测 推荐型号 MOC3061 原理框图 工作电流 注意事项 随机导通型是随时打开的。都是过零时关闭 也即是说:过零型打开的都是一个馒头波。 参考链接 过零可控硅光耦怎么用-电路知识干…

Linux中断——嵌入式Linux驱动开发

参考正点原子I.MX6U嵌入式Linux驱动开发指南 一、简介 先来简单了解一般中断的处理方法: ①、使能中断,初始化相应的寄存器。 ②、注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数 ③、中断发生以后进入 IRQ 中…

BaiChuan13B-GPTQ量化详解

知识要点: 1、按照网上搜索的一些代码,如使用auto_gptq原生库进行训练后量化,可能会正常量化,但是在线推理时会出现如找不到bin文件或者tf文件,即模型权重文件,所以和网上大部分代码不同的地方在于&#xf…