实验吧解题笔记——编程(五)
来源:互联网 发布:电脑开单软件 编辑:程序博客网 时间:2024/05/08 21:31
0.说明
每五个题目写作一篇writeup,第一行对应解题笔记(一)……
1.字典
题目描述:
包含ctf的单词的总字符有多少?
字典文件格式如下
分析
这个题目使用Python去按行读取文件,同时使用Python内置的index()方法查找字符串(通常来说Python内置的算法都经过了算法优化,运行效率高于自己编写的),如果再字符串中查找到”ctf”字符,记录其字符个数。这里有一个坑就是按行读取文件时会把换行符\n也读取进去,需要用replace方法替换再计数,代码如下:
re_str = 'ctf'num = 0with open('dictionary.txt', 'r') as f: while True: line = f.readline() #print(type(line)) if not line: break try: if line.index(re_str) >= 0: num += len(line.replace('\n', '')) print(len(line.replace('\n', ''))) print(line, end='') except: passprint('CTF{' + str(num) + '}')
3.速度爆破
题目描述
分析
可以看到,这个题目和“百米”属于同一类型的题目,需要编写程序自动完成抓取、计算、提交的步骤。抓取和提交的步骤在“百米”的题目中已经讲过了,这里略过,主要讲一下如何使用python计算sha1和md5值。
python内置的有一个叫hashlilb的库,里面实现了很多与密码学有关的算法,使用时十分便捷。
以md5的计算过程为例(计算sha1的方法相同),首先初始化一个hashlib.md5的对象,将以utf-8编码的字符串作为参数传入,可以得到计算结果,然后我们还需要将其转换成十六进制的形式打印出来才能便于我们阅读,代码如下:
data = ‘test’.encode(‘utf-8’)hash_md5 = hashlib.md5(data)print(hash_md5.hexdigest())
最终解题的代码如下:
import hashlibimport requestsfrom bs4 import BeautifulSoupget_url = 'http://ctf5.shiyanbar.com/ppc/sd.php'session = requests.session()html = session.get(get_url).contentsoup = BeautifulSoup(html, 'lxml')encode_str = soup.div.get_text()for i in range(0, 100000 + 1): hash_md5 = hashlib.md5(str(i).encode('utf-8')).hexdigest() hash_sha1 = hashlib.sha1(hash_md5.encode('utf-8')).hexdigest() if encode_str == hash_sha1: #提交 payload = {'inputNumber':i} post =session.post(get_url, payload) print(post.text)
FLAG:
阅读全文
0 0
- 实验吧解题笔记——编程(五)
- 实验吧解题笔记——编程(一)
- 实验吧解题笔记——编程(二)
- 多线程编程系列(五):“生产者消费者”实验——PV原语实现
- 多线程编程系列(五):“生产者消费者”实验——PV原语实现
- java学习笔记(五)——网络编程
- Python学习笔记(五)——函数式编程
- Posix多线程编程学习笔记(五)—条…
- C++实验五—字符串
- 多线程编程笔记(五)
- 《Python编程》笔记(五)
- 实验五 基于UDP编程实验
- 实验五 基于UDP编程实验
- 实验五 基于UDP编程实验
- 《并行与分布式计算》实验五——Java socket 编程
- python精简笔记(五)——函数式编程
- cortex_m3_stm32嵌入式学习笔记(五):独立看门狗实验(IWDG)
- 解题笔记——前言
- hdfs工作原理图解
- wampserver下升级php7
- 微擎模块机制分析
- phantomJS利用cookie实现自动登录
- 几句话浅谈算法
- 实验吧解题笔记——编程(五)
- 杂题 [Tjoi 2013]松鼠聚会
- SharedPreferences极致封装——可能是全网最简单的封装了
- Java 多态、内部类、异常、包
- Linux学习修改ip
- JVM的内存区域划分
- 如何使用代码调用API接口发送短信?(以SendCloud为例)
- RecyclerView添加头部和尾部
- Android Binder机制