中级CTF:pyscript writeup
CTF:http://106.75.108.111:1111/
提示信息:pyscript
1.先访问目标,发现是一个简单的界面
2.查看源代码发现了一些有用的提示信息
3.通过页面的提交框随便输入数据进行提交
从页面上并没有发现有返回结果
4.利用Burp suite 进行抓包,并且发送到repeater进行发送,查看响应信息
成功的完成第一步,获取了一串密文(这里多观察,发现每次刷新明文是会刷新的)
5.回到网页源代码页面
第一个是找出明文这里猜想是第二步的3个数字吧
第二个条件是随机3个数字组合加上后面一串字符进行sha1加密等于密文
第三个是必须10秒内提交
大致就是找出当三个数字加图中字符串进行sha1加密等于抓包后获得的密文时,那三个数字的明文,进行提交,而且要在你刷新页面后开始计时,10秒内提交(这里每次刷新源码里的字符串和抓包获得的密文都会重新刷新)
6.小编也有试过半自动的方式进行提交,但是手速跟不上啊,所以选择了用python脚本代替,一步到位,代码如下
import urllib,urllib2,json
import hashlib
import re
import requests
url = 'http://106.75.108.111:1111'
def sha_1(data):
sha_1 = hashlib.sha1()
sha_1.update(data)
sha = sha_1.hexdigest()
return sha
def key(key1,key2):
c='0123456789'
str1 = key1
cipher = key2
for i in c:
for j in c:
for k in c:
if sha_1(i+j+k+str1) == cipher:
print (i+j+k)
return i+j+k
def get_info():
r = requests.post("http://106.75.108.111:1111")
key2 = r.headers['Ciphertext']
cookies = r.cookies
html = r.text
res = r'\+(.*?)\)'
key1 = re.findall(res,html)[0]
return key1,key2,cookies
def postx(number,cookies):
cookies = cookies
values={'pass':number}
response = requests.post("http://106.75.108.111:1111",cookies=cookies,data=values)
return response.text
def sum(text):
res = r'<!--.*?([\d\+\-\*]+).*?-->'
key3 = re.findall(res,text)[0]
result = eval(key3)
return result
if __name__ == '__main__':
(key1,key2,cookies)=get_info()
number = key(key1,key2)
result1 = postx(number,cookies)
result2 = sum(result1)
print result2
print postx(result2,cookies)
7.利用python脚本,获取flag
感谢各位大佬赏脸,有什么不足的地方请多多指教,谢谢!!!