목록Study/System (13)
촉촉한초코칩
ROP(Return Oriented Programming) 라이브러리 함수의 실행다수의 리턴 가젯 연결하여 사용ASLR이 걸린 환경에서 system 함수를 사용하기 위해 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용한 함수의 주소를 계산한다. 공격문제에 맞게 return to library, return to dl-resolve, GOT overwrite 등의 페이로드 구성 ROP 페이로드리턴 가젯으로 구성ret 단위로 여러 코드가 연쇄적으로 실행된다. ROP 실습 코드 // Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#include #include int main() { char buf[0x3..
C코드// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt"); // Leak canary printf("[1] Leak Canary\n"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); // Overwrite ..
먼저 코드를 살펴본다.F를 입력하면 box에 입력받는다.P를 입력하면 idx를 입력받고 print_box 함수를 통해 해당 인덱스 값을 출력한다.> 만약, box보다 큰 값이 들어온다면 오버플로우가 일어날 수 있다.E를 입력하면 name_len의 값을 입력받고 name에 그 값을 넣는다. > 만약, name보다 큰 값이 들어오면 오버플로우가 일어날 수 있다.get_shell() 함수에 닿으면 flag를 얻을 수 있다. 디버깅117번째 줄에서 select를 입력받는다.그리고 그 값에 따라 F면 155, P면 192, E면 249번째 줄이 실행된다. F 입력 시 P 입력 시 idx를 입력받고 print_box를 실행한다.print_box의 주소 값은 eax에 있다는 것을 알 수..
https://learn.dreamhack.io/112#8 로그인 | Dreamhack dreamhack.io 카나리 생성 과정 카나리 값은 프로세스가 실행될 때TLS에 전역 변수로 저장되고각 함수마다 프롤로그와 에필로그에서 이 값을 참조한다. > TLS에 카나리 값이 저장되는 과정을 분석해본다. TLS의 주소 파악fs는 TLS를 가리키므로, fs의 값을 알면 TLS의 주소를 알 수 있다.리눅스에 fs의 값은 특정 시스템 콜을 사용해야 조회하거나 설정할 수 있다.(info register fs, print $fs로는 알 수 없음)fs의 값을 설정할 때 호출되는 arch_prctl(int code, unsigned long addr) 시스템 콜에 중단점을 설정하여 fs가 어떤 값으로 설정되는지 조사한다...
https://learn.dreamhack.io/112#3 로그인 | Dreamhack dreamhack.io 카나리 정적 분석 스택 버퍼 오버플로우 존재카나리를 활성화하여 컴파일한 바이너리와, 비활성화하여 컴파일한 바이너리를 비교하여 스택 카나리 원리를 살펴본다. 카나리 비활성화컴파일 옵션으로 -fno-stack-protector 옵션을 추가해야 카나리 없이 컴파일할 수 있다.실행하려고 했는데.. 버퍼오버플로우 위험이 있다고 실행이 안 되는 것 같음.....드림핵 기준으로 정리하면.. 길이가 긴 입력을 주면 반환 주소가 덮여서 Segmentation fault가 발생할 수 있다. 카나리 활성화긴 입력을 주면 stack smashing detected와 Aborted라는 에러가 발생 : 스택 버퍼 오버플..
워게임 shell_basic 파일 이름 : /home/shell_basic/flag_name_is_loooooongorw 쉘코드를 작성해서 flag파일을 읽는다. orw 쉘코드 강의에서 나온대로 코드 짜보기파일명 /home/shell_basic/flag_name_is_loooooong 을 아스키코드로 변환 하고 rax에 넣는다. push 0x0mov rax, 0x676e6f6f6f6f6f6fpush raxmov rax, 0x6c5f73695f656d61push raxmov rax, 0x6e5f67616c662f63push raxmov rax, 0x697361625f6c6c65push raxmov rax, 0x68732f656d6f682fmov rdi, rsp xor rsi, rsixor rdx, rd..