Try to be the expert.

Ainsetin's Hacking & PS & Math

Hacking/HackCTF 24

HackCTF 내 버퍼가 흘러넘친다!!! Write-up

오늘은 Pwnable 3번째 문제, "내 버퍼가 흘러넘친다!!!"를 풀어보겠다. 우선 바이너리를 체크하니 아무것도 걸려 있지 않았다. 따라서 쉘코드를 충분히 사용할 수 있고, RET 변조가 가능하다. read 함수와 gets 함수가 있는데, 함수의 에필로그까지 간 다음 RET가 존재하므로 gets에서 BOF를 일으키면 된다. 그런데 s의 크기가 20byte밖에 되지 않아 쉘코드를 저장할 수 없다. 따라서 버퍼에 더미값을 넣고 쉘코드를 버퍼 밖에 저장한 뒤, RET를 변조하여 쉘코드 주소를 가리키게 하면 flag를 획득할 수 있을 것이다. 우선 gdb로 stack을 활용하기 위한 준비 과정을 거쳐보자. gets 다음 main+78에 break를 걸면 될 것이다. 0x41부분은 buffer이고, 0x42부분..

Hacking/HackCTF 2019.12.23

HackCTF Basic_FSB Write-up

이름만 봐도 포맷 스트링 공격을 해야 할 것 같은 비주얼이다. 그럼 풀이 시작해볼까...! checksec으로 확인하니 전혀 문제될 것이 없었다. 그럼 IDA로 까보도록 하겠다. vuln함수를 호출하는 것을 볼 수 있다. 그럼 들어가 봐야지! 보니까 snprintf로 format에 s의 내용을 복사하는 것 같았다. 진짜는 return줄이다. printf의 인자에 format의 주소가 있고, 다른 인자는 없다. 이때 사용하는 공격 기법을 FSB(Format-String Bug)라고 한다. F S B (Format-String Bug) printf에는 다양한 출력 포맷이 있다. %d, %s, %c, %f, %n 등이 존재한다. 그런데 우리가 기본적으로 보는 printf 함수의 사용법은 " printf("%d..

Hacking/HackCTF 2019.12.22

HackCTF Basic_BOF #2 Write-up

가즈아!! 이번엔 Basic_BOF #2를 풀어보겠다. binary의 보호 기법을 확인하니, 전 문제와 똑같이 NX가 걸려 있는 것을 볼 수 있다. 이 말은 쉘코드를 사용할 수 없다는 의미이기도 하다. 그럼 IDA로 까보자. 이번엔 main을 까 봤더니 그냥 sup함수를 호출하고 s를 입력받고 v5를 실행하는 간단한 함수였다. sup 함수는 그냥 s를 출력하는 함수였다.. shell 함수도 존재해서 디컴파일 해보았다. system 함수를 호출하는 함수이다!! 따라서 우리는 BOF를 일으켜 RET 변조를 해야 한다. 그런데 s의 크기는 16진수 8C, 즉 140byte이다... fgets에서 133byte밖에 입력을 못하기 때문에 RET 변조는 불가능하다. 결정적인 것은,, main에서 v5가 sup 함수..

Hacking/HackCTF 2019.12.22

HackCTF Basic_BOF #1 Write-up

HackCTF의 Pwnable 첫 번째 문제 Basic_BOF #1 문제를 풀어보겠다. 우선 binary가 주어져 있으므로 IDA로 까 보도록 하겠다. main을 디컴파일한 결과를 보기 위해 F5번을 누르면 이런 창이 뜬다. 코드를 보면, 정체불명의 v5값이 주어져 있고 비교를 하여 쉘을 딸 수 있는 기회를 제공한다. if문에 있는 규칙도 안보이는 저 세 숫자는 뭘 뜻하는 걸까? IDA에서는 숫자를 char나 hex, 8진수 체계로 변환할 수 있다. 저 숫자를 클릭하고 'H'키를 누르면...! 뭔가 의도적으로 넣은 듯한 글자가 보이기 시작한다!! 결론은, 우리는 Stack Buffer Overflow를 일으켜 v5의 값을 변화시켜야 한다. 실행하고 난 후 stack을 까 보도록 하자. 그런데, gdb를 ..

Hacking/HackCTF 2019.12.22