西普学院CTF编程题之百米

site:http://www.simplexue.com/ctf/examctfdetail/31

题目要求:

sx2

嗯,三秒时间内计算题目并提交正确的结果,我陷入了思考。。。这又不是最强大脑题目组,但是我们有最强工具–计算机的说。

基本思路就是网络编程get到题目并POST提交计算结果。

程序如下,亲测有效lol

 


# -*- coding: cp936 -*-
import urllib
import urllib2
from bs4 import BeautifulSoup  # 需要用到BeautifulSoup模块

# 初始化,设置常量
#设置cookie
cookie = "__guid=78867218.2533551382962505700.1436858134904.6907; " \
         "Hm_lvt_1f960d9c1005acc770c545889855ce76=1436857309,1436858552,1436859335,1437120172;" \
         " PHPSESSID=eb429e1c1f6c31fecdf1fae189706af9"

#设置HTTP头,请求页面时的关键语句
headers = {'Cookie': cookie}
url = "http://ctf8.simplexue.com/jia/"
urlcheck = "http://ctf8.simplexue.com/jia/index.php?action=check_pass"
data = None

#请求算式页面
r1 = urllib2.Request(url, data, headers)
resp = urllib2.urlopen(r1)
html = resp.read()

#利用BeautifulSoup找到算式
soup = BeautifulSoup(html)
content = soup.findAll(attrs={"name": "my_expr"})
s = str(str(content).split('>')[1]).split('<')[0]
print s

#计算结果
for i in ('(', ')', '+', '-', 'x'):
    s = s.replace(i, '')

ls = s.split()
a = []
for i in range(len(ls)):
    a.append(int(ls[i]))

result = (a[0] + a[1]) * (a[2] - a[3]) - (a[4] + a[5] - a[6]) * a[7]
print result

#post提交结果
data = urllib.urlencode({'pass_key': result})
r = urllib2.Request(urlcheck, data, headers)
resp2 = urllib2.urlopen(r)
print resp2.read()

运行后再打印的Response中找到key值

KEY:S33h4Yu

总结:主要是基于cookie的数据请求,然后是利用BeautifulSoup进行数据提取,当然也可以用正则,然后是本题目中给出的算式是有特点存在的,运算符号位置都没变,只是每次变换生成的数值,数值的位数还是一定的,所以这个是个专有算法,但是类似的题目思路都是一样的。最后是个带data数据的POST提交。

主要技能点:urllib,urllib2包的使用,带cookie的Request,BeautifulSoup数据提取,带data的POST提交

———————————分割线———————
现在看以前的程序感觉真的是太蠢了。。。
完全可以用更少的代码实现同样的功能,最主要的是用requests这个包,这个可以说是对urllib和urllib2包的简化,功能强大而且编程实现简单。加上合理使用re正则表达式,算式直接eval出结果,几行代码就可以完成。
python果然是越学越好用。

import re
import requests

url = 'http://ctf8.shiyanbar.com/jia/'
session = requests.session()
r = session.get(url).content

p = re.search(r"'my_expr'>(.*?)</div>", r)
s = eval(p.group(1).replace('x', '*'))

data = {'pass_key': s}
print session.post(url, data).content

在输出的返回数据中找到key.

您可能还喜欢...