R4mbb
LOB - level1 [gate -> gremlin] 본문
들어가서 소스를 확인해보니,,, strcpy에서 취약점이 터지는걸 알 수 있다.
프로그램을 실행 해보자.
실행할 때 인자로 값을 1개 이상 넘겨주어야 하고, 인자가 그대로 출력이 된다.
gdb로 까보자.
main함수 프롤로그 다음에 스택이 0x100만큰 확보가 된걸 볼 수 있다.
그 다음 cmp에서는 [$ebp+8]과 1을 비교한 뒤 피연산자1이 피연산자2 보다 크면 아래 jg에서 점프하게 된다.
소스코드상 if(argc < 2) 부분에 해당한다.
gdb에서 확인해보자.
확인해보니 피연산자1의 값이 더 크다. jg에서 <main+38>로 점프하게 된다.
그리고 밑에 strcpy까지 가서 스택을 살펴보자.
여기서 스택 맨 위에 들어있는 주소값이 buffer이고 바로 위 [esp+0x4] 부분이 argv[1] 이다.
buffer는 아직 선언만 되고 사용되지 않은 변수이기 때문에 쓰레기 값이 들어있는걸 확인할 수 있다.
이제 익스를 해보자.
필요한 정보들을 정리해보자.
1. buffer 주소
2. ret 주소
3. buffer와 ret 사이의 거리
한번 구해보자.
1. 0xbffff918
2. 0xbffffa1c
3. 0xbffffa1c - 0xbffff918 = 260
그렇다면 "A"와 shellcode 합 260개 채운 다음 ret에 buffer 주소를 넣으면 된다.
이렇게 쉘이 따지는걸 볼 수 있다.
'Write-up > LOB' 카테고리의 다른 글
LOB - level6 [wolfman -> darkelf] (0) | 2021.05.20 |
---|---|
LOB - level5 [orc -> wolfman] (0) | 2021.05.20 |
LOB - level4 [goblin -> orc] (0) | 2021.05.20 |
LOB - level3 [cobolt -> goblin] (0) | 2021.05.20 |
LOB - level2 [gremlin -> cobolt] (0) | 2021.05.14 |