buuctf_练[CISCN2019 华东南赛区]Web4

2023-10-27 18:28

本文主要是介绍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, requestapp = 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.pyMAC地址文件路径  /sys/class/net/eth0/addresssession解密脚本传参   encode -s 82.684855651 -t "{'username':'fuck'}"私钥生成脚本
import randommac="6ed1b6c952d6"
random.seed(int(mac,16))
key = str(random.random() * 233)
print key

这篇关于buuctf_练[CISCN2019 华东南赛区]Web4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287532

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrl+z 如果不小心撤销多了,可以用 Ctrl+Shift+Z 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c++的标准程序库中的string,头文件是#include<string> 这是base64的加密函数 std::string

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

2014年ACM/ICPC亚洲区现场赛广州赛区总结

本来不想提这件事的,后来学姐找我谈心时提到这件事,我突然意识到在这件事情上我错了一次,明明答应的去参加这场比赛,最后临时决定不去......其实中间有很多很多原因 1:我和tyh,sxk临时不去主要是广州太远,我们身上money不够,呵呵。。。别笑我们,你以为我们是高富帅啊,去一趟广州消费要2个月的生活费,奖学金又没发,你让我找我妈要她辛辛苦苦挣来的工资吗?!从哈尔滨到广州单来回的火车票每个人就

BUUCTF PWN wp--bjdctf_2020_babystack

第一步   checksec一下,该题是64位的,该题目大概率是一道栈溢出(因为题目里面提到了stack) 分析一下这个二进制保护机制: Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的,使用的是小端序(little-endian)格式。RELRO: Partial RELRO RELRO(Relocation Read-Only)是一种安全特性,旨

BUUCTF—[网鼎杯 2020 朱雀组]phpweb

题解 打开题目是这样子的。 啥也不管抓个包看看,从它返回的信息判断出func后面的是要调用的函数,p后面的是要执行的内容。 那我们直接执行个系统命令看看,可以看到返回了hack,估计是做了过滤。 func=system&p=ls 直接读取源码看看咯,可以看到过滤了好多函数,反正我认识的可以进行命令执行的函数都给禁了。 func=file_get_contents&p=ind

[CISCN2019 华东南赛区]Web111

考点: xff ssti 打开看到页面存在IP和XFF,右上角是咱们自己的IP 看到现在,可以想到尝试一下xff,当我们bp抓包后,添加xff,我们可以发现右上角的Current IP发生了变化,并且当我们输入什么他就会变成什么,这时候就应该想到ssti注入了 进行注入发现是Smarty 模板注入(好像页面下面也有提示"Bulid with Smarty",……不过没关系),可以

BUUCTF派大星的烦恼

解压得到一张图片没啥有用信息 根据下面题目提示,用010editor打开图片发现一段16进制字符串 派大星最近很苦恼,因为它的屁股上出现了一道疤痕!我们拍下了它屁股一张16位位图,0x22,0x44代表伤疤两种细胞,0xf0则是派大星的赘肉。还原伤疤,知道是谁打的派大星!(答案为32位的一串字符串) 注意:得到的 flag 请包上 flag{} 提交 在010editor直接

【CTF Web】BUUCTF Upload-Labs-Linux Pass-04 Writeup(文件上传+PHP+.htaccess绕过)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

BUUCTF二维码1

九张撕碎二维码碎片。不会让人拼起来吧!看了大神们得博客竟然是真的,这是ctf的题吗!是考验人的耐性吧! 我勉为其难讲一下PS怎么拼图,首先要把九张碎片抠图,背景变透明,ps可以但是太麻烦,我在GIthub找到一个Python+Qt写的自动抠图的软件,使用removebg提供的api接口,可生成高清图预览并保存,输入图片链接也可在线抠图。超赞,起码比某些国产类似软件有良心,长期用收费还