본문 바로가기

pwnable44

[HackCTF] (Pwnable) 내 버퍼가 흘러넘친다! 풀이 main 함수다! Name 과 Input 을 입력받는데, Name -> read함수로 0x32 만큼, Input -> gets함수로 입력을 받는다. 그렇다면 gets 함수에서 입력을 받을때 BOF(Buffer Over Flow) 가 발생할 수 있다. gets 로 입력을 받을때, return주소까지 값을 채워넣어 return 주소에 shell code 를 작성해 넣자. checksec 로 확인해보면 아무런 메모리보호기법이 적용되어있지 않다. 그렇다면 이제 payload 를 작성해보자. 쉘코드 주소 정하기 return 주소 구하기 쉘코드 짜기 exploit 코드 짜기 (python) [ 1 ] 쉘코드의 주소는 전역변수인 name 으로 정했다! [ 2 ] [ ebp ] [ ret address ] main 함.. 2020. 3. 11.
[HackCTF] (Pwnable) Basic_FSB 풀이 문제파일을 ida로 열어보면 main함수가 있다. main함수에는 특별한점이 없으니 vuln함수로 넘어가자 var_808 에 입력을 받고, snprintf로 var_408 에 400만큼 출력하고 printf 로 var_408 을 출력한다. 하지만 코드에는 이상한 점이 있다. 바로 (%s 나 %d 같은)서식문자를 사용하지않는점인데, 이점은 포멧스트링 버그(Format String Bug) 로 이어질 수 있다. 포멧 스트링 버그는 문자열을 입력받을때 사용자가 서식문자를 입력하면 그 서식문자에 따라 출력이 된다. 한번 문제서버에 서식문자를 입력해보자. AAAA %x %x %x %x 를 입력하면 그대로 출력되지않고 서식문자에 따라 16진수값들이 나오게된다. 이 16진수값들은 왼쪽부터 차례대로 스택에서 esp+4.. 2020. 3. 6.
[HackCTF] (Pwnable) Basic_BOF #2 풀이 먼저 문제파일을 아이다로 열어보면 입력은 ebp-8c 에 받고, ebp-c 를 호출하는걸 보면 ebp-c에 함수주소를 덮어써야 문제가 풀리는걸 직감적으로 알수있다. 그러면 무슨함수를 덮어써야할지 함수 리스트를 보는중에, 쉘함수를 실행시켜주는 shell 함수를 찾아냈고, 주소는 0x804849b 이다. 8C- C = 80h (128) 이므로 최종 payload = (python -c "print 'a'*128 + '\x9b\x84\x04\x08' ";cat) | nc ctf.j0n9hyun.xyz 3001 쉘을 얻고 cat flag를 할수있게된다. 2020. 3. 3.
[HackCTF] (Pwnable) Basic_BOF #1 풀이 hackctf에서 풀어보는 첫번째 포너블이다. 재밌겠다ㅎㅎ 문제파일을 ida로 열어봤다. 사진은 짤렸지만 fgets에서 stdin으로 입력을 받고, buf의 내용과 check의 주소를 출력해준다. check와 0x4030201을 비교하고 같으면 0xDEADBEEF와 비교한다. 그것도 같으면 you are on the right way ! 을 출력한다. 하지만 check가 두개의값을 동시에 만족할수는 없으니 눈속임에 불가하다. 두 값을 비교해 맞았든 틀렷든 loc_8048543 으로 이동하고 check와 0xDEADBEEF를 비교한다. 맞으면 Shell을 열어준다. GDB로 열어보면 버퍼의 주소는 EBP-0x34이고, check의 주소는 EBP-0xC이다. fgets로 입력받기때문에 버퍼오버플로우가 발생하.. 2020. 3. 3.