每五個題目寫作一篇writeup,第一行對應解題筆記(一)……
題目是這個樣子的,很顯然需要我們程式設計,獲取網頁中需要我們計算的表示式的值,然後提交上去獲得flag。
首先,我們使用python中的requests這個第三方庫去獲取網頁內容,使用以下語句獲得這個網頁的html文件。
get_url = ''
post_url = 'index.php?action=check_pass'
session = requests.session()#建立乙個requests的會話物件
html = session.get(get_url).content#使用上面建立的物件去開啟網頁,並獲取html文件內容
接下來,我們使用python中的beautifulsoup庫去解析獲得我們想要的內容,只需短短幾行語句加上一點耐心,再複雜的內容也可以分解出來。使用以下語句得到
標籤後的表示式。
soup = beautifulsoup(html, 'html.parser')
expr = soup.p.div.get_text())#獲取到需要計算的表示式
這段語句這麼簡單是因為我取了個巧,因為這個html文件中只有乙個p標籤,所以直接獲取p標籤下div標籤的內容,再取得div標籤中的值,就得到了我們需要計算的表示式。執行結果如下:
需要注意的是,在這裡我們獲得的表示式是str格式的,我們並不能直接去計算,這裡需要用到python中乙個內建的函式eval(),它可以計算字串中python表示式的值。還有一點需要注意的是這裡還設了個小坑,表示式中的乘號是以英文本元「x」表示的,我們需要把它替換成「*」,所以計算語句如下。
num = eval(expr.replace('x', '*'))
接下來,我們只需把計算結果以post方式提交上去就可以了,需要使用burpsuite抓包看到瀏覽器是怎麼把我們的計算結果提交到伺服器的,再自己編寫payload,並使用requests的post()方式提交結果。最後的語句如下:
payload =
post = session.post(post_url, payload)
print(post.text)
使用print語句可以把網頁的返回結果直接列印出來,最後在輸出結果中可以找到key。
完整的程式如下:
from bs4 import beautifulsoup
import requests
get_url = ''
post_url = 'index.php?action=check_pass'
session = requests.session()
html = session.get(get_url).content
soup = beautifulsoup(html, 'html.parser')
expr = soup.p.div.get_text()#獲取到需要計算的表示式
num = eval(expr.replace('x', '*'))
print(num)
payload =
post = session.post(post_url, payload)
print(post.text)
//todo
某**活動的獎券號碼是6位數(100000-999999),請計算其中不含「4」的號碼的獎券數量。
答案格式為:ctf,x為不含「4」的號碼的獎券數量
使目用python遍歷字串,判斷字串中是否含有字元『4』,如果有不計數,沒有的話總數加1。**如下:
sum = 0
for i in range(100000, 999999 + 1):
if'4'in str(i):
continue
else:
sum += 1
print(sum)
看別人的writeup時發現了下面這個只有兩行**的解法,要讀懂的話需要對reduce和map的特性有一定了解。
from functools import reduce
print(reduce(lambda x,y:x+y,map(lambda i:0
if'4'
in str(i) else
1,range(100000,999999+1))))
//todo
//todo
實驗吧解題筆記 程式設計(二)
每五個題目寫作一篇writeup,第一行對應解題筆記 一 給出乙個迴圈公式,對於乙個整數n,當n為奇數時,n 3n 1,當n為偶數時,n n 2,如此迴圈下去直到n 1時停止。現要求對兩個整數i 900 j 1000,輸出i j之間 包括i j 的所有數進行上述迴圈時的最大迴圈次數 包括n和1 格式...
程式設計實驗 期末模擬 解題報告
1001 題目大意 搜尋某個數字在一串數中第一次出現的位置,如果沒有則輸出 1 解題思路 簡單的搜尋題,直接遍歷整個陣列,如下 includeint main 1004 題目大意 檢驗字串是否合法 解題思路 逐位判斷 include includeint valid char s int main ...
實驗吧 程式設計迴圈 求底運算
要好好學寫指令碼!迴圈 題目介紹 給出乙個迴圈公式,對於乙個整數n,當n為奇數時,n 3n 1,當n為偶數時,n n 2,如此迴圈下去直到n 1時停止。現要求對兩個整數i 900 j 1000,輸出i j之間 包括i j 的所有數進行上述迴圈時的最大迴圈次數 包括n和1 格式 ctf 指令碼 cod...