분류 전체보기
-
Stack4 풀이System hacking training/Protostar 2018. 2. 4. 20:59
[문제] 이전문제와는 다르게 함수 포인터가 없다. 하지만 여전히 gets() 사용으로 인해 bof 취약점이 존재한다. ret 을 win()의 주소로 변조시키면 win()가 실행될것이다. [풀이] gdb로 열어보면 main()에서 80바이트의 공간을 할당한 것을 알 수 있다. 따라서 SFP와 buffer[64] 사이의 dummy가 들어가는지 체크할 필요가 있다. 예상한 스택 구조는 이러하다. | char buffer[64] | dummy | SFP | RET | 따라서 buffer와 dummy, sfp를 A로 모두 덮고 마지막에 win()의 주소를 넣어줬다.
-
Stack3 풀이System hacking training/Protostar 2018. 2. 4. 16:13
[문제] win()를 실행시키면 된다. 이 프로그램 역시 gets()의 사용으로 bof 취약점이 존재하고 이 취약점을 이용하여 함수 포인터 fp에 win()의 주소를 넣어주면 된다. [풀이] dummy값 확인을 위해 gdb로 열어본다. win()의 주소도 함께 알아보았다. 이 프로그램 역시 페이로드에 참고해야할 dummy값이 없다. 즉, 함수 포인터 fp와 char buffer[64]가 붙어있다는 뜻이다. 따라서 gets()의 bof 취약점을 이용하여 64 바이트 A를 넣어주고, 위에서 구한 win()의 주소를 구하면 성공한다. 주소가 정확히 win()의 주소로 변경이 되었음을 확인할 수 있다.
-
Stack2 풀이System hacking training/Protostar 2018. 2. 4. 15:49
[문제] 문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다. 그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다. 풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다. 이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다. [풀이] 먼저 gdb로 열어본다. dummy 값만 체크를 해보자. 아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다. 결과는 이전 문제와 동일하게 없었다. 따라서 이 프로그램의 스택 구조를 확인해보면 이러하다. | char *variable(esp) | d..
-
Stack1 풀이System hacking training/Protostar 2018. 2. 3. 21:00
[문제] [풀이] 역시 stack0와 같이 modified 의 값을 변경해야 하는 문제인데 다른점은 if 문 참 조건이 modified 의 값이 0x61626364 이다. 또 다른점은 이 문제의 취약점은 strcpy()에 의해 bof가 발생한다는 점이다. strcpy()는 문자열의 길이를 검사하지 않는다. 정확한 계산을 위해 gdb로 열어본다. 소스 코드가 주어졌기 때문에 분석은 어렵지가 않다. 역시 esp+0x5c 가 modified esp+0x1c 가 buffer 시작 위치다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] 이전 문제와 동일하다. 따라서 페이로드를 (python -c 'print "..
-
Stack0 풀이System hacking training/Protostar 2018. 2. 3. 20:24
[문제] [풀이] main()안의 변수를 보면 int형 변수 modified와 char 64크기의 배열 buffer가 존재한다. modified의 값을 바꿀 수 있는가를 시험하는 문제인것같다. 여기서 bof 취약점을 발견할 수 있었는데 gets()는 경계를 검사하지 않는 함수가 쓰였기 때문에 bof 공격이 가능하다. bof 취약점을 이용하여 modified의 값을 바꿔주면 된다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] buffer와 modified 중간에 더미값이 없는 쉬운 문제다.(5c(hex) - lc(hex) == 64(dec)) esp+5c 에 0을 넣는것으로 modified의 위치를 알..
-
Memory 구조System hacking training/Knowledge 2018. 2. 3. 18:39
프로그램이 실행되기 위해서는 프로그램이 메모리 상에 로드 되어 메모리 안에 있어야한다. 운영체제는 프로그램 실행을 위해서 다양한 메모리 공간을 제공한다. 프로그램은 크게 instruction(명령)과 data로 구분되고, 5가지로 세분화 하면 Code/Data/BSS/Heap/Stack 영역으로 이루어져있다. Stack Heap BSS Data Code(text) 1. Code(text) 영역 : 실행할 코드가 저장되는 영역 / HEX 파일 or BIN파일 메모리 2. Data 영역 : 프로그램의 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역 / 프로그램의 시작과 함께 할당, 프로그램 종료시 소멸 3. BSS 영역 : 초기화가 되지 않은 데이터가 저장됨 (Data역역은 초기화된 데이터가 저장..
-
NEWSECU CTFfkillrra ?/CTF 2018. 1. 28. 12:43
NEWSECU-Security Research Group에서 주최한 CTF에 참가해보았습니다. Get Ready for the NEWSECU Winter CTF 2018!!2018년 겨울 NEWSECU CTF 홈페이지를 오픈합니다. 일정과 홈페이지 주소, 문의사항 접수는 아래와 같습니다.사전 가입 일정 > 지금부터 2018년 1월 27일 오후 2시까지 일정 > 2018년 1월 27일 오후 6시 ~ 1월 28일 오후 12시 (18시간) 홈페이지 > https://ctf.newsecu.kr 문의사항 접수 > hyunvis@newsecu.kr or FB 메시지 CTF 홈페이지는 크롬 브라우저에 최적화되어 있습니다상위 입상자에 대한 상품은 아래와 같습니다 :1위 > 25만원 상당의 리플 2위 > 10만원 상당의..
-
level 20. 풀이System hacking training/Hackerschool F.T.Z 2018. 1. 20. 23:02
F.T.Z 올클했습니다. 계속 bof 문제가 나오다가 FSB가 나와 고생했습니다. 먼저 로그인 후 hint 파일을 확인해보니 bof 공격이 먹지 않습니다. 이유는 fgets 함수를 보면 알 수 있습니다. 이 프로그램은 간단히 입력한 값을 다시 출력해 주는 기능을 합니다. 하지만 이 문제는 format string bug 가 존재하는데 개발자의 실수 혹은 편의에 의해 생겨난 취약점입니다. setuid는 걸려있으니 메모리를 조작하여 쉘을 띄우면 될것같습니다. [과정] 입력값을 그대로 출력해주지만 여기에 %x 라는 형식지정자를 넣어보면..! 이런식으로 AAAA 의 값을 다시 한번 출력해주는 것을 확인함으로서 더미값이 3개가 들어가 있는것과 포맷스트링 공격 가능성을 확인할 수 있습니다. FSB또한 memory ..