實驗吧解題筆記 程式設計(一)

2021-08-09 04:40:12 字數 2431 閱讀 3252

每五個題目寫作一篇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...