본문 바로가기

python exploit13

orc -> wolfman 이번 레벨도 전단 계와 별다를 건 없다 buffer hunter가 추가되었다. 이번에도 argv[2]를 이용해보자. 길이가 같은 이름으로 복사하고 gdb로 분석해보자. strcpy가 호출 된 후인 main+197에 브레이크 르 걸고 실행해보자. argv [2]의 주소는 0 xbffffdfa이다. payload를 작성해보자 Payload buffer(40) + SFP(4) + RET(4) + ' ' + NOP(100) + shellcode(25) Python으로 exploit code를 작성해보겠다. 다음 레벨인 wolfman의 쉘이 실행 되었다. orc -> wolfman password : love eyuna 2020. 9. 6.
goblin -> orc ls 명령어로 디렉터리를 확인하면 orc와 orc.c가 있다. 이번 레벨에서는 egghunter로 memset함수를 이용하여 환경변수를 초기화한다. argv [1]의 48번째는 '0 xbf'여야 한다. 이 부분은 Return Address로 Stack 주소만 허용한다. 그렇다면 buffer나 argv[2]를 이용해야 한다. buffer는 NOP Sled를 사용하기엔 공간이 많지 않으니 argv [2]를 이용하자. orc를 같은 길이의 이름으로 복사하고 gdb로 분석 해보면 main 함수의 스택 프레임을 보면 esp를 '0x2 c'만큼 뺀다. 0x2c는 10진수로 44다 소스코드를 보면 buffer밑에 int형으로 i가 있는 걸 볼 수 있다. 44는 buffer와 i가 할당된 것이다. Return Addr.. 2020. 9. 6.
cobolt -> goblin ls명령어로 확인해보면 goblin과 goblin.c가 있다. 소스코드를 보면 buffer는 16byte고 gets() 함수가 있다. gets() 함수는 문자열을 입력받는 함수인데 문자열의 길이를 검증하지 않기 때문에 Buffer overflow 취약점이 발생한다. 이전 레벨과 별다를건 없지만 입력을 표준 입력으로 받는다는 차이점이 있다. NOP Sled를 이용하여 쉘 코드를 환경변수에 등록한다. 환경변수에 등록된 쉘 코드의 주소를 C언어 코드로 작성하여 가져온다. 이제 주소를 알았으니 Python으로 exploit code를 작성하자. Payload buffer(16) + SFP(4) + RET(4) 다음 레벨인 goblin의 쉘이 실행되었다. cobolt -> goblin password : hack.. 2020. 9. 6.
gremlin -> cobolt ls명령어로 확인해보면 cobolt와 cobolt.c가 있다. cobolt.c를 확인해보면 buffer가 16byte다. 쉘 코드를 넣기에는 버퍼가 작기 때문에 환경변수를 이용하여 공격해보자. 환경변수에 25byte 쉘 코드를 NOP Sled를 이용하여 등록해주자. c언어 코드로 getenv로 환경변수로 등록한 쉘 코드 주소를 가져온다. 쉘 코드의 주소는 0 xbfffff26이다. Python으로 exploit code를 작성하자. 다음 레벨인 cobolt의 쉘 이 실행되었다. gremlin -> cobolt password : hacking exposed 2020. 9. 6.