목록읭? (68)
R4mbb

예 또는 아니요 문제다. ㅇㅂㅇ 실행해보고 ida로 열어보자. if ( v10 == v6 * v5

프로그램에 PIE 보호기법이 걸려있는 문제인 것 같다. 먼저, PIE에 대해 알아보자. PIE (Position Independent Executable) : 위치 독립 실행파일, 실행할 때마다 매핑되는 주소가 어디든지 상관없이 실행되는 파일로 매핑되는 주소가 매번달라 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다. 먼저, 코드를 확인해보자. PIE 보호기법에 의해서 함수의 base 주소는 계속 바뀐다. 때문에 함수의 offset을 이용하면 될 것 같다. 먼저, welcome에서 ret위치를 구해보자. 입력받은 위치로부터 22byte에 ret주소가 존재한다. 이번엔 welcome과 j0n9hyun 함수의 offset을 구해보자. welcome = 0x909 ..

홍ㅎ항ㅎ항항 오프셋 관련 문제인 것 같다. IDA로 코드를 확인해보자. print_flag 함수가 존재한다. 이 함수와 select_func()를 활용하면 될 것 같다. 먼저, select_func 함수를 잘 보자. [스택구조] dest[42byte] | ??? | v3[12byte] | ??? | SFP[4byte] | RET[4byte] 이렇게 구성되어 있다. strncpy 함수를 보면 src의 31byte만큼 dest에 복사를 한다. 42 - 12 = 30 이다. 1byte만큼 더 복사를 할 수 있다. v3에 1byte만큼 덮어씌는 것이 가능해진다. 그렇다면 이 1byte를 이용해서 v3를 print_flag주소로 바꿔야한다. 먼저, two함수의 주소와 print_flag함수의 주소를 알아보자. t..

심플 오버플로우 문제다. IDA로 코드를 확인해보자. buf의 메모리 주소를 출력하고 buf에 입력을 받는다. gets에서 BOF가 생긴다. 우분투에서 실행해보자. buf 에 입력받을 때 쉘코드를 넣고 ret위치에 buf 주소를 넣고 실행하면 될 것 같다. buf에서 ret까지의 거리를 구해보자. 0xffffd08c - 0xffffd000 = 8c (140) shellcode + dummy + buf_addr 이런식으로 BOF하면 될 것 같다. 익스를 짜보자. 성공했다. 플래그는 HackCTF{y0u_d1d_7h3_45516nm3n7_5ucc355fully!} 이다.

x64 환경 BOF 문제이다. ida로 코드를 확인해보자. buf의 주소를 출력해주고 buf의 입력을 받는다. buf의 ret까지의 거리를 peda로 확인해보자. 실행을 해보면 buf의 주소와 입력을 받는다. get 부분에 bp를 걸고 ret을 찾아보자. 입력받은 rsp+27952(6D30)를 확인해주면 +8byte 위치에 ret주소가 들어가있다. 쉘코드를 입력해주고 rsp+27960의 ret 위치에 buf의 주소를 넣으면 BOF가 될 것이다. 익스를 짜보자. 쉘코드는 64bit 쉘코드를 사용하였고, 계속해서 바뀌는 buf의 주소를 받아와 처리하였다. 플래그는 HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f} 이다.

64비트 BOF 문제인 듯 하다. ida로 코드를 확인해보자. 저 함수를 실행하면 쉘이 따질 것이다. 해보자! 1. s 부터 ret까지의 거리는 0x120이다. 2. callMeMaybe 주소(8byte)로 36번 도배하자. 익스를 짜보자. 성공적으로 익스가 되었다. 플래그는 HackCTF{64b17_b0f_15_51mpl3_700} 이다.

BOF 문제다. 파일을 다운받고 한번 실행해보자. 두 개의 입력을 받는다. IDA로 코드를 확인해보자. s 변수는 main함수 내에 있고 name 변수는 보이지 않는다. 전역변수다. name의 주소는 0x0804A060 이다. 이번엔 gdb로 prob1을 확인해보자. 음.. gets에 입력되는 부분에 bp를 걸고 어디에 입력되는지 확인해보자. 이렇게 두 개의 변수에 각각 AAAA와 AAAABBBBCCCCDDDD를 입력했다. 스택값을 확인해보자. s 변수에는 0xffffd164 부터 입력이 됐다. 그런데 빨간 박스 부분을 보니 메인함수 ret 때 호출이 되는 주소인 것을 확인할 수 있었다. 그렇다면 s 변수에서 입력받을 때 0xffffd17c 에 쉘코드를 넣어 실행시켜주면 될 것 같다. SCENARIO 1..
1. NX-Bit ( NX bit, Never eXecute bit, 실행 방지 비트 ) - 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다. - NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세스 명령어가 그 곳에 상주하지 않음 으로써 실행되지 않도록 만들어 준다. > 인텔 : XD-bit (eXecute Disable) = NX-bit 2. DEP (Data Execution Prevention) - 마이크로소프트 윈도우 운영체제에 포한된 보안기능이고, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술이다. - DEP의 두 가지 모드 > 하드웨어 DEP : 메모리에 명시적으로..