본문 바로가기

분류 전체보기

(214)
stack6 쉘을 실행시키는 문제 if문을 보면 ret가 실행할 스택의 주소가 FF******인지 검사하고 여기에 걸리면 나가버리는 문장이다 이구간을 피하면서 쉘을 실행 시켜야하는데 5번이랑 똑같이 풀면된다 system함수의 주소는FF로 시작하지 않기 때문에 걸리지 않을 것임 구해야할 것 buffer에서 ret까지의 거리 system함수의 위치 /bin/sh의 위치 buffer에서 ret까지의 길이를 구할 때 이번 문제는 buffer도 입력 부분도 main이아닌 getpath에 있기 때문에 bp를 main의 ret가 아닌 getpath에서의 ret에 걸어야 구하기 편하다 (main의 ret에 걸어도 구할 수 있으나 이해하기 힘들다) buffer에서 ret(getpath)의 길이 80바이트 성공
stack5 입력만 받고 아무것도 없는 코드 쉘을 실행시켜야하는 문제 대략 이런 식으로 진행해야한다 ret:system에서 ret는 main문의 ret이고 ret(system)은 system 함수가 실행된 뒤 돌아올 ret이다 buffer를 가득 채워 main의 ret를 변조시켜 원래의 ret으로 가려하는 곳이 아니고 system함수로 가게해야한다 그 다음에는 중요한 부분인데 system함수를 실행시키고 돌아올 ret를 둘 공간이 필요하기 때문에 ret(system)저 부분은 빈공간으로 두고 그 아래에 /bin/sh을 삽입하여야 한다 이제 구해야 할 것은 buffer에서 main의 ret까지의 길이 system 함수의 위치 /bin/sh의 위치 system 함수의 위치를 알아내려면 일단 실행해야하기 때문에 main의..
stack4 이번 문제는 실행시킬 수 있는 곳이 보이지 않느다 그렇기 때문에 main함수의 ret를 win 쪽으로 틀어 향하게 하면 win함수를 실행 시킬 수 있다 main도 프로그램 도중에 실행되는 함수 이기 때문에 ret할 곳이 있다 이 책갈피로 가라고 하는 ret를 원래의 책갈피 주소가 아닌 win함수의 주소를 넣어주면 main이 끝나고 ret해야할 곳이 원래의 ret주소가 아닌 win을 가르켜 win함수로 가게 되는 것임 알아 내야하는 것 win함수의 위치 buffer에서 ret까지의 길이 buffer에서 ret까지 가득 채우고 ret에 win함수 주소를 넣어야함 main 함수의 ret에 break point를 건다 이 ret는 책갈피가 아닌 책갈피로 보내는 ret이다 이번에도 pattern create로 b..
stack3 이번에는 main함수가 아닌 win함수로 가야하는 문제 fp에 win주소를 넣어 실행시켜야한다 fp의 위치는 rbp-0x8 win함수의 주소는 0x401142 buffer의 크기를 구하고 buffer크기+win함수 주소를 넣으면 된다 버퍼의 크기는 72 python pwn 툴을 이용해 코드를 짠다 payload는 버퍼의 크기인7 2바이트만큼 a를 삽입하고 그 뒤에 win함수의 주소를 넣어준다 python 파일을 실행시켰을 때 성공
stack2 stack2를 바로 실행한 모습 입력을 받는 구간도 없다 환경변수 값을 변경하는 명령어 환경변수를 검사하는 구간은 통과했다 modified는 rbp-0xc buffer는 rbp-0x50 차이는 68 modified를 0x0d0a0d0a로 변조시켜야 하는데 0x0d0a는 개행문자, 줄바꿈(엔터라고 생각하면 편함)이기 때문에 그냥 넣기에는 어려움이 있다 파이썬을 이용해 입력 역시 리틀 엔디안이기 때문에 자라바꿈 변조에 성공했다고 뜬다
stack1 인자가 실행파일 포함 2개 이상 되어야하고 modified는 0x61626364로 바뀌어야 함 cmp(비교)에서 eax와 0x61626364를 비교하는데 그건 modified기 때문에 그위에 rbp-0x4가 modified의 위치 strcpy는 2개의 인자가필요 rsi(src index)에서 rdi(dst index)로 복사 즉, rdi가 buffer의 위치 buffer는 rbp-0x50 0x50-0x4만큼 채워야지 modified에 도달 할 수 있다. 'a'를 76개 채우고 0x61626364를 채우면 성공 main+79에 bp를 걸고 pattern으로 계산해도 76이 나온다 하지만 리틀 엔디안 방식이기 떄문에 \x64\x63\x62\x61(dcba)로 넣어야 한다.
stack0 buffer에 입력해서 modified값을 변조 시켜야 하는 문제 modified의 위치는 esp+0x5c test와 je 하는 구간이 보이는데 코드에서 if문 1234를 입력했을 때 eax의 값은 0 eax는 modified 'a'를 80개 넣었을 때 eax에 a의 값인 61로 가득차서 변조 되었다 modified의 위치 0xffffd2ac
[Web] Time 결과적으로 Get으로 Time을 받는데 5184000보다크거나 7776000보다 작으면 그 초를 int형으로 반환해서 sleep한 뒤에 flag를 뱉어 낸다 is_numeric은 numeric 형태면 0xdeadbeef도, 1e5도 숫자로 취급해주는 함수 5.184000e6을 int 형으로 반환하면 5초 5초뒤에 flag를 뱉어냄