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 ,"
之前看過一套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 腳本編程 速度爆破