Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

R4mbb

LOB - level1 [gate -> gremlin] 본문

Write-up/LOB

LOB - level1 [gate -> gremlin]

R4mbb 2021. 5. 14. 00:49

들어가서 소스를 확인해보니,,, 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