shortcut when got overwrite & /bin/sh
우리가 ROP 코드를 작성할때 “/bin/sh” 글자가 필요하며, 또한 동시에 got overwrite가 필요한 경우가 있다. 예를 들어 read@got를 libc의 system 함수로 바꾸고 system 함수의 인자로 “/bin/sh” 가 필요한 경우이다.

알겠지만, RELRO가 꺼져있다면, got 영역에 쓸 수 있고 got 영역은 vmmap 상에서 data 영역에
속한다. 좀더 상세하게 말하자면, 아래와 같다.
Full RELRO가 적용되면 .got 섹션이 포함된 .data 영역 일부가 “읽기 전용(Read-Only)” 으로 바뀝니다.
하지만 전체 .data 섹션이 전부 read-only가 되지는 않습니다
어쨌든, 이런식으로 got를 쓸 때 data 영역에 “/bin/sh” 한번, got 에 한번씩 작성하면 페이로드도 길어지며
두번이나 보내야한다. 이럴때,
C
p.send(p64(system)+b"/bin/sh\x00")다음과 같이 작성한다음에
C
payload += p64(pop_rdi)
payload += p64(read_got+0x8)
payload += p64(read_plt)다음과 같이 한번에 사용하면 좋다.