ctf-编码-百米
http://www.shiyanbar.com/ctf/1971
import requests
import re
'''
实验吧 编程类第二题。 百米
'''
url="http://ctf5.shiyanbar.com/jia"
session=requests.session() #保持连接
response=session.get(url)
html=str(response.content) #获取源代码
#找到题目内容; re.S : 使 . 匹配包括换行在内的所有字符
#compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,
#供 match() 和 search() 这两个函数使用。
keyword=re.compile(r'<div.*?my_expr.*?>(.*?)</div>',re.S)
#findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,
#如果没有找到匹配的,则返回空列表。
item=re.findall(keyword, html)
#Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),
#如果指定第三个参数max,则替换不超过 max 次。
#replace()方法语法:str.replace(old, new[, max])
result=item[0].replace("x","*")
print ((result)) #打出截取出来的字符串表达式
#eval() 函数用来执行一个字符串表达式,并返回表达式的值。
pattern=eval(result)
#相当于在提交栏出提交了一个pattern
hh=session.post("http://ctf5.shiyanbar.com/jia/index.php?action=check_pass",data={'pass_key':pattern})
#建立一个关键字列表
lisa=['key','flag','KEY','Flag','Key','FLAG']
for x in lisa:
#在源码中搜索lisa中的每个关键字
if x in str(hh.text):
#用res接收找到的res关键字的起始位置和末位置
res=re.search(x,str(hh.text)).span()
print("Maybe find flag ok")
#打印出从res[0]-res[-1]+8的这一段文本;因为答案就是关键字之后的一定长度的文本
#当然+8是测试出来的,因为一开始不知道长度可以加一个大点的数值,如+20
print(str(hh.text)[res[0]:int(res[-1])+8])
网友评论