본문 바로가기

시스템 해킹/LOB15

xavius__미해결__Remote BOF local bof만 하다가 remote bof가 무엇인지 모르는 분들?-나 local bof의 경우에는 해당 서버의 계정이 있을 때 서버에 접속하여root 권한 아니면 자신보다 더 높은 권한을 얻을 수 있게 된다.그런데 해당 서버에 계정이 없을 때는지금 말하는 remote attack을 하면 된다.remote bof는 서버에서 제공하는 취약한 서비스 프로그램을exploit하여 해당 서비스를 실행하는 데몬의 실행권한(쉘)을 가져올 수 있게 된다. 그럼 xinetd로 작동하는 프로그램에 대해서 remote bof를 해보도록 하겠다. 데몬의 두가지 실행 모드1. xinetd 수퍼데몬에 의해 제어되는 서비스 데몬2. 독립적으로 실행되는 Standalone 환경의 서비스 데몬 xinetd 수퍼 데몬의 서비스 데몬.. 2016. 11. 1.
nightmare 버퍼 앞에도 지우는 것은LD_PRELOAD의 사용을 막기 위해서이다.스택도 못쓰고, 바이너리(?)도 못쓴다.fgets를 이용하자fgets는 버퍼를 이용한다.그 버퍼를 찾기 위해 stdin을 까봤다. fgets 실행전 fgets 실행후 0x40015000에 입력값이 버퍼로 쌓인다는 것을 알 수 있다. 2016. 10. 31.
giant argv[1][47]=\xbf이면 안된다!! argv[1][47]=\x40이어도안된다!! libc함수를 이용하지 못한다. buffer+sfp hunter가 있어서 buffer+ebp까지 쭉 지워진다. RET부분에 ret있는 곳의 주소를 넣는다. 그렇다면 그 주소로 eip가 이동그 다음 4 byte AAAA넣으면, AAAA로 eip 이동이 AAAA를 쉘코드 있는 부분으로 넣어주면 되겠다쉘코드가 들어가는 주소를 찾자 2016. 10. 31.
succubus 40칸 버퍼 + 4칸 SFP + RET: strcpy주소 +AAAA+(버퍼+48byte의 주소)+(argv[2]의 주소) argv[2]: system함수 주소+BBBB+/bin/sh의 주소 main함수의 ret부분에서 strncpy가 실행되는데,그 인자는 버퍼+48byte의 주소와 argv[2]의 주소이다버퍼+48byte에 argv[2]가 들어가고 AAAA가 그 부분이다.AAAA는 strcpy의 ret부분이므로,이때 system함수가 실행되는 것이다. AAAA의 주소: 0xbffffb00argv[2]의 주소: 0xbffffc8e 2016. 10. 31.
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.