实验吧解题笔记——编程(五)

0.说明

每五个题目写作一篇writeup,第一行对应解题笔记(一)……
这里写图片描述

1.字典

题目描述:

包含ctf的单词的总字符有多少?
字典文件格式如下
这里写图片描述

分析

这个题目使用Python去按行读取文件,同时使用Python内置的index()方法查找字符串(通常来说Python内置的算法都经过了算法优化,运行效率高于自己编写的),如果再字符串中查找到”ctf”字符,记录其字符个数。这里有一个坑就是按行读取文件时会把换行符\n也读取进去,需要用replace方法替换再计数,代码如下:

re_str = 'ctf'
num = 0
with 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:
            pass
print('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 hashlib
import requests
from bs4 import BeautifulSoup

get_url = 'http://ctf5.shiyanbar.com/ppc/sd.php'

session = requests.session()
html = session.get(get_url).content
soup = 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:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值