題目連接:http://ctf5.shiyanbar.com/ppc/sd.phpphp
對於python的怎麼post還有seesion我都是一無所知 -。。-html
簡單的歸結一下知識點:python
1.利用Beautifulsoup獲取sha1部分session
2.0-100000之間的整數進行md5和sha1加密post
3.結果進行比對,而後post提交ui
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)url
這樣至關於直接和session沒有關係,結果仍是每次提交就至關於刷新了一次頁面,要保持剛纔的狀態就要利用獲取到的狀態status下進行get(url).text獲取當前的html spa
而後再進行篩選數據
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}
仍是基礎太差,仍是屌絲一枚,繼續加油