libc version troubleshooting 2

일단 사건의 발단 부터 말하자면,

C
(pwn) amemoyoi ~$ cat Dockerfile
FROM amd64/ubuntu:22.04

도커 파일의 다음과 같이 적혀 있으면서 시작되었다. 일반적으로 해쉬가 적혀 있어 항상 고정적인 환경이 되는데

이 문제는 해쉬가 아니라 다음과 같이 일단 공식 도커 빌드를 가져온다.

따라서 언제 도커를 빌드 하냐에 따라 환경이 바뀐다.

이는 나중에 libc_base를 구할때 정말 치명적인 상황이 펼쳐져서 내가 무려 2일간 고생하는 원인이 된다.

정확한 상황을 설명하자면,

현재 저 도커를 빌드하면 다음과 같은 libc를 얻게 된다.

libc6_2.35-0ubuntu3.11_amd64

_IO_2_1_stdin_0x21aaa00x1f0d10

이 libc에서 0x21aaa0 의 오프셋을 가지므로 나는 lb를

당연히 lb = leak__IO_2_1_stdin_ - _IO_2_1_stdin_offset 이런식으로 계산하고 익스를 짰다.

그런데.. 이문제는 2023.11.18 문제이다. 따라서 그 당신에 아마 도커를 빌드하면 다른 libc를 가진 환경이 펼쳐 졌을테고 그버전이 아마..

libc6_2.35-0ubuntu3.4_amd64

_IO_2_1_stdin_0x219aa00x1efd10

이 버전인것으로 추정된다… 심지어 0x1000의 오프셋차이로 lb의 끝 12비트 000 검사에서도 걸리지 않는다.

따라서 앞으로 도커 파일을 유심히 보고 저런식으로 되어 있으면 의심을 해보고 먼저, libc 버전을 확실히 파악하고 가는 것이 중요하다. 나도 이것을 의심하고 난뒤로

다음과 같이 가능한 경우의 수의 libc를 모두 확인해 보았다.