Pwnable(30)
-
basic_exploitation_000 -Dreamhack-
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0; } 문제의 소스코드다. 취약점을 찾을 수 있는 곳은 scanf 부분이다. buf을 0x80 크..
2023.02.19 -
Protostar -stack 4 -
#include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { char buffer[64]; gets(buffer); } 버퍼를 64 바이트로 받아온다. 문제는 gets 함수를 통해 받아오기에 취약점이 발견된다. 이를 통해 RTL 방식의 공격기법으로 ret 값을 win 함수주소로 변경하여 해당 문자열을 출력하게 만들면 될 것이다. 먼저 Buffer 와 Ret 간의 거리를 계산하기 위해 Pattern을 생성하고 Ret에 중단점을 걸어 거리를 구할 수 있을 것이다. Main + 22 에 중단점을 걸어 ret 함수에서 진입하기전 까지 길이를 구..
2023.02.13 -
SuNiNaTas_SystemHacking-Game 16
wireshark를 통해 열 수 있는 패킷 탐색 기록 파일을 준다. 실행시키면 다음과 같다. 위에서 써니나타스 홈페이지에서 로그인했던 기록을 찾아 아이디와 비밀번호를 찾아내면 된다. 우선 http 와 통신했던 기록만 찾기위해 필터링 기능을 통해 검색해보자. 이중에서 로그인할 기록을 찾아야한다. 대표적으로 GET 방식이나 POST 방식으로 받아올텐데 이것들만 검색해서 찾아내보자. POST 방식으로 검색한 패킷들 목록이다. ( // GET 방식으로 찾아낸 패킷들의 특이점은 없었다 ) 대략 5개정도 있으며 이를 좀 더 상세히 확인해보면 SuNiNaTas 와 통신했던 걸 확인할 수 있는데 위에 패킷 5개 모두 써니나타스 사이트와 데이터를 주고 받았다. 쿠키 값을 보고 하면 위와 같이 Encode 된 방식으로 H..
2023.02.03 -
Protostar stack-3 |실행 흐름 변조|
문제의 소스코드는 다음과 같다. #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { volatile int (*fp)(); char buffer[64]; fp = 0; gets(buffer); if(fp) { printf("calling function pointer, jumping to 0x%08x\n", fp); fp(); } } buffer을 get 방식으로 받아오고 if 문을 통해 fp 값이 0이 아닐때 문자열을 출력하고 win 값이 어쩌고 저쩌고 되면 성공 문자열을 출력시키는 거 같다. 먼저 buffer 값이 64바이트..
2023.02.03 -
Protostar stack-2
먼저 문제 소스코드는 다음과 같다. #include #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; char *variable; variable = getenv("GREENIE"); if(variable == NULL) { errx(1, "please set the GREENIE environment variable\n"); } modified = 0; strcpy(buffer, variable); if(modified == 0x0d0a0d0a) { printf("you have correctly modified the variable\n"); } else { printf(..
2023.02.01 -
Pwnable.kr - 4 - flag
문제는 다음과 같다. wget -i http://pwnable.kr/bin/flag wget을 통해 먼저 문제 파일을 다운로드 받았다. 문제를 보면 알 수 있듯 패킹이 되어 있다 나와있다. 대표적인 패킹 방식으로 UPX 패킹이 있는데 확인 절차를 들어가지 않고 바로 upx 툴을 활용하여 언패킹을 시도 해봤다. 언패킹이 되는 것을 확인할 수 있으며 이를통해 upx 방식으로 패킹이 되어있다는 사실을 알 수 있다. 메인함수인데 오른쪽에 대놓고 flag 위치를 알려주는 걸 확인할 수 있다. main 함수에서 어떠한 일이 발생하길래 대놓고 flag를 나타내주는 걸까 싶어서 IDA를 통해 디컴파일을 시켜봤다. ---> 글씨가 너무 작아서 직접 확대 해보자면... { char *dest; // [rsp+8h] [rb..
2023.01.26