티스토리 뷰

드디어 ! PPR 가젯을 제공하는 문제에 도달했습니다. 문제 보시죠.

크... 엄청나게 기네요...

중요한 곳은 두 곳이 있습니다. PPR(pop pop ret) 가젯과 setre* 계열 함수의 제공입니다.

즉, 간단한 ROP(Return Oriented Programming)의 개념을 이용한 문제라는 것을 알 수 있습니다 !

plt, got, ppr 등을 모두 알고있다고 가정한 후에 문제를 풀겠습니다.

먼저 공격 코드를 구성해보면,

| buf(268) | +

| strcpy@plt | ppr | printf@got+0 | system[0] | +

| strcpy@plt | ppr | printf@got+1 | system[1] | +

| strcpy@plt | ppr | printf@got+2 | system[2] | +

| strcpy@plt | ppr | printf@got+3 | system[3] |  +

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

위와 같이 구성하면 공격을 성공시킬 수 있습니다.

ppr 가젯을 사용하는 이유는 pop 을 두 번 수행하면 그 다음 strcpy@plt 로 이동하고,

ret 이 수행되면 다시 strcpy@plt 함수가 실행되면서 값을 계속 덮어쓸 수 있기 때문입니다.

이제 중요한 것은 각각의 가젯을 찾는 일입니다.

찾아야하는 것들은 c0, 07, 75, 00 입니다. 찾는 방법을 보시죠.

objdump 명령을 사용해서 찾을 수 있습니다만... 나오지 않는 가젯도 존재합니다.

그럴 때에는 아래와 같이 찾아주면 됩니다.

-s 옵션은 모든 내용에서 검색을 수행하기때문에 더 자세히 검색할 수 있습니다.

이제 모든 가젯을 찾았습니다. 정리해보죠.

system: 0x7507c0, /bin/sh: 0x833603, PPR: 0x804854f

strcpy@plt: 0x8048494, printf@plt: 0x8048424, printf@got: 0x8049884

c0: 0x8048420, 07: 0x8048154, 75: 0x80486fa, 00: 0x80483d4

입니다. /bin/sh 의 주소와 PPR 의 주소를 어떻게 찾았냐고 물으신다면...

PPR 은 위와 같이 찾았구요.

/bin/sh 을 찾을 때는 코딩해서 찾았습니다 ~~ 그럼 바로 공격해볼까요 ?

get down like that !

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함