buuctf_练[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4

文章目录

      • [CISCN2019 华东南赛区]Web4
      • 掌握知识
      • 解题思路
        • 代码分析
        • 正式解题
      • 关键paylaod

在这里插入图片描述

掌握知识

​ 根据url地址传参结构来判断php后端还是python后端;uuid.getnode()函数的了解,可以返回主机MAC地址十六进制;python网站源码多半处于/app.app.py;代码审计,session欺骗,session的加解密

解题思路

  1. 打开题目链接,发现有一个超链接可以点击,点击之后发现实现了跳转,来到了百度界面,看url地址发现是远程文件包含的可能,但懒得开服务器测试了,试一试是否可以本地文件包含。包含/etc/passwd成功回显内容,确认可疑文件包含。尝试包含/flag文件直接显示黑客

image-20231026102205746

image-20231026102201585

image-20231026102212600

  1. 尝试查看网站源码,一开始还以为依旧是php的后端,查看/var/www/html/index.php发现页面返回无响应,想着去看一看url给出的文件名,发现只有read并没有后缀,了解了一下,发现这是写路由形式,是python后端的标志。记住一个知识点url/read?id=xxxx这种在url和参数中间又会有一段字符串的,可以考虑是写了路由,不是php后端,可能是python后端

  2. 那就去读取一下python网站的默认源码文件,/app/app.py成功回显源码内容,简单看了一下,感觉是session欺骗的题目,又生成了session私钥,又给了session字段信息,获得flag还需要修改其中的字段信息,很明显的session欺骗考察的逻辑

# encoding:utf-8
import re, random, uuid, urllib
from flask import Flask, session, request

app = Flask(__name__)
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)
app.debug = True

@app.route('/')
def index():
    session['username'] = 'www-data'
    return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>'

@app.route('/read')
def read():
    try:
        url = request.args.get('url')
        m = re.findall('^file.*', url, re.IGNORECASE)
        n = re.findall('flag', url, re.IGNORECASE)
        if m or n:
            return 'No Hack'
        res = urllib.urlopen(url)
        return res.read()
    except Exception as ex:
        print str(ex)
    return 'no response'

@app.route('/flag')
def flag():
    if session and session['username'] == 'fuck':
        return open('/flag.txt').read()
    else:
        return 'Access denied'

if __name__=='__main__':
    app.run(
        debug=True,
        host="0.0.0.0"
    )
代码分析
  1. 又是老朋友随机数了,根据随机数种子生成随机数,由于伪随机数漏洞,只要确保随机数种子一样,版本一样,次序一样,使用相同的随机数生成代码就能生成同样的随机数,所以这里关键的就是uuid.getnode()函数的返回值了。搜索了一下发现函数返回结果为MAC地址的十六进制形式,那也很好办,之前学习ssti计算PIN码也就遇到读取MAC文件,继续文件包含读取MAC地址/sys/class/net/eth0/address。根据源码的文件头注释猜测是python2的可能性大一点,因为去在线网站查看了一下相应的头部信息。
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)

image-20231026103041174

image-20231026103653100

image-20231026103149456

  1. /read路劲现在已经没什么用处了,这里过滤了flag也就不能直接文件包含读取flag.txt了。/路径是给session字段赋值用户信息的
@app.route('/')
def index():
    session['username'] = 'www-data'
    return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>'

@app.route('/read')
def read():
    try:
        url = request.args.get('url')
        m = re.findall('^file.*', url, re.IGNORECASE)
        n = re.findall('flag', url, re.IGNORECASE)
        if m or n:
            return 'No Hack'
        res = urllib.urlopen(url)
        return res.read()
    except Exception as ex:
        print str(ex)
    return 'no response'
  1. 其实/flag字段也很好理解,就是要修改session字段的用户为fuck,只需要抓取/flag的请求包,将其的session字段使用加解密脚本和私钥进行加解密,修改好用户信息之后将新的session字段替换一下,发送包即可得到flag。这道题关键也就在确定python后端,读取/app/app.py的网站源码信息
@app.route('/flag')
def flag():
    if session and session['username'] == 'fuck':
        return open('/flag.txt').read()
    else:
        return 'Access denied'
正式解题
  1. 整体分析结束,其实还可以,后面也就是简单的session欺骗过程了。开始抓包获得/flag界面的session字段,其实session也都一样,为了直接替换的flag方便。直接使用加解密脚本进行对session伪造的操作。由于加密脚本使用命令行会报错,所以就使用pycharm自带的功能,可以传递形参来替换命令行执行的方式,得到加密的session字段

image-20231026104231637

image-20231026104727446

image-20231026104731614

image-20231026104734984

  1. 替换原来的session字段,发送包成功拿下flag

image-20231026104913708

关键paylaod

python网站源码   /app/app.py

MAC地址文件路径  /sys/class/net/eth0/address

session解密脚本传参   encode -s 82.684855651 -t "{'username':'fuck'}"

私钥生成脚本
import random

mac="6ed1b6c952d6"
random.seed(int(mac,16))
key = str(random.random() * 233)
print key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/106118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录锁,间隙锁,临键锁还在傻傻分不清楚?一招教你直达行级锁本质

引入记录锁&#xff0c;间隙锁&#xff0c;临键锁的目的是为了干嘛&#xff1f;是为了解决幻读问题&#xff0c;也就是防止一个事务A在查询的时候&#xff0c;另一个事务B在它查询的区间内插入&#xff0c;删除&#xff0c;修改数据&#xff0c;导致事务A前后查询到的行数不一致…

vue+golang上传微信头像

<button class"avatar" open-type"chooseAvatar" chooseavatar"onChooseAvatar"><image :src"avatarUrl" class"avatar-img"></image></button> // 微信头像修改onChooseAvatar(e) {this.uploadFil…

有用过成绩查询系统的老师吗?

是不是有时候觉得手动查询成绩是一件超级繁琐的事情&#xff1f;有了这个成绩查询系统&#xff0c;你就可以告别手动时代啦&#xff01; 先来了解一下什么是成绩查询系统。成绩查询系统是一种可以自动查询学生成绩的系统。通过这个系统&#xff0c;学生可以输入自己的学号或姓名…

【软件教程】如何用C++检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、CODE 其中port需要修改为想要检测的端口号&#xff0c;也可以将代码…

单元测试到底是什么?应该怎么做?

一、什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围&#xff0c;并没有一个明确的标准&#xff0c;“单元”可以是一个函数、方法、类、功能模块或者子系统。 …

ios ipa包上传需要什么工具

​ 目录 前言 一、IPA包的原理 二、IPA包上传的步骤 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iTunes或者其他第三方应用商店安装到iOS设备上。…

手把手教你安装配置『Oracle Database 19c』

前言 本文将会讲解如何在 Windows 系统上安装 Oracle Database 19c 数据库&#xff0c;适合初学者学习 Oracle 快速入门和实践练习&#xff0c;比较方便快捷 官方安装文档&#xff1a;Preinstallation Considerations for Installing Oracle Database 对于企业级的数据库&am…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议&#xff1a;进程的每个输出操作都正好产生一个UDP数据报&#xff0c;并组装成一份待发送的IP数据报。这与面向流字符的协议不同&#xff0c;如TCP&#xff0c;应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新

秋高气爽、金桂飘香&#xff0c;十月末&#xff0c;我们又迎来了 ModelWhale 新一轮的版本更新。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 添加模型服务到知识库&#xff08;专业版✓ 团队版✓&#xff09; 新增 自动生成数据引用信息&am…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

C#两个表多条件关联写法

文章目录 C#两个表多条件关联写法两个表实体类准备实体类数据初始化第一种 sql的左关联第二种相当于sql的 INNER JOIN写法一&#xff1a;FROM a FROM b where 多条件关联写法二&#xff1a; FROM JOIN INTO写法三&#xff1a; FROM JOIN 省略into C#两个表多条件关联写法 两个…

Could not update Flowable database schema: unknown version from database:

文章目录 一、出现问题的情况二、解决方法1、 act_ge_property这个表里面的版本改成flowable-engine的版本号2、act_id_property表的schema.version版本也改成和flowable-engine版本一致&#xff08;如图所示&#xff09; 一、出现问题的情况 项目集成flowable流程框架的时候&…

【EI会议征稿通知】第二届材料科学与智能制造国际学术会议(MSIM 2024)

第二届材料科学与智能制造国际学术会议&#xff08;MSIM 2024&#xff09; 2024 2nd International Conference on Materials Science and Intelligent Manufacturing 2024年第二届材料科学与智能制造国际学术会议 &#xff08;MSIM2024&#xff09;将于2024年1月19日至21日在…

pycharm远程连接Linux服务器

文章目录 一&#xff1a;说明二&#xff1a;系统三&#xff1a;实现远程连接方式一&#xff1a; 直接连接服务器不使用服务器的虚拟环境步骤一&#xff1a;找到配置服务器的地方步骤二&#xff1a;进行连接配置步骤三&#xff1a;进行项目文件映射操作步骤四&#xff1a;让文件…

C#中Redis使用简单教程

C#开发者的Redis入门指南 Redis是一个高性能的内存数据库&#xff0c;常用于缓存、队列、实时数据分析等场景。作为一个C#开发者&#xff0c;了解如何使用Redis可以为你的应用程序带来巨大的好处。本文将向你介绍Redis基本概念&#xff0c;并提供一些C#的代码示例来帮助你入门…

QT图形视图框架绘制曲线图和Smith图

QT图形视图框架绘制曲线图和Smith图 QGraphicsView是Qt框架中的一个图形视图部件&#xff0c;用于显示和处理2D图形元素。它提供了强大的工具来创建交互式和自定义的图形应用程序。在绘制折线图和Smith图时&#xff0c;使用QGraphicsView有以下一些优点&#xff1a; 交互性&am…

大语言模型助力审计问题自动定性

国家审计作为以权力监督制约权力的一项制度安排&#xff0c;是党和国家监督体系的重要组成部分&#xff0c;是国家治理大系统中一个内生的具有预防、揭示和抵御功能的“免疫系统”&#xff0c;是国家治理的基石和重要保障&#xff0c;在推进“全面建成小康社会、全面深化改革、…

C++学习笔记之三(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray)&#xff0c;它定义了十个大类&#xff0c;其中包括…

nc65单据穿透

nc65单据穿透 jych项目 1.支出合同台账合同号字段可以穿透到对应的单据上 一个合同号穿透到一个物质设备采购合同上 1.支出合同台账单据模板合同号字段卡片下和列表下高级属性勾选是否超链接 2.支出合同台账中增加监听类 HeadItemLinkListener.java package nc.ui.jych.…

算法通过村第十六关-滑动窗口|黄金笔记|结合堆的应用

文章目录 前言堆与滑动窗口结合的问题总结 前言 提示&#xff1a;不论记忆多么痛苦&#xff0c;它属于过去&#xff0c;已经逝去了&#xff0c;我们为什么还执着于它并让它代表我们&#xff1f;我们就这样&#xff0c;所以&#xff0c;我们受苦。 --丹津葩默 这个还是一个比较重…