利用簡易爬蟲完成一道基礎CTF題

來自專欄 HBU Computer Science4 人贊了文章

利用簡易爬蟲完成一道基礎CTF題

聲明:本文主要寫給新手,側重於表現使用爬蟲爬取頁面並提交數據的大致過程,所以沒有對一些東西解釋的很詳細,比如表單,post,get方法,感興趣的可以私信或評論給我。如果文中有哪些問題,也歡迎大家指正。

Written by Menglin Ma

寫在前面

如果有想學習基礎爬蟲的同學,建議在中國大學MOOC上搜索嵩天老師的爬蟲課程,講的真的很細緻,也很基礎。

想入門CTF的同學,給你們推薦個基礎的網站,上面的好多題對新手比較友好:shiyanbar.com 。初學者可以先從基礎密碼學開始,比其他的部分相對容易。

題目描述

100米你能跑多快? 預備,跑! 解題鏈接: ctf5.shiyanbar.com/jia

via: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的值,提交即可。

推薦閱讀:

查看原文 >>
相关文章