[LOB] troll -> vampire

Posted by dw0rdptr
2015. 4. 1. 11:50 System/LOB
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
32
33
34
/*
        The Lord of the BOF : The Fellowship of the BOF
        - vampire
        - check 0xbfff
*/
 
#include <stdio.h>
#include <stdlib.h>
 
main(int argc, char *argv[])
{
    char buffer[40];
 
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
 
    if(argv[1][47!= '\xbf')
    {
        printf("stack is still your friend.\n");
        exit(0);
    }
 
        // here is changed!
        if(argv[1][46== '\xff')
        {
                printf("but it's not forever\n");
                exit(0);
        }
 
    strcpy(buffer, argv[1]); 
    printf("%s\n", buffer);
}
cs


1) ret중 bf와 ff체크 -> bff00000 보다 낮은 주소를 써야한다


스택은 높은주소부터 낮은주소로 거꾸로 자란다 

argv[2]까지 전달했다면 스택에는 argv[2],argv[1],argv[0] 순서로 저장이 된다 즉, 숫자가 높은 인자부터 스택에 저장이된다


higher address

| argv[2] |         

| argv[1] |       ↓ 스택의 진행 방향     

| argv[0] |

lower address


여기서 argv[2], 즉 세번째 인자가 길어지면? 그 다음 스택에 저장되는 argv[1]는 더 낮은 주소에서 시작하게 된다



vampire의 소스를 변경해 argv[1]의의 주소를 출력하도록 하는 vampir1를 컴파일하고 실행했다.
argv[2]를 주지 않았을 때 argv[1]는 bffffc65에서 시작한다


그리고 argv[2]에 A를 20000개 주었더니 주소가 낮아진 것을 확인할 수 있다.

90000개쯤 늘려보니 드디어 bf"fe"9cd4, ff가 아닌 주소가 나왔다.


페이로드와 Password







'System > LOB' 카테고리의 다른 글

[LOB] skeleton -> golem  (0) 2015.04.07
[LOB] vampire -> skeleton  (0) 2015.04.01
[LOB] orge -> troll  (0) 2015.04.01
[LOB] darkelf -> orge  (0) 2015.03.31
[LOB] wolfman -> darkelf  (0) 2015.03.25