목록Wargame/HackCTF (37)
Pwnstar
다섯 번째 문제이다. 대놓고 64비트 버퍼 오버플로우인것 같다. Full RELRO가 걸려있어 got overwrite가 불가능하고, NX 때문에 shellcode를 넣지도 못한다. IDA 입력을 받고, "Hello XXX" 이런 식으로 출력해주는 단순한 프로그램이다. 전역변수 s가 rbp-110h(272)에 위치하고, 요렇게 shell을 실행시킬 수 있는 함수도 존재한다. callme_address = 0x400606 payload = dummy*(272 + 8) + callme_address 이렇게 짜면 될 것 같다. 요렇게 익스코드를 짜 주고 실행해보았다. 끗
네 번째 문제이다 음...문제 이름만 봐서는 버퍼 오버플로우 같긴한데... 우선 32비트인 것을 확인했고, 아무런 보호기법도 걸려있지 않았다. IDA로 켜 보았다. 음?? 단순한 버퍼오버플로우인가?? 쉘코드도 넣을 수 있고, 넣을 공간도 있으니 한번 활용해보도록 하겠다. 이름을 넣는 name 전역변수에 쉘코드를 넣고 ret에 name 주소를 주면 될 것 같다. name_address = 0x804a060 이름을 입력받은 부분에 32바이트보다 작은 쉘코드를 넣어주고 input을 입력받는 부분에 14h() + 4 + name주소 이렇게 payload를 주면 될 것 같다. 익스코드를 다음과 같이 구성했고 끗
세 번째 문제 basic_fsb이다. Format string bug를 이용해서 푸는 문제 같은데 일단 IDA로 열어보았다. 32bit 파일이고, main 함수는 별 거 없었다. 이렇게 vuln()함수만 덜렁 있고, 들어가보니 fgets함수로 1024만큼 입력을 받는게 코드의 전부였다. snprintf함수에서 format stirng bug 취약점이 발생할 것 같다. 우선 전형적인 fsb를 푸는 방식대로 입력을 줘 보았다. 이렇게 두 번째에 41414141(AAAA)이 나왔고, 이 부분을 이용할 수 있을 것 같다. 사실 이 문제를 풀기 전, fsb가 이해가 잘 되지 않아서 많은 블로그들을 돌아다니며 공부를 꽤나 오랫동안 했는데 그 덕분에 잘 이해를 하게 되었다. 다시 한번 풀어보면서 차근차근 풀이 과정을..
HackCTF의 두 번째 문제. IDA로 디컴파일한 코드이다. 첫 번째 문제와 마찬가지로 NX만 걸려있다. s의 크기가 8Ch로 140바이트인데 fgets로 133바이트만큼만 입력을 받고, 그 이후에 ebp-Ch에 존재하는 v5가 실행된다. fgets로 입력을 받기 때문에 버퍼 오버플로우가 불가능하다고 생각되어 어떻게 풀어야 하나 보던 중 함수 목록에 shell이라는 함수가 보였다. v5가 실행되는 부분에 shell의 주소를 덮어준다면 문제를 풀 수 있지 않을까 싶어서 코드를 짜보았다. 8C(140) - C(12) = 128바이트만큼 dummy를 넣고 그 이후에 shell의 주소를 넣어보았다. 끗
HackCTF의 첫 번째 문제이다. mitigation은 NX만 걸려있어 쉘코드를 실행시키지 못한다. IDA로 디컴파일한 코드 fgets로 s에 입력을 받고, v5의 주소를 보여준다. v5 != 67305985이고, 동시에 v5 != 3735928559 이면 You are on the right way!라는 문구를 출력해주는데 불가능한 조건문이므로 넘어가자. 아래 조건문을 보면 위 조건문의 조건 중 하나만 충족하면 쉘을 획득할 수 있는 모양이다. 그런데 숫자가 좀 이상하다 싶어 16진수로 바꾸어 보았는데 deadbeef였다. s는 ebp-34h, v5는 ebp-Ch에 위치하므로 34h(52) - Ch(12) = 40 s에 dummy 40바이트를 넣으면 그 다음 값으로 v5를 덮을 수 있을 것이다. 그래서..