목록전체 글 (424)
오래 못 할 짓 하지 않기

v4에 입력을 하고, v5를 1337로 만들면 되는 게 아닌가 싶었는데생각해보니 v5가 changeme가 아니다. changeme는 전역변수라서 스택에 없음. 그럼 우리가 해야하는 건, changme의 위치를 알아내서 그 안에 1337을 넣어주면 된다.우리가 입력한 내용이 buf에 들어가고, 그 buf를 printf() 에 넣기 때문에 1. changeme의 주소 구하기2. 해당 주소에 1337 넣기
보호되어 있는 글입니다.
보호되어 있는 글입니다.

heap을 넘치게 해서 overflow로 조작하는 형태인 것 같다.41번 줄을 통해서 공격하는 것 같은데메모리가 세부적으로 어떻게 구성되어 있는지 알아보자. heap은 동적할당이기 때문에 동적 디버깅을 해야한다.따라서, IDA로는 한계가 있음. gdb를 써야한다. gdb로 heap을 봤을 때 생김새는 위와 같다.이 둘의 거리는 0x30 , 10진수로는 48만큼 차이가 난다. (근데 어떻게 -8바이트 하는거지?) 우린 scanf를 통해 ptr 공간을 넘어서 over 위치에 get_shell()을 넣으면 된다.구상하는 모습은 아래와 같다. 우선 get_shell()은 0804867B 위치에 있다. (Return address로 쓸 예정)

이건 메모리 구조를 한 번 봐야겠다.구조체가 어떤 크기로 저장되는지 확인해보자. v3 = idxv5 = ages = flag_buf[56]buf = name[16] 으로 인식된다. 저장되는 형태를 보면 오른쪽 사진과 같다. 취약점은 2번 메뉴에서 %s이다.printf("%s" , 변수)일 때는변수에서부터 시작해서 \n 나 NULL을 만날 때까지 읽는다. 만약 못 만나면? ▶ 계속 읽는다. 그럼 우리는 [ buf - age - flag_buf ] 사이에 NULL이나 \n이 없게 해주면buf ~ age ~ flag_buf 사이에 있는 '문자열' 을printf ("%s", my_page.name) 로 뽑아올 수 있다. 우리가 할 건1. buf(name)를 채우고2. age에 NULL이 생기지 않게 꽉 채..

Correct가 나오는 곳을 보면 v11 이 322367503인지 비교한다. ??? 회고 맞을 생각하고 배에 힘주고 있었는데그냥 풀려서 약간 서운하다.

엄.. 가로는 긴데, 세로는 짧다가로 512높이 256 픽셀이다. 이걸 조작할 수 있나? 찾아보니 이 이미지에 대해 Hex값 조절을 할 수 있댄다. Image 파일을 열었을 때 크기가 이렇게 구성되어있다. 가장 첫 4비트는 Width , 그 다음 4비트는 Height이다. 첫 번째 줄은 다음과 같은 정보를 가지고 있다. - 처음 8bits > 89 50 4E 47 0D 0A 1A 0A : PNG에 대한 시그니처다. - 그 뒤 4bits > 00 00 00 0D : Chunk Data의 크기- 그 뒤 4bits > 49 48 44 52 : Chunk Type = IHDR 둘째 줄에서부터 가로/세로/ ... 이런저런 정보가 있..

54586b6458754f7b215c7c75424f21634f744275517d6d 이게 단일 바이트와 XOR를 해서 만들어진 문장이라고 한다. [ XOR 특징 ]XOR은 두 번 하면 원형으로 돌아온다.그럼 단일 바이트 값들로 XOR 다시 해보면 원래의 값으로 돌아올 것이다. 이상한 건 둘째치고 너무 긴데,,생각해보니 16진수로 넣은 게 아니라서 다시 바꿔보자.입력만 바꾸니 됐다. 회고 XOR 특징을 잘 알고있어서 다행이다.사전 지식이 많아야 보안에 유리할 것 같다.모르면 배우고, 알면 적용할 줄 알아야겠다.

1. 42번 줄에서 name에 대해 20바이트 읽는다고 함.2. read_str를 보면, 그 안에서 read를 인자로 받은 크기만큼(20바이트) 읽음. > name[0:19] 가 채워짐3. 다 읽은 후에는 name[20]에 '\0' 을 추가함. 따지고 보면 name[20]에게 주어진 만큼 다 채우고 name[21]에 \0을 채운 셈이다. name[20] 이후는 int age의 위치이기 때문에 여기에 \0이 들어간 것이다.그럼 우린 name을 다 채우고 int 자리에 0을 넣으면 46번 조건문을 통과한다. name[20] = name[0:19] 에 넣을 수 있음. 근데 문제에선 name[0:20]까지 넣게 해줌. 그럼 int age까지 침범한다. 따..

이번 문제는 흐름이 보인다. (맨날 이래놓고 다 틀림)center_name는 24 bytes 인데, 읽는 건 100 bytes임. 그럼? 우리가 조작하기 위해서 넘어야 하는 것은center_name(24) + dummy(4) + cmd_ip(72)이다. 24번 줄을 보면 cmd_ip의 시작~8번째까지 "ifconfig"면 system()이 실행되는 것 같다. 근데 막상 까보니 크기가 약간 좀 다른 것 같다.뭐 return address까지 가는 건 아닌 것 같고다른 문자열을 덮기만 하면 되니까 이걸로 계산해보자. 우린 buf에 입력한다.그리고 s1에 있는 값이 "ifconfig" 인지 비교한다. 100만 읽는데 return address로 가는 건 너무 멀어서 안 될 것 같다.system()을 노리..