解题
每一次刷新都不一样
post传参value
脚本1
import requests
import re
url = 'http://114.67.175.224:10053/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)
# session表示复用与目标的链接,可以多次以一个cookie与服务器通信
# group()返回字符串
# eval() 执行内容
re.search中正则表达式
- 字符转义
r''表示内容为原生字符串,防止被转义。要用反斜杠转义。
- 一个复杂的表达式:(?0\d{2}[) -]?\d{8}。
这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。
分析:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。
- (\d+[+-*])+(\d+)
首先匹配一个或连续多个数字 \d+
然后是一个 +或-(这里用了转义)或* [+\-*]
接着匹配多个首先和然后的内容 (\d+[+\-*])+
之后再匹配一个或多个数字 (\d+)
脚本2
import requests
import re
request = requests.Session()
url = "http://114.67.175.224:10053/"
response = request.get(url)
n = re.findall("<div>(.*?)=", response.text)[0]
num = eval(n)
data = {"value": num}
response1 = request.post(url, data=data)
f = re.findall('flag{(.*?)}', response1.text)
flag = "flag{" + f[0] +"}"
print(flag)
re.findall中正则表达式(.*?)
- 符号 . 就是匹配除 \n (换行符)以外的任意一个字符
str = 'aabbabaabbaa'
print(re.findall(r'a.b',str))
#['aab', 'aab']
- 符号 * 前面的字符出现0次或以上
str = 'aabbabaabbaa'
print(re.findall(r'a*b',str))
#['aab', 'b', 'ab', 'aab', 'b']
- 符号 .* 贪婪,匹配从.*前面字符为开始到.*后面字符为结束的所有内容
str = 'aabbabaabbaa'
print(re.findall(r'a.*b',str))
#['aabbabaabb']
4.符号.*? 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
str = 'aabbabaabbaa'
print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']
5.符号(.*?) 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
str = 'aabbabaabbaa'
print(re.findall(r'a(.*?)b',str))
#['a', '', 'a']