一、原網頁:
二、步驟:
1.嘗試用計算器計算:
計算器溢出,無法正常計算
2.使用python計算:
得出計算結果為:1864710043732437134701060769
3.多次刷新頁面:
發現變量為value,要用post方式給變量傳參
那么value=1864710043732437134701060769
4.向URL傳參
沒有返回flag,且每次刷新頁面,數學表達式都在變化
用python計算后,發現計算結果都不相同:
得出結論:我們必須按照提示,在2秒之內計算出結果并傳參給URL才能返回flag,否則頁面會重新生成新的數學表達式,而我們提交的值無效。
5.編寫腳本:
(還有一種方法是修改cookie的timeout讓頁面暫停,后續再補充這種方法)
三、腳本分析:
1.腳本:?
import requests
import reurl = '''http://117.72.52.127:15092'''
s = requests.session()
retuen = s.get(url)equation = re.search(r'(\d+[+\-*])+(\d+)', retuen.text).group()
result = eval(equation)key = {'value': result}
flag = s.post(url, data=key)print(flag.text)
2.分析:
import requests
# 導入requsets庫
# requests是一個用于發送HTTP請求的庫,可以輕松地發送GET、POST等請求import re
# 導入re庫
# re是正則表達式模塊,用于在字符串中查找模式用于正則表達式匹配url = '''http://117.72.52.127:15092'''
# 定義目標服務器的URL,表示你要訪問的地址s = requests.session()
# 創建一個會話對象s,會話對象可以保持某些參數(如cookies)在多個請求之間共享
# 這對于需要模擬登錄或保持會話的場景非常有用。retuen = s.get(url)
# 使用會話對象發送GET請求到目標URL,并獲取響應equation = re.search(r'(\d+[+\-*])+(\d+)', retuen.text).group()
# 使用正則表達式從響應的HTML內容中搜索一個數學表達式
# 正則表達式 r'(\d+[+\-*])+(\d+)' 的含義:
# \d+:匹配一個或多個數字
# [+\-*]:匹配一個加號、減號或星號(運算符)
# 整個模式匹配一個數學表達式,例如 1+2 或 3*4
# .group():提取匹配到的完整字符串result = eval(equation)
# 使用 eval() 函數計算匹配到的數學表達式的結果key = {'value': result}
# 將計算結果封裝到字典中,作為POST請求的數據flag = s.post(url, data=key)
# 使用會話對象發送POST請求到目標URL,并附帶計算結果作為數據print(flag.text)
# 打印服務器返回的響應內容