Security/Pwnable (6) 썸네일형 리스트형 [Pwnable] dreamhack Basic_BOF #2 문제 풀이 IDA 를 이용해 열면 위와 같은 그림이 나오고 이를 F5 키를 사용해 코드 형태로 바꿔주면 다음과 같은 main 부분이 나온다. S 라는 문자형 데이터가 존재하고 v5 라는 포인터와 fgets 를 이용해 133byte 까지 받도록 하는 것이 가장 눈에 띈다. 그리고 이 코드 내에 존재하는 함수들을 다 살펴 보았는데 Shell 함수가 눈에 띄었다 이 함수를 이용해 권한을 획득하면 되겠다고 감을 잡았고 shell 함수를 어셈블리어로 보았을 때 시작 주소가 804849B 라는 것을 확인 할 수 있었다 그 후 스택 구조를 살펴 보았는데 위와 같이 s 와 var_c(v5)의 거리 차가 128byte 라는 것을 이용해 128byte 만큼 아무 문자를 집어 넣고 shell 함수를 실행하면 되겠다는 생각을 가졌다. .. [Pwnable] dreamhack basic_exploitation_000 문제 풀이 먼저 문제를 살펴보면 아무런 보호기법이 없다는 것을 확인 할 수 있고 canary와 같은 까다로운 보호기법을 생각하지 않아도 된다는 정보를 얻고 시작한다. 소스코드를 살펴보면 다음과 같은데 일단 main 안쪽부터 살펴보면 buf가 0x80이란 크기로 할당 되어 있고 initialize 함수 실행 후 printf를 이용해 현재 buf의 주소값을 프린트한 후 scanf를 이용해 buf에 최대 141바이트까지 입력 받는다는 것을 알 수 있다. 여기서 주목 해야 할 점은 buf 의 크기가 0x80, 즉 128 바이트이지만 scanf 로 받는 최대 바이트의 크기는 141 바이트라는 점이다. 이점을 이용해 bof 를 발생 시킬 수 있다는 점이 이 문제의 핵심 포인트이다. 추가로 다른 initialize 와 alar.. [Pwnable] HackCTF ROP 문제 풀이 이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 ROP문제이다. 문제에서 준 파일을 열어보면 rop와 함께 libc.so.6이 함께 들어있는걸 확인할 수 있는데 이 라이브러리 소스를 이용해 상대주소인 offset 이용해 함수의 위치를 구하라는 의미인거 같고 문제의 제목인 ROP를 생각하며 풀어야 겠다. 접속하면 입력을 받고 Hello, World!를 출력하고 종료되는 모습을 확인할 수 있다. 보호기법은 NX-bit가 적용되고 있고(쉘코드 사용x) 부분적으로 RELRO가 적용되고 있다. 추가적으로 libc.so.6의 보호 기법을 확인해 보면 위와 같다. main ida를 이용해 main을 살펴보면 위와 같다. vulnerable_function vulnerabl.. [Pwnable] HackCTF Gift 문제 풀이 이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 Gift문제이다. 보호 기법은 NX-bit가 적용되어 있다. 파일을 실행해 보면 위와 같이 입력을 2번 받는다. ida로 main을 분석해 보면 - binsh과 system변수의 주소 값이 출력 - fgets로 s변수에 128bytes까지 표준입력을 받음 - printf함수로 s변수 출력(%c, %d와 같은 포맷 지정자 지정이 없으므로 FSB취약점 존재) - gets함수로 표준 입력을 받음(bof취약점 존재) 이 파일을 실행 시킬때 마다 system의 주소값이 변경되는 것으로 보아 ASLR이 적용되어 있고 ASLR과 NX-bit를 우회 할 수 있는 ROP기법을 이용해 exploit 하는 문제 같다. payload.. [Pwnable] HackCTF Poet 문제 풀이 이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 Poet문제이다. 문제를 보고 일단 실행시켜 보았다. 위와 같이 시와 시인을 적으라는 문구가 출력되고 입력을 해야한다. 그리고 1,000,000점을 획득해야 한다는 문구를 보니 점수를 많이 획득해야 한것 같다. gdb-peda에 있는 checksec을 이용해 poet파일의 보호 기법을 검색해 보았더니 NX-bit 보안기법만 존재 했다. main main함수를 Ida를 이용해 뜯어보면 위와 같은 그림이 나오고 크게 get_poem, get_author, rate_poem, reward 함수가 보인다. main함수 내부를 살펴보면 dword_6024E0이 1000000이 되면 break되고 reward인 flag를 .. Dreamhack-Memory Corruption - C(1) 본 포스팅은 Dreamhack사이트의 Memory Corruption - C(1)를 제가 공부 하기 좋게 요약 한 것 입니다. OOB(Out of Boundary) : 버퍼의 길이 범위를 벗어나는 인덱스에 접근할 때 발생하는 취약점. 이는 올바르지 않은 값이 버퍼의 인덱스로 사용될 경우 발생한다. int형 변수 idx를 입력받은 후 이 값을 크기가 10인 int형 배열 buf의 인덱스 값으로 넣어 출력한다. 위 문제에서 buf의 크기가 10이므로 buf는 0 = 10)과 같은 경계 검사 구문을 추가하면 된다. -pow(2, 31)을 입력해 13~15번째 코드에 의해 pow(2, 31)로 바뀌게 되고 int형의 정수 표현 한계 때문에 결국 -pow(2, 31)이 된다. -pow(2, 31) = -21474.. 이전 1 다음