목록War Game/HackCTF (44)
tmxklab
1. 문제확인 nc ctf.j0n9hyun.xyz 3013 1) 접속 입력 값을 받고 출력해준 뒤 프로그램이 종료함 2) IDA를 통해 확인 main함수와 /bin/sh을 실행시켜주는 spawn_shell함수가 존재 2-1) IDA(Pseudocode)확인 - main() 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 2. 접근방법 1) getenv()확인 - getenv()에서 인자 값으로 name변수를 받게 되는데 이 때, bof수행이 가능하다. - 참고로 getenv()는 환경변수 값을 읽어오는 함수이다. 2) 결론 getenv()를 통해 bof를 수행하여 ret값을 spawn_shell()주소로 바꾸면 될 것 같다. 3. 풀이 1) spawn_shell() 주소 확인 spa..
1. 문제확인 nc ctf.j0n9hyun.xyz 3012 1) 접속 시의 내용과 저자를 입력 값으로 받으면 나의 점수를 출력해주고 다시 무한 루프를 도는 프로그램 2) IDA를 통해 확인 2-1) IDA(Pseudocode)확인 - main() get_poem(), get_author(), rate_poem()가 실행되고 점수를 저장하는 dword_6024E0의 값이 1,000,000점을 만족하면 무한 루프를 종료하고 reward()를 실행 2-2) IDA(Pseudocode)확인 - get_author() gets()를 통해 입력 값(시의 저자)을 받고 종료 2-3) IDA(Pseudocode)확인 - get_poem() gets()를 통해 입력 값(시의 내용)을 받아 result변수에 저장 2-4)..
1. 문제확인 nc ctf.j0n9hyun.xyz 3011 1) 접속 입력을받고 출력한 뒤 프로그램이 종료됨 2) IDA를 통해 확인 총 4개의 함수를 볼 수 있음 2-1) IDA(Pseudocode)확인 - main() 2-2) IDA(Pseudocode)확인 - vuln() - fgets()를 통해 s변수에 32bytes까지 입력받음 - 다시 s변수에 저장된 값을 input값에 저장 - replace()를 통해 "I"문자열이 저장된 v7과 사용자의 입력 값이 저장된 input과 v4를 인자로 받음 - replace()의 리턴 값으로 v4를 반환하고 input값에 복사해주는 듯 싶다 - 이후에 v1에 input값을 저장하고 strcpy()를 통해 다시 s변수에 v1의 값을 복사시킨 뒤 s변수를 출력 2..
1. 문제확인 nc ctf.j0n9hyun.xyz 3010 1) 접속 1번 : Binary Boss에 대한 메모리 보호기법 등 정보를 얻을 수 있다. 2번 : 3가지 방법을 통해 돈을 얻을 수 있는 메뉴 3~4번 : 돈을 모아 System Armor와 Shell Sword를 구입할 수 있는 메뉴 5번 : 사용자의 입력을 받을 수 있는 메뉴 2) IDA(Pseudocode)확인 - main() 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 NX가 걸린 것을 보아 제목에서 처럼 라이브러리에 있는 실행권한을 이용하여 RTL공격을 하면 될 것 같다. 2. 접근방법 1) 결론 read함수를 통해 bof를 일으켜 RTL공격을 실행 이 때, RTL공격에 사용할 system함수와 "/bin/sh..
1. 문제확인 nc ctf.j0n9hyun.xyz 3009 1) 접속 숫자를 입력하면 "do_system+1094"를 포함한 문자열이 출력되면서 종료 2) IDA(Pseudocode)확인 - main() fgets()를 통해 입력 받아 30번째 줄 else문에 들어가면 gets()를 통해 bof를 수행할 수 있음 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 2. 접근방법 먼저, 30번째 줄 gets()가 bof를 수행할 수 있으므로 fgets()를 통해 입력받아 else문안의 if문이 실행되도록 하자 else문의 if문이 실행되기 위해서는 if문 조건을 만족시켜야 하므로 디버깅을 통해 v10에 어떤 값과 비교하는지 알아보자 ( if(v10==(v6*v5)
1. 문제확인 nc ctf.j0n9hyun.xyz 3008 1) 접속 문자열 출력과 동시에 프로그램은 아무런 수행없이 종료 2) IDA(Pseudocode)확인 - main() welcome() 실행 및 puts()를 통해 문자열 출력 3) IDA(Pseudocode)확인 - welcome() printf()를 통해 welcome()의 주소 값 출력 scanf()를 통해 입력 값을 v1에 저장 -> bof 취약점 존재 4) IDA(Pseudocode)확인 - j0n9hyun() flag파일을 읽기모드로 열어 파일 내용을 출력 실행시켜야할 함수 5) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 RELRO : Partial RELRO NX : DEP가 적용되어 있음 -> heap, sta..
1. 문제확인 nc ctf.j0n9hyun.xyz 3007 1) 접속 문자열 출력과 동시에 프로그램은 아무런 수행없이 종료 2) IDA(Pseudocode)확인 - main() main()의 인자 개수(argc)를 v5에 저장 gets()를 통해 표준 입력 값을 s변수에 저장한 뒤, select_func()의 파라미터로 전달 3) IDA(Pseudocode)확인 - select_func() 함수 포인터 v3 선언 후 two()로 초기화 strncpy()를 통해 31bytes(0x1Fu)만큼 파라미터 src값을 dest로 복사 if문에서 dest변수에 저장된 문자열과 "one"이 같으면 함수 포인터 v3에 one()주소로 저장 return값으로 v3()함수 포인터 반환 4) IDA(Pseudocode)확인..
1. 문제확인 nc ctf.j0n9hyun.xyz 3006 1) 접속 입력 값을 받으면 주소 값으로 추정되는 헥사 값이 나옴 y를 누른 경우 다시 위 과정 반복 n을 누른 경우 프로그램 종료 2) IDA(Pseudocode)확인 - main() while문에서 scanf()를 통해 입력받은 값이 존재하고 입력 값이 y(121)이거나 Y(89)인 경우 다시 반복 if(scanf("%[^\n]s", s)) : [^\n]서식문자를 사용하여 공백 문자포함하여 개행문자가 오기 전까지 입력 값을 s변수에 저장 -> scanf()로 인해 bof 취약점 존재 if(v3 >= strlen(s)) : for문에서 사용되는 제어변수 i의 값을 저장한 v3가 strlen(s)보다 크거나 같으면 for문 종료 if(!(i&0x..
1. 문제확인 nc ctf.j0n9hyun.xyz 3005 1) 접속 이상한(?) 문자열과 buf의 주소 값으로 보이는 문자열이 출력되면서 종료 2) IDA(Pseudocode)확인 - main() puts()를 통해 s변수에 저장된 문자열을 표준 출력으로 보냄 printf()를 통해 main()에서 초기화되지 않고 선언된 v4변수의 주소 값을 출력 gets()를 통해 표준 입력으로 들어온 문자열을 v4에 저장 -> bof 취약점 존재 2. 접근방법 1) 스택구조(main) gets()를 사용하여 bof공격을 통해 ret의 주소 변조가능 v4의 변수에 쉘 코드를 삽입하여 ret의 주소를 v4의 시작 주소로 변경해야함 2) v4의 시작주소 v4의 시작주소를 넣어 보려하지만 실행할 때마다 v4의 주소가 변경..
1. 문제확인 nc ctf.j0n9hyun.xyz 3004 1) 접속 hi를 입력하면 Hello와 함께 출력되면서 종료 2) IDA(Pseudocode)확인 - main() scanf()를 통해 s변수에 입력의 제한없이 문자열을 받음 -> bof 취약점 존재 입력받은 s변수와 "Hello"출력 3) IDA(Pseudocode)확인 - callMeMaybe() main()에서 호출되지 않았으며 호출해야할 함수 2. 접근방법 1) 스택구조(main) 2) 결론 scanf()를 통해 ret의 주소를 callMeMaybe()의 시작주소로 변조 3. 풀이 1) callMeMaybe() 주소 확인 callMeMaybe() 주소 : 0x400606 2) 공격 코드 작성 from pwn import * # pwntoo..