목록Wargame (107)
Pwnstar
세 번째 문제 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를 덮을 수 있을 것이다. 그래서..