cobolt
-
[LOB] cobolt > goblinWargame/Lord of Buffer Overflow 2021. 5. 22. 21:54
[LOB] cobolt > goblin 소스코드를 보니 이번에는 gets() 함수에서 취약점이 터지는데 gets() 함수도 strcpy()와 마찬가지로 문자열 길이 검사를 하지 않아 Buffer Overflow가 일어난다. 이번 문제도 쉘 코드를 아래와 같이 사용하면 될 것 같다. buffer [16byte] | sfp [4byte] | ret [4byte] | shell code 이전 문제들을 풀다 보니 자꾸 메모리 주소가 바뀌는 것 같아 segmentation fault (core dumped)를 일으켜서 처음부터 core 파일로 분석했다. 이런 식으로 ret위치가 0xbffffb10 인 것을 알 수 있었다. 그럼 이제 공격해보자. 이번에는 메인 함수의 매개변수가 아니라 gets()로 받기 때문에 (..
-
[LOB] gremlin > coboltWargame/Lord of Buffer Overflow 2021. 5. 22. 20:54
[LOB] gremlin > cobolt 우선 cobolt.c 코드를 보면 저번 문제와 동일하게 strcpy() 함수에서 취약점이 있는 것을 알 수 있다. 하지만 이번 문제에서는 buffer의 크기가 16byte이기 때문에 buffer에 쉘 코드를 넣을 수 없다. 그렇기 때문에 쉘 코드를 아래와 같이 사용해야한다. buffer [16byte] | sfp [4byte] | ret [4byte] | shell code 이런 식으로 쉘 코드를 ret 뒷 공간에 넣고 ret에 쉘 코드 주소를 넣으면 쉘이 실행된다. 그럼 쉘 코드가 들어갈 주소를 찾아보자. 스택에 buffer 크기만큼 16byte의 공간이 생긴 것을 확인했다. 취약점이 터지는 strcpy 부분에 break를 걸고 ret 위치를 확인했다. ret는..