CSAW 2017 CVV及tabIEZ Writeup

因为需要准备出差, 只做了一些小题

CVV

信用卡号码算算号器和随机生成器
https://zh.wikipedia.org/zh-hans/Luhn%E7%AE%97%E6%B3%95
从网上找的代码,有问题按照Luhn代码算法说明改

代码很烂,都是粘的还有错。。。

#!/usr/bin/env python

# author: garbu

from random import randint
from pwn import *

def generate_card(type):
    """
    Prefill some values based on the card type
    """
    card_types = ["americanexpress","visa11", "visa16","mastercard","discover"
    
    def prefill(t):
        # typical number of digits in credit card
        def_length = 16
        
        """
        Prefill with initial numbers and return it including the total number of digits
        remaining to fill
        """
        if 'num:' in t:
            return [int(t[4]), int(t[5]), int(t[6]), int(t[7])], 12
        if t == card_types[0]:
            # american express starts with 3 and is 15 digits long
            # override the def lengths
            return [3, randint(4,7)], 13
            
        elif t == card_types[1] or t == card_types[2]:
            # visa starts with 4
            if t.endswith("16"):
                return [4], def_length - 1
            else:
                return [4], 10
            
        elif t == card_types[3]:
            # master card start with 5 and is 16 digits long
            return [5, randint(1,5)], def_length - 2
            
        elif t == card_types[4]:
            # discover card starts with 6011 and is 16 digits long
            return [6, 0, 1, 1], def_length - 4
            
        else:
            # this section probably not even needed here
            return [], def_length
    
    def finalize(nums):
        """
        Make the current generated list pass the Luhn check by checking and adding
        the last digit appropriately bia calculating the check sum
        """
        check_sum = 0
        
        #is_even = True if (len(nums) + 1 % 2) == 0 else False
        
        """
        Reason for this check offset is to figure out whther the final list is going
        to be even or odd which will affect calculating the check_sum.
        This is mainly also to avoid reversing the list back and forth which is specified
        on the Luhn algorithm.
        """
        check_offset = (len(nums) + 1) % 2
        
        for i, n in enumerate(nums):
            if (i + check_offset) % 2 == 0:
                n_ = n*2
                check_sum += n_ -9 if n_ > 9 else n_
            else:
                check_sum += n
        if check_sum % 10 == 0:
            return nums + [0]
        return nums + [10 - (check_sum % 10) ]
    
    # main body
    t = type.lower()    
    initial, rem = prefill(t)
    so_far = initial + [randint(1,9) for x in xrange(rem - 1)]
    #print "Card type: %s, " % t
    cardnum = "".join(map(str,finalize(so_far))).strip('\n')
    print cardnum
    return cardnum


# # run - check
# generate_card("discover")
# generate_card("mastercard")
# generate_card("americanexpress")

# generate_card("visa13")
# generate_card("visa16")


def ck(nums):
    """
    Make the current generated list pass the Luhn check by checking and adding
    the last digit appropriately bia calculating the check sum
    """
    check_sum = 0
    
    is_even = True if ((len(nums) + 1 )% 2) == 0 else False
    
    """
    Reason for this check offset is to figure out whther the final list is going
    to be even or odd which will affect calculating the check_sum.
    This is mainly also to avoid reversing the list back and forth which is specified
    on the Luhn algorithm.
    """
    check_offset = (len(nums) + 1) % 2
    
    for i, n in enumerate(nums):
        i = int(i)
        n = int(n)
        if i == 0:
            if is_even:
                n_ = n*2
                check_sum += n_ -9 if n_ > 9 else n_
            else:
                check_sum += n
            continue;
        if (i + check_offset) % 2 == 0:
            n_ = n*2
            check_sum += n_ -9 if n_ > 9 else n_
        else:
            check_sum += n
    if check_sum % 10 == 0:
        return 0
    return 10 - (check_sum % 10)


def ck2(nums):
    digits = [int(i) for i in str(nums)]
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    total = sum(odd_digits)
    for digit in even_digits:
        total += sum([int(i) for i in str(2 * digit)])
    if total % 10 == 0:
        return "1"
    else:
        return "0"

conn = remote("misc.chal.csaw.io", 8308)
while True:
    cmd = conn.recvline()
    print cmd,

    if 'I need to know if ' in cmd:
        card = "".join(filter(str.isdigit, cmd))
        card = card[:-2]
        print card
        conn.sendline(ck2(card))
        conn.recvline()

    elif 'Visa' in cmd:
        conn.sendline(generate_card('visa16'))
    elif 'MasterCard' in cmd:
        conn.sendline(generate_card('mastercard'))
    elif 'Discover' in cmd:
        conn.sendline(generate_card('discover'))
    elif 'American Express' in cmd:
        conn.sendline(generate_card('americanexpress'))
    elif 'starts with' in cmd:
        num = generate_card("num:" + cmd[-6:-2])
        conn.sendline(num)
    elif 'ends with' in cmd and cmd[-4] in '01234567890':
        num = cmd[-6:-2]
        while True:
            card = generate_card('visa11') + '1' + num
            if ck(card[:-1]) == int(card[-1]):
                print card
                conn.sendline(card)
                break;
    elif 'ends with' in cmd:
        num = cmd[-3:-2]
        while True:
            card = generate_card('visa16')
            if card[-1] == num:
                conn.sendline(card)
                break;

    print conn.recvline(),
   

tabIEZ

Ascii值用表置换,长度不长直接手动查表逐位算出来的

tu.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • ¥关闭¥ 【雷霆战机】 〖http://pan.baidu.com/s/1kVstszX〗 《解压源码后直接用AI...
    小菜c阅读 9,412评论 0 19
  • ¥开启¥ 【雷霆战机】 〖http://pan.baidu.com/s/1kVstszX〗 《解压源码后直接用AI...
    小菜c阅读 3,639评论 0 5
  • ¥开启¥ 【雷霆战机】 〖http://pan.baidu.com/s/1kVstszX〗 《解压源码后直接用AI...
    小菜c阅读 3,501评论 1 10
  • ## 2015.06.05 - [开源利弊浅谈 - 张超耀](移动组周技术分享总结#开源利弊浅谈---张超耀) -...
    XcodeYang阅读 1,484评论 1 3
  • Objective-C是一个动态语言,有一个c和汇编语言编写的runtime库(lib.objc.A.dylib)...
    link_hui阅读 227评论 0 0