목록LEVEL (21)
FSB문제 쉘 주소 만들고 획득 .dtors주소는 main이 끝나고 실행되는 소멸자이다. .dtors주소에 쉘 주소를 넣는다. main이 끝난 후 쉘이 실행될 것이다. objdump -s -j .dtors attackme .dtors주소를 구한다. destructor주소는 4byte 더해야 한다. 즉 0x8049598 포맷 스트링을 보내면 주소 값이 나온다 12byte 떨어진 곳에 입력했던 AAAA가 있다. 환경변수 쉘 : 0xbffffefe .dtors : 0x8049598 0xfefe(65278)-출력값(40) = 65238 0x1bfff – 0xfefe = 49409 출력 값 : 4 + 4 + 4 + 4 + 8*3 = 40 (python –c ‘print “\x90”*4 + “\x98\x95\x04..
코드에 setreuid가 없다. buf : [ebp-40] dummy(44) + ret(4) setreuid가 들어간 shellcode로 환경변수를 만들어 준다. 그 후 주소를 구해서 넣어준다. password : we are just regular guys
변수 선언 부분 fflush(stdout) : 버퍼에 저장된 내용을 출력하는 함수 count가 100 이상이면 뭐하는 중이냐고 물어봄 check가 0xdeadbeef 이면 shellout 함수 실행 버퍼에 있는 값을 한바이트씩 가져옴 0x08이면 count가 감소함 default는 string 배열에 x값을 넣고 count를 증가시킨다. check : [ebp-104] string : [ebp-100] count가 감소하는 것을 이용하여 string [-4]로 check영역에 접근을 한다. 즉 0x08을 4개 넣어 주고 0xdeadbeef를 넣어 준다. password : swimming in pink
저번 문제랑 비슷한데 쉘 함수가 없어서 직접 쉘 코드 넣어주어야 함 환경변수를 이용해서 만들어주고 주소 구했음 buf : [ebp-56] *call : [ebp-16] password : why did you do it
포인터 함수 안에 들어간 printit 주소 값을 shell주소로 바꿔버리도록 하자 buf : [ebp-56] *call : [ebp-16] payload (python –c ‘print “\x90”*40 + “\xd0\x84\x04\x08”’; cat) | ./attackme password : king poetic
저번이랑 다른점은 check가 포인터 변수가 되었음 포인터 주소를 넣어주어야 함 buf : [ebp-56] check : [ebp-16] 주소도 찾았음 password : about to cause mass
check : [ebp-16] buf : [ebp-56] payload (python –c ‘print “\x90”*40 + “\xef\xbe\xad\xde”’;cat) | ./attackme 갑자기 쉬워짐 password : guess what