워게임200 LOB - darkknight(RTL) RTL인 것 같습니다만... cp bugbear tmp gdb tmp b*main r AAAA p system ☞ system 함수의 주소를 찾는다. ☞ 0x40058ae0 이와 같이 코드를 짜서 system 함수에 존재하는 /bin/sh 문자열의 주소를 구한다. 스택 구조는 buffer[40] ---------------------- sfp ---------------------- ret ☞ system 함수 주소 ---------------------- argc ---------------------- argv ☞ /bin/sh 문자열 주소 이므로 2021. 8. 5. LOB - golem(SFP overflow) 처음으로 다른 함수를 호출하는 구성 방식이당 strncpy로 막아둔 것 같은데 buffer가 40인데 41은 모지..?? test 해봤다. test.c 이제 인자를 A 40개 줬을 때와, A 40개 + B 1개 줬을 때를 비교할 것이다. >> 결과 41개를 입력하면 뒤에 쓰레기값이 온다.. 뭘까... 암튼 41개까지 입력할 수 있으므로 problem_child의 sfp의 마지막 값을 조정할 수 있겠군 이런 공격 기법을 SFP overflow라고 한다 [ 참고 : https://d4m0n.tistory.com/76 ] 어셈 까보면 ------------------- buffer 주소 ☞ problem_child ------------------- buffer[40] ☞ problem_child ------.. 2021. 8. 4. LOB - skeleton 스택이 싹 지워진다. 그래서 RTL인가? 했는데 argv[1][47] == "\xbf" 여야한다는 조건 덕분에 RTL으로 해결할 수 없는 것 같다. 결국 롸업을 슬쩍 봤다. LD_PRELOAD를 이용한다고 했다. 그래서 LD_PRELOAD 구글링 해서 memset 함수를 후킹해서 아예 bash 쉘을 띄우게 하려고 했는데 안됐다... 이유는 setuid가 걸려있기 때문이다! setuid가 걸려있으면 LD_PRELOAD=./~~.so ./실행파일 argv 를 해도 후킹되지 않는다. ☞ 직접 경험해보는 것이 좋다. ld_preload를 이용해서 파일을 실행할 때 core dump 파일이 만들어지도록 시도해서 core dump파일을 분석했다. hook.c ☞ (NAME = )"A"*250+".so" // so .. 2021. 8. 3. LOB - vampire(심볼릭링크) argv[1] 길이는 48까지.. 딱 ret까지 덮을 수 있넹 buffer, env 지워버리기.. argv도 지워버리기.... 내가 기억하기론 0xc0000000에 가장 가까운 곳에 argv가 생기는 걸로 아는데, 여기 말고도 처음 main 함수 들어가기 직전에 파일 이름이 한 번 더 스택에 올라간다고 알고 있다. 정확히 vampire.c의 마지막 부분인 //ultra argv hunter! 이 부분이 어느 부분( or )을 지우는 지 알아봤다. 위와 같은 코드의 test.c를 만들었다. gcc -o test test.c 로 컴파일하고, gdb test를 통해 값을 확인했다. 이를 통해 문제에서 지우는 argv 값은 main 함수 시작하기 전에 들어가는 파일이름을 지워버린다는 것을 알 수 있다. 그렇다면.. 2021. 8. 1. LOB - troll (환경변수) ret할 주소가 지금까지 0xbfff**** 였던 것으로 기억하는데, bf(O) ff(X) __ __ 로 ret 해야 한다... 한참을 헤맸는데, 결국은 "환경변수" 였다. (*) 내가 헤맨 이유는 cat /proc/self/maps 로 확인되는 스택 주소보다 낮은 주소는 스택이 쌓일 수 없다고 생각한 점. 그래서 힙으로 풀어야 하는 것 아닌가 착각했던 점.. (***) 하지만 저 범위는 처음에 할당받는 영역이 저만큼이라는 것이고, 파일이 실행되며 cat /proc/self/maps에서 확인되는 스택 주소보다 더 낮은 범위까지 접근할 수 있다. 그렇다면, export X=$(python -c 'print "\x90"*0x10000 + "쉘코드(나의 경우 25bytes)"') ☞ 환경변수 등록 0x1000.. 2021. 8. 1. LOB - darkelf 1. 환경 변수 안 됨 2. argv[1] 안 됨 3. 심볼릭 링크를 쓴다면 파일 이름 길이가 77이어야 함. 4. buffer에 쉘코드 안됨 strlen(argv[0])을 정확히 파악해보고 싶다. 이렇게 짜서 결과값을 확인해봤다. gcc -o test test.c 만약 ./test로 실행시켰다면, 결과는 6이 나왔다. 또한, mkdir tmp; cp test tmp/; ./tmp/test로 실행시켰다면, 결과는 10이 나왔다. 실행시킬 때 쓰이는 글자수(agrv[1] 제외하고) 인가보다! 그렇다면, 여기서 꼼수를 생각할 수 있다. strlen("./폴더/쉘코드") == 77 이어야 하는 거니까, ./(2) 폴더 /(1) 쉘코드(35) **** 여기서 쉘코드는 슬래시(0x2f) 없는 걸로 ☞ 구글링하면 .. 2021. 7. 31. 이전 1 ··· 25 26 27 28 29 30 31 ··· 34 다음