CTF-BugKu-WEB-21-

2020.09.18

完了完了,今天是否是作不完了……🥶php

經驗教訓

  1. re.search(pattern, string)能夠找到字符串中匹配正則的某一段字符;
  2. eval()方法能夠用來得出1+1+2這種字符串的結果;
  3. python中,post的內容是json,例如post = {'value': result}
  4. python中,添加post內容要用post()方法,而且添加data參數,例如s.post(url, data = post)
  5. r'(\d+[+\-*])+(\d+)'能夠用來匹配123+456*789這種算式;

第二十一題 秋名山老司機

https://ctf.bugku.com/challenges#秋名山老司機
python

  1. 那麼題眼就很清楚了,兩秒內把算出來的結果post出去,這看起來只有腳本才能作到。
  2. 這裏的腳本有幾處問題我不太會,參考了大佬的,有幾個問題就是
    • 怎麼把須要算的數從響應中取出來?
    • 取出來以後怎麼進行計算?取出來畢竟是字符串,應該沒辦法直接計算纔是。
    • 下邊大佬的腳本給瞭解決方案,就總結在經驗教訓中。
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 = post).text) # 輸出post後結果,學到了請求時添加post內容是用`data=?`
  1. 通過以上腳本咱們就有機率獲得flag啦,Bugku{YOU_DID_IT_BY_SECOND},真的是有機率獲得,多是py和php算的數不同……

第二十二題 速度要快

https://ctf.bugku.com/challenges#速度要快
web

  1. 打開連接,查看源碼,意思就是要很快的post叫margin的數據,很快的post簡單,可是margin是什麼?
  2. 我刷新了一遍,在響應頭中發現可疑信息,6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogTlRVek5qZzM=
  3. 轉碼得跑的還不錯,給你flag吧: NTUzNjg3,可是填入並不對
  4. 這讓我懷疑這個flag,趕忙還像是base64,因而又一次解碼得553687,這個難不成是margin的值??腳本測試一下
  5. 腳本以下,可是沒有成功,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={'margin':553687}).text
    print(res)


6. 看來是思路不對,再去看看,發現端倪,md,我明白了,我發現哪一個flag是一直在變的,原來如此,也就是說margin是在變的,也對,怎麼可能像以前想的這麼簡單吶……修改腳本express

#!/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={'margin':res}).text # 快速post margin
print(res)
  1. 運行腳本獲得結果,奧力給🤓KEY{111dd62fcd377076be18a}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息