初稿于2021.2.15,重温于2021.4.13.
读取本地文件;file:///app/flag.txt
、
python特有的伪协议读取:local_file:///app/flag.txt
一、不足:
真·什么也不会。。
- 代码审计吧,,不会代码审计,
- 对python很不了解,,,刚看代码的时候,真的没有一句能够看懂的。。不行就以后看看少用burp,多用pyt脚本练练python看看,
- 代码审计拉得很,,,
二、注意事项
- 盐的长度,通常不会是题目所给的盐的长度,这点要注意。
- 好像明白md5 拓展攻击了,,,有点积累,前提: 知道 salt的长度,知道一组:明文+相应的md5的值,,那么我们就能够创造出 以 该salt 为盐的任意的铭文+md5的值了,,听起来不错,但是 明文是有限制的。。。
- 这里的明文的开头仍旧是 我们已知的明文的开头,然后后面填充着很多800000还有我们随意添加的字符串,,,这个才叫做 任意明文字符,,,着实鸡肋的很,,,。。限制的原因在这里。。因为是只能够后补,所以前面的不能动,
- 所以能出现这个md5拓展攻击的地方,,如果是看字符串的话,不能够是 === ,只能够是 == 然后后面的%80000就没了,,这个是要求 明文是某个已知的字符串开头的话, 第二个情况就是 这个题: 字符串 in 铭明文中,只需要里面有这个字符串就好了,不需要 完全相等,也用的到。
三、看WP:
1. 哈希拓展长度攻击
- 啥啊这是,,是个python的flask。但是怎么看啊这,,,
#! /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: # 注意这里是 in 哦 in 还是比较安全的
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:# 如果read这个字符串再 action 这个参数里面的话
f = open("./%s/result.txt" % self.sandbox, 'r')#这个sandbox是ip的一个md5加密。
result['code']