生成密文对比求明文
# -*- coding: utf-8 -*-
import requests
import re
import hashlib
url="http://ctf5.shiyanbar.com/ppc/sd.php"
session=requests.session() #保持连接
response=session.get(url)
response.encoding = 'utf-8' #防止输出乱码
html=str(response.content) #获得源代码
keyword=re.compile(r'<div.*?sha1.*?>(.*?)</div>',re.S) #截取生成的密文
#print (keyword)
item=re.findall(keyword, html) #检验密文是否真的存于源代码,返回一个list
#print (item)
str1 = "".join(item) #将list转换为str
print ('密文=',str1) #输出密文str1
for i in range(100000):
t = hashlib.md5(str(i).encode('utf-8')).hexdigest()
t = hashlib.sha1(t.encode('utf-8')).hexdigest() #合成一个密文
#print (t)
if t == str1: #如果两个密文相同,获取明文i
# print(t)
# print(i)
break
print ('明文=',i) #打印明文i的值
hh=session.post("http://ctf5.shiyanbar.com/ppc/sd.php",data={'inputNumber':i}) #提交i
#建立一个关键字列表
lisa=['key','flag','KEY','Flag','Key','FLAG']
for x in lisa:
#在源码中搜索lisa中的每个关键字
if x in str(hh.text):
#用res接收找到的res关键字的起始位置和末位置
res=re.search(x,str(hh.text)).span()
print("IS THIS ONE ?")
#打印出从res[0]-res[-1]+8的这一段文本;因为答案就是关键字之后的一定长度的文本
#当然+8是测试出来的,因为一开始不知道长度可以加一个大点的数值,如+20
print(str(hh.text)[res[0]:int(res[-1])+28])
结果
密文= 4d3409c523f685db370ecf597b96889dc20eb768
明文= 29037
IS THIS ONE ?
flag is CTF{BlAsT_FasT_Pr0gRamE}
[Finished in 0.5s]
网友评论