SMALL

Wargame 77

[리눅스] Bandit level 30 -> level 31

[문제] [풀이] /tmp/sik 폴더를 만들어 문제에서 주어진 파일을 다운하였다. 다운한 파일의 repo 폴더 속의 README.md 파일을 확인하니 password에 관한 정보를 얻을 수 없었다. 로그와 branch 또한 문제 풀이에 도움이 될만한 정보는 없었다. ls -al로 폴더를 확인해보면 .git 디렉토리가 존재한다. 압축된 태그를 확인하면 refs/tags/secret이라는 태그를 확인할 수 있다. 해당 폴더에서 태그를 확인해서 내용을 읽으면 password를 구할 수 있었다. 또한, 태그를 리스트를 확인해봐도 secret 태그를 확인해볼 수 있다. [핵심] git 태그(Tag)란 git에서 태그란 우리가 알고 있는 것처럼 무언가 표시를 해두기 위한 태깅 기능을 위한 것으로, 특정 커밋을 태..

Wargame/bandit 2021.07.26

[HackCTF] BOF_PIE

[문제] [풀이] 문제 파일을 실행해보니 j0n9hyun 의 주소를 알려주고 종료가 되고 있다. 또한, 일정 값 이상 입력 시 버퍼 오버플로우가 발생하고 있다. 그런데, 주소 값이 계속해서 바뀌고 있으며 주소의 뒷자리 0x909는 고정되고 있었다. 이에 ida로 분석해보니 j0n9hyun 함수는 0x890이었지만, welcome 함수가 0x909인 것으로 보아 프로그램 실행 시 제공되는 주소는 welcome 함수의 주소인 것을 알 수 있다. checksec으로 보호기법을 확인해보니 문제 이름 처럼 PIE 보호 기법으로 인해 주소 값이 랜덤으로 바뀌는 것을 알 수 있다.(ASLR과 유사) gdb를 통해 함수를 확인해보니 j0n9hyun, welcome, main함수에 집중하여 보면 될 것 같다. main ..

Wargame/HackCTF 2021.07.26

[HackCTF] Offset

[문제] [풀이] 문제의 바이너리를 실행하니 일정 개수의 문자열을 입력한 후에는 버퍼 오버플로우가 발생하는 것을 확인할 수 있었다. 보호 기법을 확인하니 ret 주소를 이용한 exploit이나 shellcode를 삽입할 수 없었다. 이에 gdb를 실행하여 함수 목록을 확인해보았다. 함수 목록을 확인하니 two, print_flag, one, select_func, main 함수가 눈에 띄였다. print_flag에서 flag를 획득할 수 있을 것 같고, main을 제외한 다른 함수들이 특이하여 살펴보았다. 먼저 main함수를 보니 main(){ setvbuf(); puts("Which function would you like to call?"); gets(&s); select_func(&s); retu..

Wargame/HackCTF 2021.07.25

[HackCTF] Simple_Overflow_ver_2

[문제] [풀이] 바이너리를 실행해보면 입력 값에 대해 버퍼에 저장하여 주소와 함께 출력해주는 것을 확인할 수 있다. 주소는 실행할 때마다 바뀌고 있어 버퍼에 대한 값은 pwntool로 받아서 사용해야 할 것 같다. 보호 기법을 확인하니 NX 가 disabled 되어 있어 쉘코드를 작성할 수 있음을 확인할 수 있다. main 함수를 확인하니 꽤나 긴 흐름을 확인할 수 있었는데, 주요 함수들을 위주로 정리해보면 다음과 같다. main+61: Data : 출력 main+66: ebp-0x88 주소를 가져옴. main+76: %s로 문자열을 입력 받을 것을 의미함. main+83: scanf 함수 호출 -> 사용자의 입력 받음 main+88~232: 주소 값과 함께 사용자가 입력한 문자열을 1바이트 단위로 보..

Wargame/HackCTF 2021.07.25

[리눅스] Bandit level 29 -> level 30

[문제] [풀이] /tmp 아래에 sikkkk 폴더를 만들어 git clone 명령을 통해 문제의 파일을 다운하였다. repo 폴더 아래에서 README.md 파일을 확인할 수 있다. 해당 파일을 읽어보면 password가 보이지 않는다. 작업 변경에 대한 로그를 확인하여도 특별한 변경사항이 보이지 않는다. git에서는 branch 작업을 할 수 있는데 branch 목록을 확인해보면 현재 branch는 초록색 글자로 작성된 master 임을 알 수 있고, master이외에 /origin/dev와 /origin/sploits-dev가 존재하는 것을 확인할 수 있다. 이에 checkout 명령을 통해 dev branch로 변경하였고, README.md 파일을 읽어보면 master와 달리 password를 읽..

Wargame/bandit 2021.07.24

[리눅스] Bandit level 28 -> level 29

[문제] [풀이] git 파일을 내려받기 위해 /tmp/sik 폴더를 만들어 이동하였다. git clone 명령으로 문제에서 제시된 것을 내려받을 수 있었다. repo 폴더 아래에 README.md 파일이 존재하였고, 이를 읽어보니 password가 xxxxxxxxxx로 되어있었다. password가 변경되었던 것 같아 log를 확인하였다. 로그를 확인하니 이전의 password를 확인할 수 있었다. [핵심] usage: git [--version] [--help] [-C ] [-c name=value] [--exec-path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [..

Wargame/bandit 2021.07.24

[리눅스] Bandit level 27 -> level 28

[문제] [풀이] git을 이용해 문제를 해결해야 함을 알 수 있었는데, 문제 해결에 앞서 git이 설치 되어 있는지 확인해보았다. home 디렉토리에서 문제에서 제시한 경로에 대해 다운하려고 하니 권한이 없었다. -> 다운로드를 비롯한 쓰기 권한은 임시 폴더인 /tmp 디렉토리에만 있기 때문! 이에 /tmp/sik 이라는 임시 폴더를 만든 후 해당 경로로 이동하여 git clone 명령을 사용하니 내려 받을 수 있었다. 다운 후 파일 목록을 확인하니 repo 라는 디렉토리가 생성되었고, 해당 폴더로 이동하니 README 파일이 존재하였다. 파일을 읽은 결과 bandit28의 password를 획득할 수 있었다.

Wargame/bandit 2021.07.24

[Pwnable.kr] input2

[문제] [풀이] 문제에 접속해 파일 목록을 확인하니 input이라는 실행파일과 c코드가 존재하였다. input.c 파일을 확인하면 다음과 같은 소스코드를 확인할 수 있다. 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 int main(int argc, char* argv[], char* envp[]){ 8 printf("Welcome to pwnable.kr\n"); 9 printf("Let's see if you know how to give input to program\n"); 10 printf("Just give me correct inputs then you will get the flag :)\n"); 11 12 // argv 13 ..

Wargame/pwnable.kr 2021.07.22

[Pwnable.kr] random

[문제] [풀이] 문제에 접속해 파일 목록을 확인하니 random 실행파일과 c코드를 확인할 수 있다. random.c 파일을 확인하면 다음과 같다. 1 #include 2 3 int main(){ 4 unsigned int random; 5 random = rand(); // random value! 6 7 unsigned int key=0; 8 scanf("%d", &key); //입력 값을 key 변수에 저장 9 10 if( (key ^ random) == 0xdeadbeef ){ //입력 값인 key와 random 값을 xor 연산하여 0xdeadbeef가 나와야 함. 11 printf("Good!\n"); 12 system("/bin/cat flag"); 13 return 0; 14 } 15 1..

Wargame/pwnable.kr 2021.07.22
LIST