1. 程式人生 > >CTF 腳本編程 速度爆破

CTF 腳本編程 速度爆破

之間 range .text logs 構造 csdn 知識 blast 比較

題目鏈接: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}

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

CTF 腳本編程 速度爆破