利用簡易爬蟲完成一道基礎CTF題
利用簡易爬蟲完成一道基礎CTF題
來自專欄 HBU Computer Science4 人贊了文章
利用簡易爬蟲完成一道基礎CTF題
聲明:本文主要寫給新手,側重於表現使用爬蟲爬取頁面並提交數據的大致過程,所以沒有對一些東西解釋的很詳細,比如表單,post,get方法,感興趣的可以私信或評論給我。如果文中有哪些問題,也歡迎大家指正。
Written by Menglin Ma
寫在前面
如果有想學習基礎爬蟲的同學,建議在中國大學MOOC上搜索嵩天老師的爬蟲課程,講的真的很細緻,也很基礎。
想入門CTF的同學,給你們推薦個基礎的網站,上面的好多題對新手比較友好:http://www.shiyanbar.com 。初學者可以先從基礎密碼學開始,比其他的部分相對容易。
題目描述
100米你能跑多快? 預備,跑! 解題鏈接: http://ctf5.shiyanbar.com/jia
via:http://www.shiyanbar.com
將網址打開後是這樣的,一個很複雜的表達式,需要在三秒內提交,依靠人的力量幾乎是不可能的(神仙除外)。最靠譜的方法就是利用程序來計算這個表達式,然後自動提交結果。本文採用的是利用簡易Python爬蟲來實現表達式的自動計算與提交,來獲取含有flag頁面的方法。
頁面分析
使用爬蟲爬取頁面的第一步就是分析頁面。在這道題目中,需要獲取需要提交表單的參數,以及所需計算表達式的位置。可以在輸入窗口右鍵選擇審查元素,查看所需信息。
在這裡我們獲得了所需要的信息:需要提交的值為pass_key的值,提交的方法為post方法,表達式夾在兩個div標籤之間,且div的name為my_expr是獨一無二的,提交的動作為?action=check_pass。(關於HTML頁面提交表單的一些詳情可以嘗試百度一下或私聊我)
爬蟲編寫
編寫該爬蟲需要一些前提條件,包括導入re庫使用正則表達式,導入requests庫爬取信息,還有就是需要獲得目標網頁的URL和需要發送的數據,這些條件要在程序中體現出來。
編寫該爬蟲大概需要以下幾步:
1.導入必要的庫2.利用get方法抓取頁面3.利用正則表達式篩選表達式對應的字元串4.處理字元串並利用eval方法自動計算5.利用計算出的數值構造需要post的字典6.利用post方法(注意帶上cookies)向伺服器發送數據,接收響應並列印
代碼實現
import reimport requests#發送post和get請求的urlget_url = http://ctf5.shiyanbar.com/jia/post_url = http://ctf5.shiyanbar.com/jia/?action=check_pass#利用get方法獲取網頁數據r = requests.get(get_url)#構造與匹配正則表達式str_text = r"<div name=my_expr>.*</div>"match = re.search(str_text,r.text)#處理匹配後的結果result = match.group().replace("<div name=my_expr>","")result = result.replace("</div>","")if x in result: result = str(eval(result.replace(x,*)))#構造字典data = {pass_key:result}#利用post請求發送data和cookie數據,獲得回復response = requests.post(post_url,data=data,cookies=r.cookies)response.encoding = response.apparent_encodingprint(response.text[:1000])
運行並拿到key
Vscode下運行該程序,得到了KEY的值,提交即可。
推薦閱讀: