中级CTF:pyscript writeup

CTF:http://106.75.108.111:1111/

提示信息:pyscript

1.先访问目标,发现是一个简单的界面

中级CTF:pyscript writeup

2.查看源代码发现了一些有用的提示信息

中级CTF:pyscript writeup

3.通过页面的提交框随便输入数据进行提交

中级CTF:pyscript writeup

从页面上并没有发现有返回结果

4.利用Burp suite 进行抓包,并且发送到repeater进行发送,查看响应信息

中级CTF:pyscript writeup

成功的完成第一步,获取了一串密文(这里多观察,发现每次刷新明文是会刷新的)

5.回到网页源代码页面

中级CTF:pyscript writeup

第一个是找出明文这里猜想是第二步的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

中级CTF:pyscript writeup


感谢各位大佬赏脸,有什么不足的地方请多多指教,谢谢!!!