[强网先锋]寻宝

啊对就是这道题,大佬们都贼快,菜如我还得慢慢整

key1

大佬们都一笔带过,哎,虽然简单,但是也别这么虐我们啊

我来简单写一下吧

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__); function filter($string){
$filter_word = array('php','flag','index','KeY1lhv','source','key','eval','echo','\$','\(','\.','num','html','\/','\,','\'','0000000');
$filter_phrase= '/'.implode('|',$filter_word).'/';
return preg_replace($filter_phrase,'',$string);
} if($ppp){
unset($ppp);
}
$ppp['number1'] = "1";
$ppp['number2'] = "1";
$ppp['nunber3'] = "1";
$ppp['number4'] = '1';
$ppp['number5'] = '1'; extract($_POST); $num1 = filter($ppp['number1']);
$num2 = filter($ppp['number2']);
$num3 = filter($ppp['number3']);
$num4 = filter($ppp['number4']);
$num5 = filter($ppp['number5']); if(isset($num1) && is_numeric($num1)){
die("非数字");
} else{ if($num1 > 1024){
echo "第一层";
if(isset($num2) && strlen($num2) <= 4 && intval($num2 + 1) > 500000){
echo "第二层";
if(isset($num3) && '4bf21cd' === substr(md5($num3),0,7)){
echo "第三层";
if(!($num4 < 0)&&($num4 == 0)&&($num4 <= 0)&&(strlen($num4) > 6)&&(strlen($num4) < 8)&&isset($num4) ){
echo "第四层";
if(!isset($num5)||(strlen($num5)==0)) die("no");
$b=json_decode(@$num5);
if($y = $b === NULL){
echo 'NULL';
if($y === true){
echo "第五层";
include 'KeY1lhv.php';
echo $KEY1;
}
}else{
die("no4");
}
}else{
die("no3");
}
}else{
die("no2");
}
}else{
die("no1");
}
}else{
die("no111");
}
}

先说下这个东西 extract($_POST);

就是按post的值分配成key=》value的格式传参,然后这里就按照数组格式传就行

num1:php弱比较,num1=2048e,就绕过了

num2:科学计数法可绕过,num2=9e9,注意strlen()是计算‘\x00’的,所以只能传三个字符

num3:md5爆破,脚本如下

import hashlib
for i in range(1,1000000000):
a=hashlib.md5(str(i).encode('utf-8')).hexdigest()
if a[:7]=='4bf21cd':
print(i)
print(a)
break
#61823470
#4bf21cdcfb6ec2d30bad53d41ebe42f2

num4:6个字符就是7的长度,弱比较,0e1234

num5: (对,就是一个空格)

key2

这里之前没拿python处理过docx,所以也是现学了一下,基本上有三种方法

第一种:下一个带搜索文件内容的高级搜索器

第二种:python教底层的一种,利用xml处理

import xml.etree.ElementTree as ET
import zipfile,glob,tqdm
def xml_handle(path):
WORD_NAMESPACE ='{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
TEXT = WORD_NAMESPACE + 't'
word = zipfile.ZipFile(path)
#print(word)
xml_name = word.read('word/document.xml')
#print(xml_name)
#tree=ET.parse(xml_name) # 从文件
root = ET.fromstring(xml_name) # Element
#print(root)
for child in root.iter(TEXT):
if('KEY2' in child.text):
print(child.text)
print(path)
return True
files=glob.glob('E:\\桌面\\比赛题目\\2021强网杯\\key2\\*\\*\\*.docx')
for doc in tqdm.tqdm(files):
a=xml_handle(doc)
if(a):
break
#秒出

这里问题蛮多的,python3.9以后和以前是不一样的,cElementTree在3.9以后被弃用了,但ElementTree会自己去调,所以没啥区别了,还要就是getiterator()函数变成了iter()

优点:速度极快,可处理其它xml类型

缺点:编写不方便,对docx支持一般

第三种:利用docx模块处理

# pip install python-docx
import docx,glob,tqdm def docx_handle(path):
document = docx.Document(path)
#print(document)
for line in document.paragraphs:
#print(line.text)
if('KEY2' in line.text):
print(line.text)
print(path)
return True files=glob.glob('E:\\桌面\\比赛题目\\2021强网杯\\key2\\*\\*\\*.docx')
for doc in tqdm.tqdm(files):
a=docx_handle(doc)
if(a):
break
# 14s

这个库安装时候有点坑,如果那你是python3,需要输入pip install python-docx。原本的项目已经被官方吸纳进xml库中了(但是作者你倒是把新项目地址挂出来啊,害得我找半天fuck!!!)

优点:编写简单

缺点:速度慢如老狗(3600个文件,到1200个出key,三分之一用了14s,真是垃圾)

ps:学习了大佬的wp后发现tqdm这个库真香啊,可以看循环进度了美滋滋。配合glob直接形成匹配的字典,tql,以后获取文件名啥的都去shi吧哈哈哈!!!

从2021强网杯的一道题学习docx文件操作的更多相关文章

  1. HTML5学习之文件操作(九)

    之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...

  2. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  3. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  4. Tcl学习之--文件操作

    Tcl中文件名称操作遵循Unix/Linux的命名规范. x/y/z表示x文件夹下的y 子文件夹及y以下的子文件夹z. ~admin/email则表示admin用户的email目录. l  file ...

  5. Linux学习之文件操作

    Linux,一起学习进步-    mkdir The mkdir command is used to create directories.It works like this: mkdir命令是用 ...

  6. erlang学习笔记(文件操作)

    参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

  7. Python学习笔记——文件操作

    python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...

  8. Smart210学习记录-------文件操作

    一.linux文件操作(只能在linux系统上用) 创建:int creat(const char* filename, mode_t mode) filename 表示要创建的文件名,mode表示对 ...

  9. NodeJS学习之文件操作

    NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作 ...

随机推荐

  1. C# DeepClone 深拷贝

    常规利用反射进行克隆 public static T CloneModel<T>(T oModel) { var oRes = default(T); var oType = typeof ...

  2. TVM优化GPU机器翻译

    TVM优化GPU机器翻译 背景 神经机器翻译(NMT)是一种自动化的端到端方法,具有克服传统基于短语的翻译系统中的弱点的潜力.最近,阿里巴巴集团正在为全球电子商务部署NMT服务. 将Transform ...

  3. Yolov3 的 OneFlow 实现

    Yolov3 的 OneFlow 实现 1.简介 YOLO 系列的算法(经典的v1~v3),是单阶段目标检测网络的开山鼻祖,YOLO-You only look once,表明其单阶段的特征,正是由于 ...

  4. MindSpore:自动微分

    MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...

  5. 对端边缘云网络计算模式:透明计算、移动边缘计算、雾计算和Cloudlet

    对端边缘云网络计算模式:透明计算.移动边缘计算.雾计算和Cloudlet 概要 将数据发送到云端进行分析是过去几十年的一个突出趋势,推动了云计算成为主流计算范式.然而,物联网时代设备数量和数据流量的急 ...

  6. MindSpore技术理解(上)

    MindSpore技术理解(上) 引言 深度学习研究和应用在近几十年得到了爆炸式的发展,掀起了人工智能的第三次浪潮,并且在图像识别.语音识别与合成.无人驾驶.机器视觉等方面取得了巨大的成功.这也对算法 ...

  7. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  8. linux远程和软件包的管理

    远程管理 ssh   用户名@对方IP地址 -X   在本地可以运行对方的图形程序 端口 22 [root@room9pc01 ~]# ssh root@172.25.0.11 [root@serve ...

  9. Vue3中toRefs的使用

    1 使用reactive 实现数据的响应式 <template> <div> <h2>toRef的使用</h2> <p> 姓名:{{stat ...

  10. spring boot 并发请求,其他系统接口,丢失request的header信息【多线程、线程池、@Async 】

    场景:一次迭代在灰度环境发版时,测试反馈说我开发的那个功能,查询接口有部分字段数据是空的,后续排查日志,发现日志如下: feign.RetryableException: cannot retry d ...