pwnable(115)
-
HACKCTF - BOF_PIE
문제를 확인하면 BOF_PIE라는 단어를 보니 PIE가 설정되어있는 바이너리일 확률이 높아 보이네요. 파일을 다운받아서 확인해보면 먼저 32bit 파일임을 알 수 있고, PIE역시 설정되어있는것을 볼 수 있습니다. 파일을 실행시켜보면 주소 하나를 던져주고, hello 라고 입력을 해보았더니 Nah..라고 나오네요 ida를 활용해서 함수를 자세히 봐보면 welcome함수를 호출하고 Nah... 를 표시하니까 welcome함수 내에서 취약점이 발생할 확률이 높다고 볼 수 있습니다 welcome함수의 위치를 출력하고, vl 이라는 변수를 이 부분에 있었군요. 그럼 PIE가 걸려있는 프로그램에서 RET를 조작해서 실행시키려면 어디엔가 shell을 실행시키는 함수가 있을 것 같은데 찾아보니 이 함수에서 flag를..
2020.07.23 -
HACKCTF - Simple_Overflow_ver_2
말그대로 간단한 오버플로우인가 하고 생각하고 들어갔습니다. 팁하나 추가로 드리면 64비트인지, 32비트인지 확인하고 시작하시면 좋습니다. "file [파일명]" 입력하면 확인하실 수 있습니다. 그리고 64비트를 32비트ida에서 열었을 경우 tab이 안먹습니다. 이렇게 발견해도 되긴 합니다 ㅎㅎ 그럼 다시 본론으로 들어갈게요 ~ 값을 하나 입력받고, y를 누르면 계속 반복, n을 누르면 끝나는 그런 간단한 구조네요. main함수를 보면 이때까지 보았던것 과는 다르게 약간 복잡해 보입니다. 13번째에서 값을 입력받고, 그 아래는 출력하는 명령어인데
2020.07.14 -
HACKCTF - x64 Simple_size_BOF
전 문제와 똑같이 문제 이름 만으로 유추해보면 x64 BOF 문제같다. 실행시켜 보겠습니당. 자살방지 문제라고 해서 조금 깜짝놀랐네요 ㅋㅋ 실제로 문제 풀다가 약간 자살각이 서기는 했습니다. 함수를 보면 처음에 v4의 주소를 뿌려주고, v4에 값을 받고 끝나버립니다. 굉장히 허무한데요..? 보호기법을 확인하니 NX가 설정되어있지 않습니다. 따라서 v4주소를 받으니 1. 받은 v4주소를 저장해둔다. 2. v4에 값을 입력할때 shellcode를 입력한다 3. 리턴을 v4로 준다. 로 익스 코드를 짤 수 있습니다. 필자는 초반에 자살각이 슨 이유가 버퍼위치를 맞게 준거 같은데 안되서 삽질좀하다가, nopslid기법를 사용해서 해결하려고 하였습니다. 아래는 익스 코드입니다. 1 2 3 4 5 6 7 8 9 1..
2020.07.13 -
HACKCTF - x64 Buffer Overflow
문제 이름부터 전형적인 64bit BOF문제를 나타내는 것을 볼 수 있다. 실행은 입력한 값에 앞에 Hello 를 붙여주는 형식이다. NX가 켜져있으니 전에 했던 문제들처럼 shellcode를 직접 넣어서 푸는 문제형식은 아닐것이다. scanf 에서 입력제한을두지 않으니 기본적인 bof기법으로 RET를 덮으면 될듯한데 쉘의 위치를 찾으려 하니 마침 아래 함수가 보였다. 더미로 s[0x110]을 덮고 SFP[0x8] 추가해주고, 마지막 RET[0x8]
2020.07.10 -
HACKCTF - 내 버퍼가 흘러넘친다!!!
뻔한 BOF문제로 유추가 되니 일단 실행시켜보겠습니다. 별다른 출력없이 입력만 받고 끝나는걸 확인할 수 있습니다. main함수를 보면 9번째에서 gets에서 입력값에 제한을 두지 않으니 bof가 일어나는것을 확인할 수 있습니다. 그리고 여기서 함수 목록을 보면 별다른 직접 shell을 가져다 주는 함수를 발견할 수 없는데 어떻게 풀이를 할까 고민하다가 직접 쉘코드를 넣는게 가능할까 생각을 해봤더니 NX가 가능하니 쉘코드를 직접 넣으면 될거같네요. 즉 메인함수를 다시 확인하면 1. name에 쉘코드를 넣고 2. s를 bof시켜서 리턴을 name변수로 가게끔 하면 쉘을 얻을 수 있을 것 같네요. S의 크기는 보이는것처럼 0x14이고 SFP까지 고려해주면 아래와같이 페이로드를 작성할 수 있겠네요. 1 2 3 ..
2020.07.09 -
HACKCTF - Basic_FSB
문제 제목을 보면 FSB인것을 알 수 있으니 먼저 좁혀두고 가면 편할것이다. 실행하면 평범하게 입력값을 출력해준다. IDA로 실행해보면 전형적인 FSB문제 형식의 코드로 보인다 %p를 활용해서 주소를 출력해보면 첫번째 인자는 건너뛰고 2번째부터 시작되는것을 볼 수 있다. 또한 flag함수를 보면 /bin/sh 가 있으니 궁극적으로 이곳으로 리턴을 보내면 해결될 것이라는 것도 확인할 수 있다. 따라서 우리는 vuln함수의 printf(&format); 이 부분에서 printf.got 을 리턴으로 덮어주면 되니까 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from pwn import * r = remote("ctf.j0n9hyun.xyz", 3002) context.log_level =..
2020.07.08