ctf-实验吧-编程-快速爆破

2018-03-20  本文已影响0人  Cookie_hunter

生成密文对比求明文

# -*- 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]
上一篇下一篇

猜你喜欢

热点阅读