orw 쉘코드란 파일을 열고, 읽은 뒤 화면에 출력해주는 쉘코드이다. (open-read-write)syscallsyscall(systemcall)이란 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에
작성했던 쉘코드 실행 부분에 breakpoint를 걸고 실행 한 사진run_sh+12까지 실행하고 나면 0x7fffffffe0b8에 /tmp/flag가 push 된 것을 확인 할 수 있음첫번째 syscall(open)에 bp걸고 인자 확인 file:/tmp/flag
syscallasembly codeC coderun.sh에 bp 걸고 실행run_sh+11까지 실행 후 스택 => 0x7fffffffe0c0 = 0x68732f6e69622f(/bin/sh)run_sh+27에 bp 설정 후 확인해보면 rsp, 0, 0 인자로 execv
이미 입력 값을 받아서 실행시켜준다. shellcode만 짜서 넣으면 된다.flag 파일 위치를 읽어와서 출력하면 될 것 같다. (orw shellcode)Flag 값을 littleEndian으로 변환해주기 위해 코드를 만들었다.asm code 작성해주고 저번에 만들
Stack에 위치한 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그100ml 컵에 200ml 물을 받으면 넘치는 것과 같은 원리buffer 뒤에 데이터를 덮어 씌워서 중요한 데이터 변조가능Buffer란 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소처
원하는 위치까지 받아옴int형으로 문자 받아올때 사용데이터 전송데이터 한 줄로 전송 -> \\n 개행 추가특정 문자열까지 받은 후 데이터 전송값을 32bit 리틀엔디안 방식으로 packing값을 64bit 리틀엔디안 방식으로 packing앞으로 추가
Stack Canary란? dreamhack 제공 코드complie
파라미터: \*box: box buffer의 시작 주소, idx: 출력할 index 위치루틴을 보면 idx의 범위를 정해주지 않아서 box 버퍼를 넘어 값을 읽어 올수 있음name 버퍼는 0x40read() 함수에 보면 읽어올 버퍼의 사이즈를 정해주고 있음name_le
canary, NX 확인Canary leak <main+17>: canary = rbp-0x8<main+123> ~ <main+140>: read buffer setting -> buf = rbp-0x40 buf <-> canary: 0x38RT