표튜터와 함께하는 Pwnable
-
FTZ 16번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 18:22
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. FTZ 16번 문제이다. 코드를보자!코드를 보면 변수 선언 뒤 call이라는 포인터에 printit함수의 주소가 저장된다.그리고나서 fgets으로 버퍼에 값을 받고 call()함수가 호출되면printit()이 실행되는 구조이다. main()함수에서 쓰이지 않은 함수가 있는데바로 shell()함수이다.이 함수의 내용을 보니 한단계 위의 권한으로 "/bin/sh"을 실행시킨다.이 함수를 이용하여 다음 단계로 갈 수 있다는 것을 알았다.어셈블리어 코드를 보면 어떠한 주소값을 ebp-16에 넣고 있었고저기까지 프로그램을 실행시킨 뒤, 저 값이 의미하는 것이 무엇인지 확인했다.(printit()라고 짐작하고 있었다) 역시 저 값은 printit()를 의미했..
-
FTZ 15번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 08:09
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. FTZ 15번이다. 마치 FTZ 14번과 비슷하다고 느꼈겠지만 조금 다르다. 코드를 보면 이번에는 check가 포인터로 되어있다.나머지는 같고 비교문은 check의 주소와 비교하고 있다는 점이 14번과 다르다.역시 if문을 참으로 통과하게되면 다음권한으로 "/bin/sh"이 실행되어다음단계로 갈 수 있게 되는 구조이다. 어셈블리어 코드를 보자.fgets로 값을 받고나서 ebp-16에 있는 값을 eax에 저장한 뒤eax에 있는 4byte를 0xdeadbeef와 비교하는 코드였다. 0xbfffd718에 eax값이 저장된다는 것을 알았고fgets가 45까지지만 우리는 44개의 바이트만을 사용하기 때문에 상관이 없었다. 하지만 여기서 주의할 점은 [eax..
-
FTZ 14번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 07:23
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.FTZ 14번 문제이다. 코드를 보니 이번에는 fgets로 길이를 주어줬다.그리고 밑에 if문을 보니 check라는 값이 0xdeadbeef 이면 다음원한으로 "/bin/sh"이 실행된다는 것을 알 수 있었다.그러므로 해야할 일은 바로 check값을 0xdeadbeef로 맞춰주는 것이다. 어셈블리어 코드를 보니 fgets으로 값을 받고나서 ebp-16에 있는 값이 0xdeadbeef인지 비교하였다.저 부분이 바로 check의 주소라는 것을 알 수 있었다. a값을 몇개 넣어주고 실행을 해보았다. 0xbfffef88까지 44개임으로 45개까지 입력가능한 fgets()가 문제가 되지 않았다. 그럼으로 바로 40개의 a값을 채우고 0xdeadbeef로 조건..
-
FTZ 13번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 04:47
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번문제 FTZ 13번의 코드이다.strcpy로 인한 스택 오버플로우 취약점이 보인다.하지만 이전 문제들과 다른점이 있다.바로 i 라는 변수값이 0x01234567이 아니면 프로그램이 종료된다.마치 Stack Canary 처럼 뭔가 버퍼의 값이 바뀌는 것을코드를 통해 체크하여 종료시키는 느낌이다ㅎㅎ 그렇기 때문에 버퍼오버플로우를 이용하면서 i의 값은 0x01234567로 가져가면 될 것 같다. 4번째 줄에서 볼 수 있듯이 ebp-12에 0x01234567의 값이 채워짐을 알 수 있었고저 주소가 변수 i라는 것을 알 수 있었다. strcpy에 breakpoint를 걸고 버퍼의 크기보다 약간 적은 값 1000을 넣어보았다.ret 주소가 0x420155..
-
FTZ 11번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 4. 21:57
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. (다른방법의 풀이도 올리겠습니다)밀린 Wrtie up을 쓰면서 정리를 하려고 합니다. FTZ 11번은 굉장히 쉽다. 버퍼오버플로우의 기본적인 유형이다. 우리가 알아야할 것은 어떻게 코드가 실행되냐라고 생각한다. 본론을 말하자면 RET값을 덮어씌우는 것이 관건이다. 오버플로우를 일으켜서 RET주소값만 바꿔주면 된다. 소스코드를 보니 strcpy가 취약하다는 걸 알 수 있었다. 길이가 지정되있지않기 때문에 공격자는 버퍼보다 큰 크기의 값을 argv[1]로 입력할 수 있었다. strcpy 부분에 breakpoint를 걸고 우선 a를 10개만 입력한 뒤 gdb로 확인해보았다.ret 주소 0x42015574의 위치가 보였다.저 주소 이전까지 특정 문자를 씌..