목록wargame (207)
https://dreamhack.io/wargame/challenges/3/ basic_exploitation_001 Description 이 문제는 서버에서 작동하고 있는 서비스(basicexploitation001)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 "flag" 파일을 읽으세요. "flag" 파일의 내용을 dreamhack.io 풀어보겠다. 환경은 이렇다. 바로 코드를 확인해보자 gets함수를 사용하여 bof를 일으키고 ret주소에 read_flag 주소로 덮어버리도록 하겠다. 먼저 read_flag함수의 주소를 얻어보자 주소를 겟 해버렸다. 페이로드는 dummy*0x80 + sfp(4) + read_flag(4)로 날리도록 하겠다. from pwn impor..
https://dreamhack.io/wargame/challenges/2/
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