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

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

聲明:本文主要寫給新手,側重於表現使用爬蟲爬取頁面並提交數據的大體過程,因此沒有對一些東西解釋的很詳細,好比表單,post,get方法,感興趣的能夠私信或評論給我。若是文中有哪些問題,也歡迎你們指正。python

Written by Menglin Ma正則表達式

寫在前面

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

  想入門CTF的同窗,給大家推薦個基礎的網站,上面的好多題對新手比較友好:www.shiyanbar.com
。初學者能夠先從基礎密碼學開始,比其餘的部分相對容易。cookie

題目描述

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

via:www.shiyanbar.compost

  將網址打開後是這樣的,一個很複雜的表達式,須要在三秒內提交,依靠人的力量幾乎是不可能的(神仙除外)。最靠譜的方法就是利用程序來計算這個表達式,而後自動提交結果。本文采用的是利用簡易Python爬蟲來實現表達式的自動計算與提交,來獲取含有flag頁面的方法。
image學習

頁面分析

  使用爬蟲爬取頁面的第一步就是分析頁面。在這道題目中,須要獲取須要提交表單的參數,以及所需計算表達式的位置。能夠在輸入窗口右鍵選擇審查元素,查看所需信息。
image網站

  在這裏咱們得到了所須要的信息:須要提交的值爲pass_key的值,提交的方法爲post方法,表達式夾在兩個div標籤之間,且div的name爲my_expr是獨一無二的,提交的動做爲?action=check_pass。(關於HTML頁面提交表單的一些詳情能夠嘗試百度一下或私聊我)url

爬蟲編寫

  編寫該爬蟲須要一些前提條件,包括導入re庫使用正則表達式,導入requests庫爬取信息,還有就是須要得到目標網頁的URL和須要發送的數據,這些條件要在程序中體現出來。code

  編寫該爬蟲大概須要如下幾步:

1.導入必要的庫
2.利用get方法抓取頁面
3.利用正則表達式篩選表達式對應的字符串
4.處理字符串並利用eval方法自動計算
5.利用計算出的數值構造須要post的字典
6.利用post方法(注意帶上cookies)向服務器發送數據,接收響應並打印

代碼實現

import re
import requests
#發送post和get請求的url
get_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_encoding
print(response.text[:1000])

運行並拿到key

image

Vscode下運行該程序,獲得了KEY的值

相關文章
相關標籤/搜索