#尝试解决的问题为Calculator
(1) 预备知识以及工具的使用
①python3.5以及编译器
②requests库的使用
> 发送请求
首先要导入requests模块
>>import requessts
然后通过代码获取某网页。如calculator的网页
>>url = 'http://web1.blue-whale.me:23331/calculator/'
> 传递url参数
>> 手工构建的URL,例如,xxx.org/get?key=val,Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。
>>> 如 r = requests.get(url, params={'answer': answers}, cookies=c)
> cookies的返回与使用
» 如果某个响应中包含一些 cookie,你可以快速访问它们:
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name']
» 要想发送你的cookies到服务器,可以使用 cookies 参数:
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
r.text
③正则表达式re的使用
正则表达式(Regular Expression)是字符串处理的常用工具,通常被用来检索、替换那些符合某个模式(Pattern)的文本。
> 使用正则表达式从字符串中提取出子字符串
>> pattern = re.compile(r'<span id="exp">(.+) = </span>')
④使用eval()函数计算由正则表达式提取出的字符串
evals = re.findall(pattern, html)[0]
answers = eval(evals)
(2) 代码
import re
import requests
def main(): #定义函数
url = 'http://web1.blue-whale.me:23331/calculator/'
request = requests.get(url)
c = request.cookies
print(c)
html = request.text
pattern = re.compile(r'<span id="exp">(.+) = </span>')
evals = re.findall(pattern, html)[0]
answers = eval(evals)
print(answers)
r = requests.get(url, params={'answer': answers}, cookies=c)
print(r.text)
if __name__ == '__main__':
main()
(3) 输出结果
<RequestsCookieJar[<Cookie PHPSESSID=d2edaf511e14b97fd9af46e5bdb26db4 for web1.blue-whale.me/>]>
12519589397
<!DOCTYPE html>
<html>
<head>
<title>Calculator</title>
<style type="text/css">
.line_input{
border-width: 1px;
border-bottom: solid;
border-top: none;
border-left: none;
border-right: none;
border-width: 1px;
text-align: center;
outline: none;
margin: 0 1em;
}
</style>
</head>
<body>
<center>
<h1>Yet Another Calculator</h1>
flag{yes_you_are_calculat0r}<br />Time elapsed: 0.49016308784485 s<br />
</center>
</body>
</html>
(4) 学习认知
在学习python的过程中,快速略过了不少内容,基础很不扎实,后期需要继续学习;
解此题的过程中,参考了网络安全实验室同类型题目的writeup,因此正则表达式re的用法尚不熟练;
requests库的内容还有很多不会,需要继续学习;