목록War Game (174)
tmxklab
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kxExy/btqDiFkXGEs/KGtJkGingkJcnCmMR4GVrK/img.png)
1. 문제 nc svc.pwnable.xyz 30016 1) 문제 확인 - menu가 주어지고 무한 루프로 이루어져있음 2) 함수 확인 2-1) IDA(hex-lay) - 메인 함수 - 1을 입력하면 edit_note함수 실행 - 2를 입력하면 edit_desc함수 실행 - 0을 입력하면 프로그램 종료 2-2) IDA(hex-lay) - win함수 2-3) IDA(hex-lay) - edit_note함수 - 입력할 문자열 길이만큼 할당하여 read함수를 통해 buf에 입력 받음 - strncpy함수를 통해 입력한 길이만큼 buf에 저장된 문자열을 s(전역변수)로 복사 - 마지막으로 buf의 할당된 메모리를 free를 통해 해제 2-4) IDA(hex-lay) - edit_desc함수 -buf(전역변수)를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PTrYJ/btqC21Pzp1h/UK8beqgnc2zISN5TxmtTm0/img.png)
1. 문제 nc svc.pwnable.xyz 30005 1) 문제 확인 - 1을 입력하면 입력을 받을 수 있음 - 2를 입력하면 어떠한 주소 값 출력 - 3을 입력하면 그냥 넘어감(?) - 나머지 값을 입력하면 Invalid 출력 2) 함수 확인 - 일단 메인함수와 win함수가 보임 2-1) IDA(hex-lay) - 메인 함수 line 14: buf변수를 64bytes만큼 동적할당 line 20 : char형 포인터 변수인 v3가 nptr을 가리킴 line 21~25 : for문이 12번 반복하면서 nptr에 저장된 값을 초기화 시켜주는 것 같다. line 26~27 : read()를 통해 입력 값을 받아 int형으로 변환한 값을 v5에 저장 line 28~30 : 1을 입력한 경우 buf에 32byt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cvkHJW/btqC221Yrwz/HzaVxRhAaAQU1argKLg41K/img.png)
1. 문제 nc svc.pwnable.xyz 30004 1) 문제 확인 2) IDA(hex-lay) - 메인 함수 - buf값을 체크하여 y(or Y)가 아니면 메인함수를 종료 - if문을 통과하면 read함수를 통해 src변수에 입력을 받고 usr에 다시 복사하여 출력 - 주의 깊게 볼 부분은 read함수와 strcpy 3) 메모리 보호기법 및 파일 정보 확인 2. 접근 방법 먼저, 취약한 함수로 read()와 strcpy()가 존재 그런데 위에 빨간 박스를 보면 굳이 src변수로 입력 값을 받고 다시 usr로 복사하여 출력한다. 여기서 src[rbp-28h]는 스택에 존재하지만 usr는 bss영역에 존재하므로 전역 변수이다. 그리고 위에 usr로 부터 조금 떨어진 곳에 flag가 존재한다. 저 값을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dOwNbc/btqC3reUdhY/VSykf9Ps4CHVR1jkufqp51/img.png)
1. 문제 nc svc.pwnable.xyz 30003 1) 문제 확인 세 개의 인자 값을 받을 수 있으며 int형이 아닌 값이 들어오면 프로그램이 종료됨 2) 함수 확인 3) IDA(hex-lay) - 메인 함수 - 13번째 줄 : v5[7]에 "0xdeadbeef"값 초기화 - 14번째 줄 : 3개의 int형 인자 값을 받고 -7 -5,404,319,552,844,595,200(십진수) 1-2) v5[8] : 0x00 00 00 00 0b 00 00 00 → 0xb000000 → 184,549,376(십진수) 2) 디버깅 2-1) 입력 값(v6, v7, v8)을 (0, -5,404,319,552,844,595,200, -6)으로 입력한 경우 - v5[7]에는 0xb5가 들어 있음 2-2) 입력 값(v..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cjbOAW/btqCzAKybfF/BffSHfvlWsWVuFn7kreVX0/img.png)
1. 문제 nc svc.pwnable.xyz 30002 1) 문제 확인 - 세 개의 인자 값을 받을 수 있으며 int형이 아닌 값이 들어오면 프로그램이 종료됨 2) 함수 확인 3) IDA(hex-lay) - 메인 함수 - 18번째 줄 : input값으로 3개의 값을 scanf함수를 통해 받을 수 잇으며 return값이 3이 아니면 무한 루프 종료 - 20번째 줄 : 입력 값으로 받은 3개의 v4, v5, v6를 통해 v7[v6] = v4 + v5 4) IDA(hex-lay) - win함수 5) 메모리 보호기법 및 파일 정보 확인 64bit elf파일이며 동적 라이브러리를 사용, not stripped되어 있어 심볼 정보가 남아 있음 - NX가 걸려있어 쉘 코드 삽입을 통한 실행 권한이 없음 - Canar..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yyCrC/btqCz5XPMvK/X4XAbqYNtNkKXM5oL5QIRk/img.png)
1. 문제 nc svc.pwnable.xyz 30001 1) 문제 확인 입력 값을 받고 종료 2) IDA(hex-lay) - 메인함수 두 개의 입력 값을 받고 두 번의 조건 문을 만족시키면 flag값을 볼 수 있다. 3) 메모리 보호기법과 파일 정보 확인 64bit elf파일이며 동적 라이브러리를 사용, stripped된 파일이라 함수의 심볼 정보가 없음 2. 접근방법 1) 메인함수 조건문 분석 - v4와 v5는 scanf함수를 통해 입력 값을 받는 변수 - 두 개의 변수 모두 4918보다 작아야 함 - 하지만, v4 - v5의 값이 4919를 만족시켜야 함 ex) v5 = 4918일 때, v4는 9231이 되어야함 (탈락) v5 = 2459일 때, v4는 7378이 되어야함 (탈락) v5 = 0일 때,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/biKlOp/btqCz54C1tX/O67qDtw9AWexdGNP2QSqEK/img.png)
1. 문제 nc svc.pwnable.xyz 30000 1) 문제 확인 어떤 leak된 주소가 출력되고 입력 값을 받을 수 있는 부분이 존재 2) IDA(hex-lay) - 메인함수 - 14~15번째 줄 : v3포인터 변수를 malloc을 통해 메모리 할당과 1로 초기화 - 19~20번째 줄 : scanf를 통해 입력 값을 size변수에 저장, v5포인터 변수를 malloc을 통해 메모리 할당 시 size값의 크기만큼 할당 - 22~23번째 줄 : v5포인터 변수에 size크기만큼 표준 입력을 받고 v7변수에 size값 저장 - 26번째 줄 : v3가 널 값이면 flag값을 보여줌 3) 메모리 보호기법 및 파일 정보 확인 - 64bit elf파일이며 동적 라이브러리를 사용, stirpped된 파일이라 함..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bC4CMO/btqCxQAxkPS/ahSVz1QE2mSpAxA9YeSgP1/img.png)
1. 문제확인 nc ctf.j0n9hyun.xyz 3017 1) 접속 한 번의 입력을 받고 종료됨 2-1) IDA(Pseudocode)확인 - main() - look_at_me함수를 실행 시킴 2-2) IDA(Pseudocode)확인 - look_at_me() - gets()를 통해 입력을 받음 -> bof 3) $file를 통해 확인 - statically linked -> 정적 라이브러리를 사용함 4) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 2. 접근방법 look_at_me함수에서 입력 값을 받을 수 있는 gets함수가 존재하므로 look_at_me부터 확인 1) look_at_me() - [ebp-0x18]에 gets의 입력 값을 받는 변수 존재 - 따라서, gets를 통..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bscAxR/btqCxPho4jL/oFTewP1ggYerlPEFKzAUK1/img.png)
1. 문제확인 nc ctf.j0n9hyun.xyz 3016 1) 접속 두 번의 입력을 받고 종료됨 2) IDA를 통해 확인 - 확인 결과 main함수와 sub_400826함수가 가장 눈에 띔 - sub_400826은 fla파일을 화면에 출력해주는 함수로 공격목표에 해당함 2-1) IDA(Pseudocode)확인 - main() - 9~10행 : void형 v3포인터 변수를 16bytes할당해 준 뒤 1을 저장 - 11행 : v3포인터 변수로부터 8bytes떨어진 곳에(QWORD) 8bytes할당 - 12~13행 : void형 v4포인터 변수를 16bytes할당해 준 뒤 2를 저장 - 14행 : v4포인터 변수로부터 8bytes떨어진 곳에(QWORD) 8bytes할당 - 15~16행 : 4096bytes만..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yLgxj/btqCbhL0mZ4/zbmwxVuh3ZS4MvKo5kERU1/img.png)
1. 문제확인 nc ctf.j0n9hyun.xyz 3015 1) 접속 패스워드 입력을 받고 성공 유무를 출력해준 뒤 프로그램이 종료 2) IDA를 통해 확인 2-1) IDA(Pseudocode)확인 - main() - gets()로 입력을 받고 입력 값을 check_passcode함수의 인자로 넘겨줘서 hashcode와 비교 - 성공하면 core함수 실행 2-2) IDA(Pseudocode)확인 - core() - ebp로부터 62bytes떨어진 곳에 buf배열 선언 - void *dlsym(void *handle, const char *symbol) : shared library에 포함된 symbol의 위치에 대한 pointer를 찾음 - 즉, 공유 라이브러리에서 printf함수의 주소 값을 찾아 17..