반응형 Security82 pwnable.kr [Toddler's Bottle]->[passcode] [passcode] 코드를 보면 main -> welcom -> login 순으로 흘러간다. welcome에서 name[100]에서 입력받은 값을 출력하고 login()에서 2개의 값을 입력받아 출력하는데 scanf()를 보면 변수에 &연산자가 없다. 또한 fflush(stdin);가 있다. scanf()의 인자에 &가 없으면 받은 인자를 주소로 인식한다. 96바이트 뒤에 주소를 덮어 씌울수 있다. 그렇다면 원하는 곳의 4바이트를 입력할 수 있다. 또한 fflush의 got(exit())를 오버라이팅시키고 system(“/bin/cat flag”)로 점프하면된다. 우선 exit주소를 보면 0x0804a018이다. 그리고 system(“/bin/cat flag”)주소를 보면 0x080485e3이다. 페이로.. 2021. 8. 11. pwnable.kr [Toddler's Bottle]->[flag] [flag] flag파일을 다운받는다. 우선 hex값을 보면 ELF파일에 UPX로 패킹 되어있는걸 확인할 수 있다. 우선 언패킹을 해준다. flag가 rdx에 있다. b *main+39 해주고 rdx를 보면 2021. 8. 11. pwnable.kr [Toddler's Bottle]->[bof] [bof] bof문제이다. func에 넣은 인자 deadbeef를 를 오버플로우를 통해 cafebabe로 바꿔주면 된다. gdb로 확인해보자. 스택의 구조를 대략 살펴보면 0xdeadbeef ret sfp ? overflow ? 로 있을것이다. main +29 에서 ebp-0x2c (44)로 입력받은 인자를 저장하는 것을 알 수 있다. 그렇다면 0xdeadbeef ret4 sfp4 dummy12 overflow32 로 스택 구조를 알 수 있다. payload를 짜보면 52byte + cafebabe 이다. 2021. 8. 11. pwnable.kr [Toddler's Bottle]->[collision] [collision] 소스코드를 보면 20바이트의 argv[1]을 주고 인자의 값과 hashcode(0x21DD09EC)를 맞게 하면 풀리는 문제이다. 여기서 check_password(){}함수에서 argv[1]을 가지고 장난을 친다. argv[1]을 5번 더한 값을 반환해주는 함수이다. 인자를 포인터로 받아와서 4바이트 단위로 계산한다. for문에서 5번 더하므로 hashcode / 5의 값을 넣어 주면 되는데 계산해보니 마지막에 4를 더해줘야한다. 0x6c5cec8 (113626824[16]) 4번과 0x6c5cecc 1번을 넣어주면 된다. 2021. 8. 11. pwnable.kr [Toddler's Bottle]->[fd] [fd] ssh fd@pwnable.kr -p2222 fd에 setuid가 걸려있고 실행권한이 부여되어있다. fd.c파일을 확인하면 다음과 같다. read(“파일디스크립터”, “버퍼”, “버퍼의 크기”) 인데 여기서 fd가 0 = stdin 1= stdout 2 = stderr 이다. 그럼으로 fd 가 0이되어야 입력값을 받을 수 있다. fd는 atoi( argv[1])-0x1234로 정의 되는데, atoi는 10진수 정수 문자열을 정수로 리턴한다. 그러므로 argv[1] - 0x1234의 값이 0 이되면된다. 0x1234(16) = 4660(10) 2021. 8. 11. Fake EBP Fake EBP EBP를 속이는 기법 입니다. ret 영역을 침범하여 입력값을 덮을 수 있을 때 사용합니다. (이 기법은 주로 ret까지만 덮어쓸 수 있고 특정 영역에 필터링 될 때 유용한 기법이다.) 이 공격의 핵심은 leave-ret 입니다. sfp를 조작하고, 처음 호출하는 ret 주소에 leave-ret 가젯을 실행시킴으로써 원하는 코드를 실행시킬 수 있습니다. 즉 sfp에 buf-4의 주소를 넣어주어 ebp가 buf-4로 가게하여 buf에 저장된 쉘코드가 온전하게 실행될 수 있도록 해줍니다. leave mov esp, ebp pop ebp ret pop eip jmp eip ret에다가 leave-ret가젯을 넣음으로서 총 2번 leave-ret 이 일어납니다. 먼저 처음 leave가 수행되면서.. 2021. 8. 10. 이전 1 2 3 4 5 6 7 8 ··· 14 다음 반응형