CTF 腳本編程 速度爆破


題目鏈接:http://ctf5.shiyanbar.com/ppc/sd.php

對於python的怎么post還有seesion我都是一無所知  -。。-

 

簡單的歸結一下知識點:

  1.利用Beautifulsoup獲取sha1部分

  2.0-100000之間的整數進行md5和sha1加密

  3.結果進行比對,然后post提交

 

1.首先看了一下session的概念以及python中如果運用的,這里用到了requests模塊

  seesion知識點博文連接:http://blog.csdn.net/u014649204/article/details/24119029    -。-大牛寫的不錯

  

1 url = 'http://ctf5.shiyanbar.com/ppc/sd.php'
2 status = requests.session()
3 html = status.get(url).text  #獲取網頁html

這個地方有個需要注意的地方,一開始對於seesion理解有誤解,我就調用了urllib2庫里面的urlopen(url)

這樣相當於直接和session沒有關系,結果還是每次提交就相當於刷新了一次頁面,要保持剛才的狀態就要利用獲取到的狀態status下進行get(url).text獲取當前的html 

然后再進行篩選數據

 

2.Beautifulsoup獲取sha1部分的內容

 1 soup = BeautifulSoup(html ,"html.parser") 

之前看過一套Beautifulsoup的教學,形容的很形象,就是一鍋湯。然后獲取湯中的元素

看了一下整個頁面的源碼

print soup.div.string

 Beautifulsoup比較不錯的文章:http://cuiqingcai.com/1319.html

 

3.python實現post請求

  查了一下。。一般把需要提交的放到一個字典,中文需要url編碼

1 post_Content = {'inputNumber': i, 'submit': '%E6%8F%90%E4%BA%A4'}  #如果還有多個參數都構造,中文url編碼后的用
2 result = status.post(url, data=post_Content)

 

 

腳本源碼:

  

#coding=utf-8
from bs4 import BeautifulSoup
import requests
import hashlib

def get_Flag(content,url,status):

    for i in range(0,100001):
        hashmd5 = hashlib.md5(str(i)).hexdigest()
        hashsha1 = hashlib.sha1(hashmd5).hexdigest()
        if hashsha1 == content:
            i = int(i)
            post_Content = {'inputNumber': i, 'submit': '%E6%8F%90%E4%BA%A4'}  #如果還有多個參數都構造,中文url編碼后的用
            result = status.post(url, data=post_Content)
            print result.text
            break
            
url = 'http://ctf5.shiyanbar.com/ppc/sd.php'
status = requests.session()
html = status.get(url).text
soup = BeautifulSoup(html ,"html.parser")
get_Flag(soup.div.string,url,status)

 

get。。

CTF{BlAsT_FasT_Pr0gRamE}

 

還是基礎太差,還是屌絲一枚,繼續加油


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM