본문 바로가기

시스템 해킹100

zombie_assassin RET부분에 각 함수의 주소를 넣어 주면 된다.그리고 마지막 MO에서 system()의 인자로 /bin/sh/을 넣어주어야 한다! 코어분석 2016. 10. 31.
assassin argv[1][47]=\xbf이면 안된다. argv[1][47]=\x40이면 안된다. strncpy를 써서 argv[1]의 48자만 buffer에 넣어요! FAKE EBP를 쓰자!ebp부분에 buffer-4 ret부분에 lev-ret 가젯을 넣는다. 그러면 argv[2]을 통해 쉘코드를 넣을 건데,,argv[2]=AAAA+쉘 주소+NOP+쉘코드 ebp에 들어가는 buffer-4가 AAAA이 부분이 되는 것이다. 2번째 방법system 함수 이용 system함수주소+AAAA+/bin/sh/주소 +A*28+"buffer-4byte주소"+"lev-ret gadget부분하지만, 주소가 정확히 맞지 않는다. 2016. 10. 30.
bugbear 0x40018000+0x00091d48=0x400a9d48 실제로도, ret==0x400a9d48이어야 한다.execve함수의 RET부분에system 함수의 주소를 넣는다. /bin/sh의 주소를 알아내었다. 44버퍼+ execve주소+system함수주소+exit주소 or AAAA+/bin/sh의 주소 이때 전체에 " "을 붙여주자 \x0a를 \00으로 인식하기 때문이다!!!!!하..이것때문에 엄청 삽질 2016. 10. 30.
darkknight argv[1][47]은 \xbf이면 안된다!!!! libc함수 system을 이용하자!system 함수의 주소는 0x80482e8 ret에 0x80482e8을 넣는다. 오잉?? system함수의 주소는0x40058ae0이었다!!main()함수를 disassemble 했을 때 system호출 지점은 0x80482e8이지만실행 시점에 공유 라이브러리를 로딩한 후의 system()함수의 시작점을 찾아햐 한다.따라서 실행 후 system()함수의 address를 찾아야 한다. system 함수에서도 이전함수의 EBP RET system함수인자 esp가 바뀌고, ebp는 안 바뀌는데??라는 의문을 가질 수 있지만,새로운 함수에서 처음에 mov esp ebp덕분에esp값을 ebp에 넣는다. 이제 system함수의 .. 2016. 10. 30.
golem argv[1]의 41자를 복사해서 buffer에 넣는다. 이건 39자 A 이건 40자 A 이건 41자 A sfp가 바뀌게 되는다. 마지막에 lev ret에서 무슨 일이 이루어지나?? lev = mov ebp esp pop ebpret = pop eip esp에 바뀐 ebp가 들어가고,pop이 이루어지니 esp+4 byte가 된 다음,그 부분이 eip에 들어 가게 된다!!프로그램 실행의 흐름을 바꿀 수 있게 된 것이다. 0xbffffd74에 A가 들어가기 시작했으니,,0xbffffd70을 새로운 ebp에 넣으면,,, eip에 0xbffffd74가 들어가 쉘코드가 실행 되는것!!! 계속 바뀌는 빡치는 현상이 발생했지만,,brute forcing을 하니 뚫렸다! 기분 짱 좋다! 하핫,,,내 풀이는 이상한 풀이.. 2016. 10. 30.
skeleton argv[1][47]==bf이어야 한다. stack destroyer이 부분에서buffer부터 0xbfffffff까지 RET부분을 제외한 나머지 부분은 모두 초기화 된다.buf보다 주소가 낮은 곳을 공격해야 된다.그곳이 바로! 공유라이브러리 이다. 우리는 LD_PRELOAD라는 환경변수를 이용할 것인데,LD_PRELOAD는 특별한 환경변수이다. 일반적으로 프로그램을 실행시키면 일반적인 공유 라이브러리를 로드한다.하지만 LD_PRELOAD를 정의해주면 프로그램 실행시 LD_PRELOAD에서 정의해준 라이브러리를 로드하게 된다.저 공유 라이브러리 영역에 우리의 데이터를 올릴 수 있게 된다. 프로르램이 동작할 때 메모리에 실행한 프로그램만 로드하는게 아니라 프로그램 내부 사용하는 함수들도 실행을 해야되서 전부.. 2016. 10. 30.
vampire egghunter있으니까 에그쉘은 쓸 수가 없어argv[1][47]==\xbfargv[1]의 길이 2016. 10. 30.
troll argv[1][47]=\xbf이어야 한다.argv[1][46]=\xff이면 안된다. 스택의 값을 밑으로밑으로 내려주어야 한다.argv인자값의 길이를 엄청 크게 준다. 그래서 argv[1]의 길이를 엄청나게 크게 주었다. 이렇게 esp가 밑으로 내려옴을 알 수 있다. 2016. 10. 30.
orge buffer hunter로 buffer[]는초기화 된다argc==2이어야 한다egghunter로 에그쉘은 사용할 수 없다argv[1][47]=\xbf 이어야 한다.argv[1]의 길이는 계속 argv[0]의 주소가 바뀌어 할 수가 없었다. segmentation fault 계속 떠서 엄청 빡침ㄷㄷ 결국, 환경변수 부분에서 지워지지 않는 부분을 찾아서 그 부분을 이용했다.환경변수 부분은 주소가 바뀌지 않는다는데...??스택의 윗부분이기 때문이라고 한다. 왜 그런지 정확히 이해는 안간다..... 쉘코드가 포함된 파일 이름으로 troll을 심볼릭 링크를 시켜준다.이때 , 쉘코드는 \x2f가 포함되지 않은 쉘코드 \xd9\xc5\xd9\x74\x24\xf4\xb8\x15\xc3\x69\xd7\x5d\x29\xc.. 2016. 10. 29.