본문 바로가기

python exploit13

troll -> vampire ls로 디렉터리를 확인해보자 vampire와 vampire.c가 있다.  이번 레벨은 argv [1]의 길이 제한은 없어졌지만 47번째 0xff를 검증한다. 엄청나게 많은 크기를 입력해야한다는 뜻이다. argv[2]를 이용해 공격 해보자. vampire와 같은 길이의 이름으로 복사 후 gdb로 분석해보자. strcpy() 함수가 호출 된 후인 main+140에 브레이크를 걸고 argv[2]에 10만 만큼주고 실행해보자. argv[2]의 주소는 0xbffe7794다. 이제 주소를 알았으니 공격 해보자 주소는 중간 조금 지나서인 0xbffe77d0으로 넣자 Payload NOP(40) + SFP(4) + RET(4) + " " + NOP(100000) + SHELLCODE 쉘이 실행되있다. 이제 Pytho.. 2020. 9. 13.
orge -> troll ls로 디렉터리를 확인하면 troll과 troll.c가 있다. 이번 레벨은 check argc + argv hunter이다. argv [1]의 길이를 48로 제한하고 마지막엔 argv [1]을 0으로 초기화시킨다. 그렇다면 심볼릭 링크로 쉘 코드를 argv [0]에 링크를 걸고 공격해보자. troll과 같은 길이의 이름으로 복사한 후 0x2f가 없는 쉘 코드를 사용하여 링크를 건다. 0x2f는 아스키 코드로 / 이기 때문에 디렉터리 구분자로 인식되기 때문에 0x2f가 없는 쉘 코드를 사용한다. gdb로 분석하면 argv[1]를 초기화하고 난 후인 main+317에 브레이크를 건다. argv [1]에서 48로 길이를 제한하고 0 xbf를 검증하기 때문에 0 xbf를 주고 실행한다. 이제 argv[0]의 주.. 2020. 9. 12.
darkelf -> orge ls 명령어로 디렉터리를 확인해보면 orge, orge.c가 있다. 이번 레벨에서는 전 레벨과 달라진 점은 check argv [0]이 추가되었다. argv [0]의 길이를 77로 검증하는 부분이다. orge파일을 길이가 같은 이름으로 복사한다. 이제 argv[0]의 길이를 맞추고 argv [2]의 주소를 이용하여 공격해보자. gdb는 실행 시에 절대 경로로 실행되기 때문에 분석할 때 길이를 맞춰서 분석한다. strcpy() 함수가 호출된 후인 main+283에 브레이크를 걸고 실행시킨다. 이제 argv [2]의 주소를 찾아보자 argv[2]의 주소는 0 xbffffda6이다. argv [2]의 주소를 알았으니 Python으로 exploit code를 작성해보자. Payload buffer(40) + S.. 2020. 9. 7.
wolfman -> darkelf ls명령어로 확인해보면 darkelf, darkelf.c가 있다. 소스 코드를 확인해보면 egghunter + buffer hunter + check length of argv [1]이다. 이전 레벨과 별다른 점은 없다 다만 argv [1]의 길이를 48byte로 제한한다. argv [2] 주소에 쉘 코드를 넣고 공격해보자. darkelf파일을 같은 길이의 이름으로 복사 후 gdb로 분석해보자. strcpy() 함수가 호출된 후인 main+245에 브레이크를 걸고 argv [1]가 48byte로 제한되어있으니 '0 xbf'를 48byte, argv [2]에 NOP Sled 기법으로 쉘 코드 길이만큼 맞추어 실행한다. argv [2]의 주소는 0 xbffffdde다. 이제 Python으로 exploit을 .. 2020. 9. 7.