목록War Game/Pwnable.xyz (50)
tmxklab
1. 문제 nc svc.pwnable.xyz 30006 1) 문제 확인 - menu 1 : 키를 재생성하는 메뉴 - menu 2 : 플래그를 로드 - menu 3 : 플래그 값을 출력(하지만 안됨) 2) 함수 확인 - 특이하게 real_print_flag()와 print_flag()가 존재 2-1) 메인 함수 - line 8 : generate_key함수 실행 - line 18 ~ 20 : 2를 입력한 경우 load_flag함수 실행 - line 24 ~ 28 : 1을 입력한 경우 generate_key함수 실행 - line 30 ~ 32 : 3을 입력한 경우 print flag함수 실행 2-2) generate_key() - menu(1) - line 11 : s변수를 0x48만큼 0으로 메모리에 세팅..
1. 문제 nc svc.pwnable.xyz 30031 1) 문제 확인 - 메뉴가 주어지고 원하는 메뉴를 선택하여 입력 값을 넣을 수 있으며 무한 루프로 작동(근데 age를 입력하면 프로그램이 종료된다) 2) 함수 확인 2-1) IDA(hex-lay) - 메인 함수 - 입력 값에 대한 처리를 구분해 놓았으며 4를 입력한 경우 auth함수의 반환 값이 참이면 win함수가 실행 - 32번째 줄에서 auth함수의 파라미터로 s변수를 받는데 11번째 줄에서 s변수는 memset을 통해 0으로 56bytes만큼 초기화되어 있음 - 근데, 특이한 점이 21번째 줄의 scanf와 28번째 줄의 scanf에서 파라미터가 다르다(아까 age를 입력했을 때 문제가 생기는 이유 → 28번째 줄 scanf에서 v6의 주소 값..
1. 문제 nc svc.pwnable.xyz 30029 1) 문제 확인 - 세 개의 입력 값을 받고 결과를 출력해주는 프로그램 2) 함수 확인 2-1) IDA(hex-lay) - 메인 함수 - v4, v5, v6에 입력 값을 받아 result[v6]의 값을 출력 - result[v6] = v5 (xor) v4 2-2) IDA(hex-lay) - win함수 3) 메모리 보호기법 및 파일 정보 확인 2. 접근 방법 먼저, 가장 눈에 띄는 부분은 이 부분이다.(main함수 line 19) xor 계산한 값을 result[v6]에 저장하는 로직이다. 따라서, result의 인덱스와 값을 조작할 수 있다.(원하는 주소와 해당 주소에 값을 지정할 수 있음) 그리고 result는 main함수에서 선언한 변수가 아니라..
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(전역변수)를..
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..
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가 존재한다. 저 값을 ..
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..
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..
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일 때,..
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된 파일이라 함..