본문 바로가기

전체 글

(71)
Puzzle #1: Ann's Bad AIM
leak me auth.c flag main 간단히name = 입력한 문자열+"\nPlease Enter the Password."이 name 문자열의 끝에 NULL이 없으면 name을 출력할 때 password.txt의 내용까지 출력된다.중간에 '\x00'은 strcat이 실행될 때 제거되고 바로 뒤에 문자열이 추가된다. "\nPlease Enter the Password."의 길이 : 28byte아무문자나 228byte 이상 입력해주면 된다. 자세히 말하자면puts(name)전 스택의 상태는 실행하면
got-2-learn-libc vuln.c 포인트 라이브러리 라이브러리란? 다시 사용할 수 있도록 미리 컴파일된 함수들의 묶음 대개 /lib와 /usr/lib에 저장되어 있음 아카이브(정적 라이브러리) : .a 확장자 공유 라이브러리 : .so 확장자 공유 라이브러리란? 동시에 여러 응용프로그램이 동일한 라이브러리 함수를 사용할 경우 사용한다. 실행 시에 사용 가능한 공유 코드를 참조하는 방식으로 공유 라이브러리를 링크시킨다. 필요한 경우 메모리에 로드된다(그래서 library가 heap영역에 존재) 자신을 사용하는 응용프로그램과 독립적으로 갱신될 수 있다. 이 공유 라이브러리의 심볼을 확인해보면필자의 32bit용 라이브러리는 /lib32내에 있다.readelf -s /lib32/libc-2.27.so 이렇게 각 함수의 오프셋이 나온..
Format String Bug Format String Bug 포맷 스트링을 이용한 공격 기법으로 printf()함수의 취약점을 이용 ex)fgets(buf, sizeof(buf), stdin);printf(buf); 문자열일 때는 정상적으로 문자열로 인식하지만 서식문자를 넣었을 경우 문자열로 인식하지 않고 서식문자로 인식한다.서식문자를 만나면 메모리의 다음 4byte 위치를 참조해 그 서식문자의 기능대로 출력한다.ex. %d를 입력 -> 메모리 다음 위치에 있는 값을 10진수로 출력 format string 예를 들면, 여기서 "AAAA %p %p %p %p %x %x %x" 를 입력했을 때 printf 호출하기 직전 스택의 상태 중요한 것만 정리해보면 즉, 출력할 때 각 포맷 스트링이 참조하는 것은 출력은 당연히 아래처럼 된다. ..
echooo echo.c 포인트format String Bug *format String Bug에 자세한 건 따로 정리한 글 참고 printf를 호출하기 직전 스택상태* flag.txt는 임의로 만들었다. 정답 1. %s이용알다시피 "%s"는 문자열의 주소를 참조하는 포맷이기 때문에flag문자열의 시작주소를 찾으면 된다. 스택을 확인해보면esp에서 8번째 뒤에 있다."%8$s" 입력 정답 2. %x이용%x는 4byte씩 16진수 출력esp에서 27번째 뒤에 flag문자열이 있다. "%x "를 27번 입력하면 번거롭고 buf길이(=64byte)를 초과하기 때문에"%27$x"부터 '}'의 16진수인 7d 까지 출력해서 확인
bof2 보다시피 main에도 vuln에도 win호출하는 코드가 없다. 포인트1. win(0xDEADBEEF,0xDEADC0DE) 을 호출2. gets로 bof 1. win 주소 확인 readelf -s vuln0x80485cb 2. gets(buf) 후 buf 확인 108byte+4byte(ebp) 아무거나 채우면 된다. 3. ret를 win주소로 bof "a"*112(dummy)+"\xcb\x85\x04\x08"(win 주소)+"a"*4+"\xef\xbe\xad\xde"(arg1)+"\xde\xc0\xad\xde"(arg2) 왜 "a"*4? win의 리턴 주소 vuln 함수에서 ebp, esp vuln함수 leave 이후 win함수 mov ebp, esp 이후 gets(buf) 이후 스택 상태 자 이제 실행해..
uaf uaf 디렉토리 uaf.cpp Human 클래스 Man 클래스 Woman 클래스 main case 1 일단 문제 이름도 uaf인 만큼 간단히라도 알고 들어가자. UAF(Use After Free) heap영역에서 할당된(allocated) 공간을 free하고 재사용(reuse)할 때 일어날 수 있는 취약점heap spray와 병행해서 사용 포인트1. uaf2. give_shell m,w 할당됐던 자리에 메모리를 집어넣어 give_shell 재사용-> uaf는 free한 메모리를 재사용하는 것이기 때문 순서: case3 -> case2 2번 -> case1 1. case3으로 m, w을 free2. case 2 2번(64bit이기 때문에 4byte주소 2번 넣음)으로 introduce주소를 give_she..
cmd2 cmd2 cmd2.c 포인트1. echo 명령어2. command 명령어3. read 명령어 삽질 1 filter함수에 걸리진 않지만 /bin/cat hey3를 실행한 결과값을 출력하는 것이기 때문에 Permission denied 된다. 삽질 2이것 또한 filter함수에 걸리진 않지만 \57bin\cat hey3 출력 후, system("57bin57cat") 실행 실패 * hey3 : flag의 심볼릭 링크 삽질 3 echo -e 를 써서 바로 입력도 가능한데 쉘이 -e옵션을 인식하지 못한다. 정답 1. echo 명령 사용해서 /bin/cat flag 실행한 결과 출력 $(echo "\57")bin$(echo "\57")cat fla* 그대로 출력된다. "\57"가 '/'로 변경된 후, $(echo..