본문 바로가기

System Hacking

(26)
[드림핵] basic_rop_x86 풀이 - 티스토리 basic_rop_x64와 서버 환경만 다르고 나머진 거의 유사한 문제이다 코드 정적 분석 1. buf 입력 시 BOF 발생 2. puts함수 plt로 read함수 주소 릭 3. system, /bin/sh주소 구한 후 ret overwrite -> ret2main 이용 코드 동적 분석 이전 문제와 달리 buf와 ebp 중간에 더미값 4바이트 있음 필요한 정보들 32비트 환경에서 함수 인자 전달할 때 레지스터가 아니라 스택을 이용하므로 rop chain을 만들어주려면 스택을 정리해며 다음 함수로 연결해줄 가젯이 필요하다 puts와 system은 인자를 하나 사용하므로 pop (레지스터) ; ret 가젯이면 충분하다 read주소 출력 및 write함수가 출력하는 값 날리기 read함수 주소 릭 후 libc..
[드림핵] basic_rop_x64 풀이 - 티스토리 rop문제이고 64비트 환경이다 카나리는 없고 NX와 ASLR만 켜져 있는 상태이다 풀이 가능한 방법 1. ret2main (main함수 재호출) 2. got overwrite (got주소에 system주소 덮어서 해당 함수 재호출 -> main함수 재호출 x) 3. RTC (Return to CSU, 나중에 정리해야겠다) (대충 main함수를 실행하기 전 코드의 코드 조각들을 이용하는 기법) 코드 정적 분석 1. buf입력 시 BOF 발생 2. 첫 입력에서 사용 가능한 plt, got값 - read_got - read_plt - puts_got - puts_plt - write_plt 3. read함수와 puts이용해서 libc주소 릭 가능 4. 입력을 한 번만 받으므로 ret2main이용해서 main..
[드림핵] rop (return oriented programming) 풀이 - 티스토리 리턴 가젯과 Got overwrite을 이용해 푸는 문제이다 코드를 보면 buf에서 BOF가 발생한다. 코드 내 특정 함수에 got값에 system함수 주소를 overwrite하는 방법으로 풀이를 정리해보겠다 원래 puts함수에 got값을 overwrite하려 했으나 우분투 새 버전 부터 뭐가 바껴서 puts으로는 안 된다는 댓글을 봄.. write함수 이용 ** 필요한 것들 1. 카나리 -> 생략 2. system 주소 -> libc주소와 libc내 system의 offset을 이용 3. libc 주소 -> 코드 내 함수들의 got, plt 값을 이용 4. 필요한 가젯들 *시나리오* - 카나리 릭 -> buf에 특정값 대입 - libc주소 -> read의 got값을 인자로 write 함수의 plt 값을..
[드림핵] Return to Library 풀이 - 티스토리 ASLR, NX, Canary 모두 켜져 있다 1. 코드 분석 - buf의 크기가 0x30인데 0x100 크기로 두 번의 입력을 받고 있다 -> 카나리릭과 Overwrite이 가능함 - 코드 내에 system함수가 호출되고 있다 -> system의 plt값을 이용해서 재호출 가능 (plt값은 ASLR이 켜져 있어도 안 바뀜) - 코드 내에 "/bin/sh"이 전역 변수로 선언 돼 있다 -> 해당 문자열을 사용가능 (ASLR 기능이 켜져 있어도 코드 영역은 그대로) 2. 페이로드 시나리오 - 첫 번째 입력에서 카나리 릭, 두 번째 입력에서 ret overwrite을 시킨다. 이 때 plt의 system 주소로 overwrite 시켜야 함 3. 페이로드 작성 시 필요한 것들 1) plt에서 system함수의..
[드림핵] ssp_001 풀이 - 티스토리 canary 문제이다 해당 명령어로 적용된 보호기법 확인이 가능하다 NX도 켜져있으므로 쉘코드 사용불가 -> 문제 내 함수 이용 처음 코드 본 순간 어지러웠다. 포너블 공부하면서 본 코드 중 제일 길었다 코드 보고 예상한 스택 상태는 이거였다 gdb 뜯어본 결과 이런 상태였다 name이랑 box위치가 다르다.. *코드분석 : 1. print해주는 부분이 P 입력 했을 때 밖에 없으므로 P 입력 후 카나리 릭 가능 2. E 입력 시 name의 길이를 사용자가 지정 가능하므로 BOF 발생 3. get_shell함수 주소를 ret에 덮어 씌우면 끝 페이로드 : 새롭게 알게 된 것들 1. 변수를 선언해줄 경우 canary = b''와 같은 형태로 선언해줌 2. 바이트 코드 형태를 사용하므로 정수 입력 시 str..
[드림핵] Return to Shellcode 풀이 - 티스토리 문제 코드이다 대충 보자면 buf를 입력 받는 부분에서 BOF가 발생하고, 이를 통해 카나리 릭을 하여 ret에 buf주소를 덮어씌워 쉘 코드를 실행 시키면 된다 지금까지 배운 것들에 점점 살이 더 덮여지는 느낌이라 문제 자체는 어렵지 않고 배운 개념을 확인하기에 좋은 문제였다고 생각한다! 실행결과 buf 주소는 출력하고 있으므로 따로 구하지 않아도 된다 또한 buf와 rbp의 거리도 출력해주고 있다 gdb로 뜯어본 내용을 살펴보면 함수의 앞부분에서 fs레지스터에 랜덤으로 배정된 값을 rbp - 8인 카나리가 있는 주소에 저장 시켜주고 있다 또한 함수의 마지막 부분에서 카나리에 저장된 값과 fs레지스터 (초기 카나리 값을 랜덤 배정해둔 곳)의 값과 비교해서 같은 같이면 정상 진행하고 다른 값이면 지정된 ..
[드림핵] baic_exploitation_000 풀이 - 티스토리 basic_exploitation_001과 main코드는 거의 비슷하다 여기선 read_flag와 같은 함수가 없으므로 다른 방법을 이용해 ret를 override시키면 될거 같다 사실 이 문제는 고민하다가 혼자 못 풀어서 다른 블로그 참고해서 풀었다 지금 보니까 buf의 주소를 출력하고 있는 코드가 힌트인거 같네 분석 페이로드 : buf에 쉘코드 포함 아무값이나 0x84 만큼 채운 후 ret를 buf 주소로 덮어 씌워서 쉘코드를 실행시킨다 (여기서 입력을 scanf로 받고 있으므로 scanf의 특성을 고려해야함) 솔직히 보안 입문자가 이걸 어떻게 생각해내.................................................... \x31\xc0\x50\x68\x6e\x2f\x73\x6..
[드림핵] basic_exploitation_001 풀이 - 티스토리 32비트 환경이다 다른 보호기법들은 아직 안 배워서 잘 모르겠다 (찾아보니까 NX는 쉘코드를 실행 못하게 하는 보호기법인듯) 문제 코드이다 buf를 gets함수로 입력 받는 부분에서 BOF가 발생할 수 있기 때문에 이를 이용해서 read_flag함수의 주소로 덮어 씌우면 된다 필요한 정보 buf위치, read_flag 주소값 buf위치 : ebp-0x80 read_flag 주소값 : 0x080485b9 페이로드 : "A" * 132 + "read_flag주소값" read_flag도 payload변수에 더해서 전달하려하면 바이트값이라 오류 나는데 원래 안되는건가.. 다른 분들 잘 하시던데 끝 * alarm함수는 해당 시간이 지나면 SIGALRM 신호를 발생시키면서 프로그램에 전달한다 signal함수는 지정..