LOB, giant -> assassin 문제 확인 이번엔 힌트에도 주어져 있듯이, 리턴 부분에 스택주소 영역과 라이브러리주소 영역이 전부 막혔기 때문에 RTL을 사용하지 못한다. 이럴땐 리턴 가젯을 사용하면 된다. /* The Lord of the BOF : The Fellowship of the BOF - assassin - no stack, no RTL */ #include #include main(int argc, char *argv[]) { char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') // 스택영역 막힘 { printf("stack retbayed you!\n"); exit(0..
LOB, bugbear -> giant 문제 확인 저번 문제에 이어 두번째 RTL 문제이다. 이번 문제는 리턴 주소가 execve 함수가 맞는지 조건문으로 확인하고 있기 때문에 system 함수가 아닌 execve를 사용해 쉘을 실행시켜야 한다. /* The Lord of the BOF : The Fellowship of the BOF - giant - RTL2 */ #include #include #include main(int argc, char *argv[]) { char buffer[40]; FILE *fp; char *lib_addr, *execve_offset, *execve_addr; char *ret; if(argc < 2){ printf("argv error\n"); exit(0); } ..
LOB, darknight -> bugbear 문제 확인 이번 문제는 RET을 덮는 주소에 \xbf 영역을 사용하지 못하게 해놓았는데 이 뜻은, 리턴 주소로 스택 영역을 사용하지 못하게 된 것이다. RTL을 활용하는 문제이다. RTL은 FTZ 19번 문제를 풀 때 쓰여야 했던 개념이라 따로 정리해서 포스팅한 적이 있으니 RTL 내용은 아래 포스팅을 참고하길 바란다. RTL(Return to Library) Chaining 이란? RTL(Return to Library) Chaining 이란? 역시 정리하지 않으면 잊어버리는 것이 사람인 것 같다. 나만 그럴수도... ROP 개념을 정리하는 와중에 먼저 RTL Chaning 부터 제대로 정리하자는 생각이 들어 여기에 정리한다. RTL(Return to Li..
역시 정리하지 않으면 잊어버리는 것이 사람인 것 같다. 나만 그럴수도... ROP 개념을 정리하는 와중에 먼저 RTL Chaning 부터 제대로 정리하자는 생각이 들어 여기에 정리한다. RTL(Return to Library) 이란 일단, RTL은 메모리에 이미 적재되어있는 공유 라이브러리를 이용해 원하는 함수를 실행시키는 기법이다. func1 함수를 실행시켜야 한다는 가정에서 아래 예를 봐보자. [buf + SFP +RET] 의 RET 자리에 func1 함수의 주소값이 들어갔고 4바이트의 dummy 후에 func1함수의 인자값이 들어간 구조가 됐다. 참고로 여기서 설명을 위해 사용하는 func1은 인자가 1개인 함수이고 func2는 인자가 2개가 필요한 함수라는 가정이다. // 기존 스택 상황 buf ..