2020.09.18
完了完了,今天是不是做不完了……??
經驗教訓
- re.search(pattern, string)可以找到字串中匹配正則的某一段字符;
- eval()方法可以用來得出
1+1+2這種字串的結果; - python中,post的內容是json,例如
post = {'value': result} - python中,添加post內容要用post()方法,并且添加data引數,例如
s.post(url, data = https://www.cnblogs.com/qiaowukong/p/post); r'(\d+[+\-*])+(\d+)'可以用來匹配123+456*789這種算式;
第二十一題 秋名山老司機
https://ctf.bugku.com/challenges#秋名山老司機

- 那么題眼就很清楚了,兩秒內把算出來的結果post出去,這看起來只有腳本才能做到,

- 這里的腳本有幾處問題我不太會,參考了大佬的,有幾個問題就是
- 怎么把需要算的數從回應中取出來?
- 取出來之后怎么進行計算?取出來畢竟是字串,應該沒辦法直接計算才是,
- 下邊大佬的腳本給了解決方案,就總結在經驗教訓中,
import requests
import re
url = 'http://120.24.86.145:8002/qiumingshan/'
s = requests.Session() # 很關鍵,因為session保證了長鏈接,才能保證我們在2s內post出請求,要不然post只會開啟一個新鏈接
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group() # re.search()可以找到字串中匹配的某一段字符,這解決方案完美
result = eval(expression) # eval能直接把字串轉換為可執行的陳述句,完美
post = {'value': result} # 構造post內容,學到了post的內容是json
print(s.post(url, data = https://www.cnblogs.com/qiaowukong/p/post).text) # 輸出post后結果,學到了請求時添加post內容是用`data=?`
- 經過以上腳本我們就有概率得到flag啦,
Bugku{YOU_DID_IT_BY_SECOND},真的是有概率得到,可能是py和php算的數不一樣……
第二十二題 速度要快
https://ctf.bugku.com/challenges#速度要快

- 打開鏈接,查看原始碼,意思就是要很快的post叫margin的資料,很快的post簡單,但是margin是什么?

- 我重繪了一遍,在回應頭中發現可疑資訊,
6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogTlRVek5qZzM=

- 轉碼得
跑的還不錯,給你flag吧: NTUzNjg3,但是填入并不對

- 這讓我懷疑這個flag,趕緊還像是base64,于是又一次解碼得
553687,這個難不成是margin的值??腳本測驗一下

- 腳本如下,但是沒有成功,wtf??竟然還嫌不夠快……
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#fileName : decry.py
#createTime: 2020/09/18 23:34:52
#author : 喬悟空
#purpose : 此腳本用于快速回應目標url并post指定值
import requests
url = "http://123.206.87.240:8002/web6/"
session = requests.session()
res = session.get(url).text
print(res)
for i in range(20):
res = session.post(url,data=https://www.cnblogs.com/qiaowukong/p/{'margin':553687}).text
print(res)

6. 看來是思路不對,再去看看,發現端倪,md,我明白了,我發現哪個flag是一直在變的,原來如此,也就是說margin是在變的,也對,怎么可能像之前想的這么簡單吶……修改腳本
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#fileName : decry.py
#createTime: 2020/09/18 23:34:52
#author : 喬悟空
#purpose : 此腳本用于快速回應目標url并post指定值
import requests
import base64
url = "http://123.206.87.240:8002/web6/"
session = requests.session() # 保持長鏈接
res = session.get(url).headers['flag'] # 取回應頭中flag的動態變化值
print(res)
res = base64.b64decode(res).decode().split(': ')[1] # 第一次base64
print(res)
res = base64.b64decode(res).decode() # 第二次base64
print(res)
res = session.post(url,data=https://www.cnblogs.com/qiaowukong/p/{'margin':res}).text # 快速post margin
print(res)
- 運行腳本得到結果,奧力給??
KEY{111dd62fcd377076be18a}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78476.html
標籤:其他
