SMALL

풀이 12

[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 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

[CodeEngn] Basic RCE L04

[문제] [풀이] 프로그램을 실행시키면 정상이라는 문자열이 출력된다. 이외에는 특별한 것이 없으므로 ollydbg를 실행시켜보았다. ollydbg에서 프로그램을 실행해보니(F9) 디버깅 당함이라는 문자열이 출력되는 것을 보아 안티디버깅이 적용되어 있는 것을 알 수 있다. 이에 한 줄씩 코드를 실행(F8)해보며 어떠한 과정을 거칠 때 디버깅 당함이라는 문자열이 출력되는지 확인해보았다. 프로그램을 실행하다보니 GetCommandLineA 라는 함수를 지나니 안티디버깅이 적용됨을 확인할 수 있었다. 이에 해당 함수 내부를 보기 위해 SetIn 과정을 수행하였다. GetCommandLineA 함수 내부에서 코드를 실행해보니 CALL 04. 0040100F 호출 후 안티디버깅이 적용됨을 알 수 있었다. 이에 St..

Wargame/CodeEngn 2021.07.22

[CodeEngn] Basic RCE L03

[문제] [풀이] 문제 파일을 실행하니 해독할 수 없는 문자열이 나왔고, 구글링하니 독일어라고 한다..! key 를 입력하는 창이 실행되었고, 아무 문자나 입력해보았다. 문자열 검증에 실패할 경우 error가 출력되었다. 이에 ollydbg를 통해 디버깅을 해보았다. 어셈블리를 확인하니 입력한 문자열을 비교해서 password가 맞고 틀림을 나타내주는 것 같았다. 비교의 성공 여부를 나타내는 문자열 앞에 unicode로 2G83G35Hs2를 push 한 후에 varStrCmp 함수를 호출하는 것을 보아 해당 문자열과 입력값을 비교함을 알 수 있다. 따라서 key 값으로 2G83G35Hs2을 입력해보면, 성공 메시지를 획득할 수 있다. 그런데, 문제는 스트링 비교 함수를 묻고 있으므로 정답은 varStrC..

Wargame/CodeEngn 2021.07.22

Pwnable.kr 문제 풀이-1.fd

[문제] [풀이] 1. ssh를 이용해 원격 접속 ssh [사용자 계정] @ [원격지 ip] -wget 명령으로 pwnable.kr 의 ip 주소를 알아낼 수 있음. (128.61.240.205) -ssh fd@128.61.240.205 –p 2222로 접속 -p 2222 는 포트번호임 - 접속 후 pw란에 guest 입력 시 접속이 된 것을 확인할 수 있음. 2. ls –al 명령으로 내부 파일 및 권한 확인 -최종적으로 flag를 찾아야 하지만, flag의 접근권한이 소유자(읽기), 그룹(읽기), 그 외(없음)으로 접근 불가함. -fd의 그룹 권한에 fd로 설정되어 있어 접근 가능함. (읽기, 실행 가능) -fd 파일이 컴파일된 fd.c 파일을 읽음 (cat fd.c) > int fd = atoi(a..

Wargame/pwnable.kr 2021.05.04

Wargame.kr - QR CODE PUZZLE

[문제] [풀이] 문제의 소스코드를 확인한 결과, unescape에서 문자열을 확인할 수 있었다. unescape함수를 사용하면 함수 속의 문자열을 ASCII 형태로 변환하여 출력한다. 이를 Console 창에서 실행한 결과, ./img/qr.png 를 확인할 수 있다. 이는 원본 파일이 img 디렉토리 아래 위치한다는 것을 의미하며, get 메소드를 이용해 이동할 수 있다. 해당 경로로 이동한 결과, 원본 이미지 파일을 확인할 수 있다. 실제 QR CODE를 인식하면 flag를 획득할 수 있다.

Wargame/wargame.kr 2021.05.03
LIST