반응형
문제분석 & 풀이
level18과는 다르게 간단한 코드 문제다.
buf[20]가 선언됐고 gets()로 입력값을 받아서 buf에 저장한다.
간단하게 페이로드 구성해서 BOF하는 문제인 것 같다. 페이로드 구성을 위해 attackme를 tmp로 복사하여 GDB로 분석했다.
분석해보니 0x28(40)바이트의 공간을 할당하고 있다.
[ebp-40]이 fgets()로 입력한 데이터를 저장하는 공간인 것 같다.
c 코드에서는 buf가 20바이트 할당됐지만, 실제 스택에서는 40바이트의 공간이 할당됐다.
어쨌든 40바이트의 공간이 할당됐고 스택의 구조를 만들어보면 다음과 같다.
buf와 SFP 사이에 20바이트 만큼의 더미가 존재한다.
페이로드를 구성해보자.
(python -c 'print "A"*44+"[셸코드 주소]"';cat) | ./attackme
페이로드 완성을 위해 eggshell로 셸코드를 적재하고 해당 주소를 구하자.
셸코드 주소 : 0xbffff2c2
페이로드를 완성하면 다음과 같다.
(python -c 'print "A"*44+"\xc2\xf2\xff\xbf"';cat) | ./attackme
페이로드를 실행해보자.
반응형