본문 바로가기
Security/[게임] CTF 풀이

[coding] DEFCON CTF Qualifier 2015, catwestern Writeups

by blackcon 2015. 5. 18.

<문제 유형>

blackcon@bk:~/def/code$nc catwestern_631d7907670909fc4df2defc13f2057c.quals.shallweplayaga.me 9999

****Initial Register State****

rax=0x408ac14d14c91041

rbx=0x92b94f86512d81f7

rcx=0x27e130edb33ed938

rdx=0x4908d46be209ea22

rsi=0x46544d33f066a612

rdi=0x7917f07f5de389fd

r8=0x1be4f02013a8e1bd

r9=0xa30f7795d3397ee3

r10=0x2bce7d9563e73db2

r11=0x75aabcc891d0be75

r12=0x65f56eb6f0aea8a0

r13=0xfb79336eaae8f23a

r14=0xfe3972f02bb89884

r15=0x43aa67d92fe69f90

****Send Solution In The Same Format****

About to send 62 bytes: 

L��I��H��M�I��0�PqI���I��H�� L��

****Improperly formatted solution

****Improperly formatted solution

 ->64bit 레지스터를 제공

 ->쓰레기값처럼 보이지만 64bit Opcode를 제공


<풀이 순서>

1. 레지스터값을 저장하는 asm.s를 생성( ex: mov rax, 0x12345678 ,,, )

 -> 코드를 생성 후 nasm -f elf64 -o ./asm ./asm.s 로 컴파일

2. OPcode를 실행할 수 있는 바이너리 생성( gcc -o exec exec.c -z execstack )

3. 레지스터와 opcode를 파일로 저장 후 실행

4. 그 결과를 받아와서 서버로 전송.


[+] exec.c


[+] go.py