[LOB] goblin
WriteUP
접속 후 ls -l로 디렉터리 및 파일을 확인한 후 orc.c 파일을 열어 소스코드를 확인함음... 뭔가 좀 복잡하지만 해석을 해보면 40바이트의 버퍼와 i 가 있고 인자 값으로 하나 이상의 값을 넣어야 한다.또한 환경변수를 사용하지 못하도록 되어있고 입력값의 인덱스[47]번(48byte)부분 의 값이 \xbf여야 한다.흠.. 복잡해 보이지만 생각해보면 strcpy를 이용해 버퍼오버플로우를 일으켜 버퍼에 쉘코드를 삽입 후 sfp까지 더미로 채우고 ret부분에 버퍼의 시작 주소를 넣으면 된다!!라고 추측하였다. 그럼 일단 버퍼의 시작 주소를 구해야하는데 이번엔 core dump를 이용하였다.core dump를 사용해서 확인해본 결과 우리가 입력한 값이 버퍼의 시작 주소로 잘 들어간 것을 확인하였고버퍼의 시..
[LOB] cobolt
WriteUP
cobolt로 접속 후 ls-l을 확인 후 goblic 실행파일과 goblic.c파일을 확인하였다 그 후. c파일을 열어 프로그램을 소스코드를 확인하였다해당 소스코드는 16바이트의 버퍼가있고 gets함수를 이용하여 입력값을 검증하지 않고 계속해서 입력받으며printf를 사용하여 화면에 출력하는 프로그램이다. buffer가 16바이트이므로 쉘 코드는 들어가지 않을 거 같다.그럼 이전 문제와 동일하게 환경변수를 이용해서 풀어나갈 수 있을 거 같다. 일단 진행을 위해 tmp디렉토리로 프로그램을 이동 후 작업을 해나갔다.해당 파일을 gdb로 확인하였을 때 dummy값은 없는 거 같다. 그럼 바로 환경변수를 만들어보았다환경변수의 주소값을 얻기 위해 프로그램을 작성하였다. (저기 /n이 아니라 \n이이다!! 오타가..
내 버퍼가 흘러넘친다!!
WriteUP
HackCTF 내 버퍼가 흘러넘친다!! 이번 문제의 프로그램을 동작을 확인하기 위해 실행시켜보면 name과 input에서 입력을 받는 프로그램이다. 흠.. 일단 gdb로 까 보자 해당 프로그램을 대충 분석해보면 0x14(20byte)의 공간을 스택에 할당하고 read함수와 gets함수로 입력을 받는다 read함수로 입력받는 값은 name변수로 전역 변수임을 알 수 있다 그렇다는 건 스택이아닌 bss영역에 존재한다. 또한 gets에서 버퍼오버플로우를 일으킬 수 있다. 그렇다는건 name변수에 쉘 코드를 삽입하고 input입력값 0x14(20)+sfp(4)를 dummy값으로 채운 후 ret에 name변수의 주소를 삽입하면 될 거 같다. 그럼 이제 payload를 작성하자 이번에는 쉘 코드 대신 pwntool..
Basic_BOF#2
WriteUP
HackCTF의 Basic_BOF#2번째 문제 해당 프로그램의 동작을 확인하기 위해 실행시켰더니 무언가 입력을 받기를 기다리고 있었다. 임의의 값을 입력했더니..? 하아아아아아앙???.... 흠 마음에 드는 프로그램이군!! 일단 무언가를 입력하면 하아아아아아앙을 출력하는 거 같다 gdb를 이용하여 분석해보자 훔... 별 내용은 없는 거 같다 SUP 함수가 있고 그저 출력해주는 함수이다. 위의 메인코드로 특정값을 입력하면 SUP함수가 실행되어 하아아아아앙이 실행된다. 흠... 이 함수 말고 다른 함수가 숨겨져 있는지 확인해보았다 역시나 의심스러운 shell함수를 발견하였다 이를 확인해보았더니 역시나 시스템 함수를 통해 쉘을 실행시켜주는 함수였다. 그럼 모든 건 해결됐다 ebp-0xc위치에 sup함수의 주소..
Basic_BOF#1
WriteUP
HackCTF의 포 너블 문제 Basic_BOF#1 문제 해당 파일의 동작을 확인하기 위해 실행시켜보았는데 실행시켰을 때 무언가를 입력받기를 기다렸다 입력했을 시 버퍼에 저장하고 해당 버퍼의 주소를 나타낸다고 추측하였다. gdb를 이용해서 분석을 시도해보자!! 흠... 분석을 해보면 일단 처음 ebp-0xc위치에 4030201을 넣고 34번 줄에서 ebp-0x34의 주소를 eax에 넣은 후 fgets의 인자 값으로 받는 걸 볼 수 있다. 또한 86,95,120번 줄에서 비교를 한다 만약 ebp-0xc위치에 deadbeef문자열이 있을 경우 153번의 시스템 함수를 실행시키며 그렇지 않을 경우 177번으로 이동하여 해당 프로그램이 종료된다. 이로서 대충 0x34에서 입력을 받아 fgets의 입력값 인증 취..
[LOB] Gremlin 문제
WriteUP
이전 gate문제와 동일하게 일단 접속후 ls -l 명령어를 통해 해당 경로에 디렉토리 및 파일을 확인하였다.역시 같은 내용이다. cobolt 파일과 .c 파일이 존재하였다. 일단 .c파일을 확인하여 해당 실행파일의 소스코드를 확인하였다.해당 소스코드의 내용은 버퍼에 16바이트를 할당하고 인자값이1개이상이여야하며, 나머지는 이전과 같이 buffer에 인자값을 복사(전달)하고 buffer문자열을 출력한다. gate문제와 비슷하지만 buffer의 크기가 16바이트이므로 쉘코드를 삽입할 수 없다.해당 버퍼에 크기가 작다면 환경변수를 만들어 환경 변수에 쉘코드를 삽입하면 된다!!일단 이전과 같이 문제진행을 위해 tmp디렉토리로 이동후 작업을 하였다. my_s라는 환경변수를 설정하고 그 안에 25바이트의 쉘코드를..
[LOB] Gate 문제
WriteUP
처음 gate로 로그인하여 ls -l을 통해 해당 경로에 존재하는 디렉터리 및 파일을 확인해당 소스코드의 내용은 1개 이상의 인자를 받아야하며, 그렇지 않을 경우 "argv error"을 출력하고프로그램이 종료되고, 1개이상의 받았을 경우 해당 인자를 buffer변수로 옮긴 후 해당 문자열을 출력하는 코드라는 것을알 수 있었다.- 해당 코드의 취약점?이라고 하면 strcpy함수이다 이 함수는 입력값 검증 없이 해당 인자 값을 버퍼에 옮기기 때문이다. 코드 분석을 위해 gdb를 실행하려 하였지만 권한 문제가 발생하여 임시파일을 생성할 수 있는 디렉터리인tmp파일에 복사하였음그 후 gdb를 통해 분석을 시도!!!esp를 0x100 (10진수로 변환했을 때 256)256) 크기만큼 늘린 후 인자 값을 1개 이..