본문 바로가기

CTF/picoCTF

(11)
echo back point 1. FSB(Format String Bug) 2. GOT overwrite * FSB 자세한 정리 : https://pu1et-panggg.tistory.com/22 어디부터 쓸 수 있는지 확인 총 크게 두 가지 방법이 있다. 1. got주소 알아내서 FSP로 got overwrite printf@got
rop chain 호출 순서 main -> vuln -> win_function1 -> win_function2(0xBAAAAAAD) -> flag(0xDEADBAAD) gets(buf) 후 스택 상태 gets에 넣을 코드 dummy('a'*28) + win_function1 주소 + win_function2 주소 + flag 주소 + win_function2 인자(0xBAAAAAAD) + flag 인자(0xDEADBAAD)
buffer overflow 3 이 문제는 brute-force로 canary 값을 알아낸 후 리턴주소를 win으로 exploit하면 된다. 코드를 보면첫번째 read할 때 exploit코드의 길이만큼 입력하고두번째 read할 때 exploit을 하는 것 여기서 첫번째 포인트는 canary위치가 어디인가또 canary를 어떻게 때려맞출 것인가 canary위치는 vuln함수의 memcpy를 보면 ebp-0x10에 있는 걸 알 수 있다. 그럼 buf의 위치만 알면 코드에서 때려맞출 canary의 위치를 알 수 있다.buf는 read(0,buf,count)를 보면 ebp-0x30에 있는 걸 알 수 있다. 0x20 즉, 32byte 만큼 떨어져 있다. 두번째로 brute-force로 때려맞춰야 하는데 어떻게? 여기서 놓쳤던 부분은canary는..
authenticate read_flag에서 authenticated가 0이 아닌 값이 있어야 flag가 출력된다. authenticated의 주소는readelf -s auth0x804a04c 0x804a04c에 0이 아닌 값을 넣어야 하는데printf(%s)를 보아하니format String Bug를 이용하는 것 같다. 일단 AAAA를 입력해 어디에 있는지 찾는다. 12번째에 있다. 입력한다. 꿀
keygen-me1 32bit elf파일이다. main check_valid_key check_valid_char validate_key ord 조건1. 모든 문자가 '0'~'9' 이거나 'A'~'Z' 이어야 한다. 2. v2 % 0x24 == (char)ord(s[v4-1])이 true 여야 한다. * v2는 입력한 16개의 문자중 15개를 계산해서 더한 값 validate_key는 따로 코드를 짜서 확인한다. "A" 16개 입력 14가 부족하기 때문에 "A"보다 14 큰 "O"를 맨 뒤(s[v4-1])에 입력한다. 꿀
assembly4 Can you find the flag using the following assembly source? WARNING: It is VERY long… 캡처를 할 수 없을 정도로 어셈블리 코드가 매우 길다. 간단히 main함수 끝에 결국엔 뭘 반환하는 지 알면된다. nasm -f elf32 comp.nasm -o comp.ogcc -o comp comp.o -m32./comp 꿀
assembly3 What does asm3(0xf238999b,0xda0f9ac5,0xcc85310c) return? end_asm_rev.S 이 파일을 공유 라이브러리로 만들고 asm3 함수를 export하면 된다.nasm 어셈블러 사용 : 'PTR'을 삭제하고 첫번째 줄을 밑에 처럼 수정한다. 그리고 라이브러리를 export하는 C프로그램을 짠다. 1. nasm을 사용하여 목적 파일 생성 ( -f : 출력 파일 형식 지정)2. C 프로그램과 생성한 목적 파일 같이 링크해서 컴파일 nasm -f elf32 end_asm_rev.S -o asmfun.ogcc sol.c asm.o -o sol -m32 ./sol
leak me auth.c flag main 간단히name = 입력한 문자열+"\nPlease Enter the Password."이 name 문자열의 끝에 NULL이 없으면 name을 출력할 때 password.txt의 내용까지 출력된다.중간에 '\x00'은 strcat이 실행될 때 제거되고 바로 뒤에 문자열이 추가된다. "\nPlease Enter the Password."의 길이 : 28byte아무문자나 228byte 이상 입력해주면 된다. 자세히 말하자면puts(name)전 스택의 상태는 실행하면