시스템해킹 7

[PWNABLE] 시스템 해킹_연습문제5

해당 문제는 pwnable.kr에서 제공하는 passcode문제입니다. passcode라는 문제로 밑의 코드를 보면 scanf함수를 사용할 때 주소 연산자를 사용하지 않아 주소 값을 입력받는 듯한 형식으로 되어 있습니다. 이것을 이용하여 문제를 풀어야합니다. gdb를 이용하여 밑의 welcome함수와 login함수를 확인하면 welcome의 name함수와 login의 passcode1의 변수의 위치 차이를 확인할 수 있는데 위치는 96만큼 떨어진 것을 볼 수 있습니다. 그렇기에 name변수의 97바이트부터 100바이트까지에 주소 값을 입력하면 passcode1 변수의 값을 수정할 수 있게 됩니다. 이때부터는 GOT를 이용하여 문제를 풀어야 하는데 지금 상황으로 GOT를 실제주소로 이해하고 있습니다. 하지..

[TeamH4C_PWNABLE] 시스템 해킹_연습문제9

이번 문제는 Toddler's Bottle에 9번째 문제인 mistake를 풀어보겠습니다. 접속 정보는 아래의 그림과 같이 mistake user에 pwnable.kr host서버이며, port는 2222번이고, guest password를 가졌습니다. 접속하여 사용자 디렉터리의 파일들을 확인하고 소스파일을 살펴본 후, 해당 실행파일을 실행하였습니다. 먼저 실행하여 아무 숫자나 적었을 때 종료되지 않아 코드를 다시 살펴보았는데 길이를 10만큼 받아 함수에 넣는 것을 볼 수 있어 10자리가 되어야 한다는 것을 알 수 있었고 fd의 값이 연산 순위가 잘못되어 있어 0이 되는 것을 알 수 있었습니다. 여기서 사용자로부터 fd를 10바이트 읽어 들여 pw_buf에 저장시킨 후 scanf함수로 pw_buf2를 입..

[TeamH4C_PWNABLE] 시스템 해킹_연습문제6

pwnable.kr에서 제공하는 Toddler's Bottle에서 random문제를 봐보도록 하겠습니다. 아래 ssh접속 정보를 가지고 user은 random이고 host는 pwnable.kr인 서버에 2222번 port번호로 접속하여 guest라는 password를 입력하여 로그인할 수 있다는 것을 알 수 있습니다. 로그인하여 해당 사용자 디렉터리에 무엇이 있는지 확인하여 보면 random의 실행파일과 소스파일이 보일 것입니다. 그렇기에 random실행파일을 실행하여 어떠한 방식으로 실행되는지 확인하여 보고 소스파일을 열어보았습니다. 소스파일을 보았을 때 key값을 입력받아 rand() 함수로 받아온 값과 xor 하여 그 값이 0xdeadbeef의 값이 되었을 때 system함수를 호출한다는 것을 알 ..

[TeamH4C_PWNABLE] 시스템 해킹_연습문제1-4

이번 문제는 pwnable.kr에서 제공하는 문제를 풀어보았습니다. 화질이 좋지 못하여 간단하게 봐주시길 바랍니다 :) fd collision bof flag 문제 1 해당 문제는 ssh로 서버에 접속하여 특정 실행파일을 실행할 때 인자 값을 주어 결과를 얻도록 하는 문제입니다. ssh로 접속한 후 접속 디렉터리에 존재하는 파일을 확인하고 실행시켜 봅니다. 모든 파일을 확인하여 보았고 이용 가능한 것은 fd실행파일이라는 것을 알게 되었기에 fd소스파일을 살펴보겠습니다. fd소스파일에는 argc가 2 미만이면 종료되게 돼있기에 인자 값을 주어 해당 조건문을 넘기도록 만듭니다. 그 후 인자에는 0x1234의 값을 넣어 fd가 0이 되어 buf값 자체가 LETMEWIN이라는 단어와 비교되도록 만들어 flag가..

[TeamH4C_HackCTF] 시스템 해킹_기초문제

저번 게시물에 이어 시스템 해킹 기초 문제를 좀 더 풀어보겠습니다. 이번에는 HackCTF사이트의 문제를 가져왔습니다. 값 변조 Basic_BOF #1 실행 주소 값 변조 Basic_BOF #2 return 주소 값 변조 offset 문자열 변환으로 return 주소 값 변조 g++ pwn 1. Basic_BOF #1 버퍼 오버 플로우 문제로 주어진 파일을 IDA로 열어 확인하였을 때 특정 변수가 -55903873일 때, 즉, DEADBEEF라는 16진수 값을 가질 때 shell을 획득하도록 되어있었습니다. 그렇기에 payload에 deadbeef를 패키징하여 16진수 형태를 표현하고 앞의 dummy값은 s크기인 40byte를 설정하여 check값을 변조하면 됩니다. 2. Basic_BOF #2 포인터로..