본문 바로가기

분류 전체보기

(156)
[드림핵] baic_exploitation_000 풀이 - 티스토리 basic_exploitation_001과 main코드는 거의 비슷하다 여기선 read_flag와 같은 함수가 없으므로 다른 방법을 이용해 ret를 override시키면 될거 같다 사실 이 문제는 고민하다가 혼자 못 풀어서 다른 블로그 참고해서 풀었다 지금 보니까 buf의 주소를 출력하고 있는 코드가 힌트인거 같네 분석 페이로드 : buf에 쉘코드 포함 아무값이나 0x84 만큼 채운 후 ret를 buf 주소로 덮어 씌워서 쉘코드를 실행시킨다 (여기서 입력을 scanf로 받고 있으므로 scanf의 특성을 고려해야함) 솔직히 보안 입문자가 이걸 어떻게 생각해내.................................................... \x31\xc0\x50\x68\x6e\x2f\x73\x6..
[드림핵] basic_exploitation_001 풀이 - 티스토리 32비트 환경이다 다른 보호기법들은 아직 안 배워서 잘 모르겠다 (찾아보니까 NX는 쉘코드를 실행 못하게 하는 보호기법인듯) 문제 코드이다 buf를 gets함수로 입력 받는 부분에서 BOF가 발생할 수 있기 때문에 이를 이용해서 read_flag함수의 주소로 덮어 씌우면 된다 필요한 정보 buf위치, read_flag 주소값 buf위치 : ebp-0x80 read_flag 주소값 : 0x080485b9 페이로드 : "A" * 132 + "read_flag주소값" read_flag도 payload변수에 더해서 전달하려하면 바이트값이라 오류 나는데 원래 안되는건가.. 다른 분들 잘 하시던데 끝 * alarm함수는 해당 시간이 지나면 SIGALRM 신호를 발생시키면서 프로그램에 전달한다 signal함수는 지정..
[드림핵] Return Address Overwrite 풀이 - 티스토리 문제 코드 1. 정적 분석 - main함수 스택프레임에 buf가 쌓이고 buf를 입력 받을 때 ret까지 덮어서 get_shell() 함수를 실행 시키자 - buf의 위치를 찾은 후 쓰레기값이 존재하면 쓰레기 값까지 덮어 씌운 후 ret 값에 get_shell() 함수 주소를 넣어야 한다 scanf의 인자를 넘겨주는 부분에서 buf는 rsi레지스터에 넘겨지기 때문에 buf의 위치는 rbp-0x30이다 get_shell 주소 : 0x4006aa 페이로드 : "A" * 56 + "get_shell주소" 끝 init함수 분석 setvbuf는 스트림 버퍼링 방식과 버퍼 크기를 설정하는 함수이다 setvbuf(stdin, 0, 2, 0) : 입력 버퍼를 사용하지 않는다 setvbuf(stdout, 0, 2, 0)..
[드림핵] shell_basic 풀이 - 티스토리 execve, execveat 함수 사용 못하니까 open, read, write 함수들을 사용해서 출력해야 된다 먼저 셀코드를 작성 문자열의 끝을 명시해주기 위해서 널값도 푸쉬 해준다 근데 여기서 rax에 문자열들을 안 옮기고 그대로 push 하니까 에러뜬다 찾아보니까 push는 레지스터를 대상으로 이루어지기 때문에 옮겨 놓고 하는게 정석이라고 한다 nasm -f elf64 shell_basic.asm (해당 파일을 64비트 실행파일로 컴파일) objcopy --dump-section .text=shell_basic.bin shell_basic.o (shell_basic.o파일에서 text 부분만 추출해서 shell_basic.bin 파일로 저장) xxd shell_basic.bin (해당 파일의 내용..