맨 처음에 웹에 접속하면 /login이 보인다 username과 password를 입력하여 전송하는 로그인 시스템으로 보이는데 현재 가지고 있는 계정 정보가 없으므로 우회해보자 sql문은 평균적으로 SELECT username, passwd FROM users WHERE username = '$input_user' AND passwd = '$input_pass'; 의 구조를 가진다 하지만 이렇게 하면 사용자의 입력이 그대로 들어가기에 마치 쿼리문처럼 동작하도록 하는 입력을 삽입할 수 있다 또한 sql에서는 and가 or보다 높은 우선순위를 가져 A AND B OR C라고 한다면 (A AND B) OR C로 인식하기에 passwd에 'or'1'='1'을 입력하면 앞의 비교 조건을 무시하고 1=1을 비교하여 참이라고 판단하기에 로그인이 되게 된다
로그인을 하면 /upload에 접근할 수 있고 파일을 업로드 할 수 있다 업로드된 파일을 그대로 return하게 되면 임의의 코드를 실행가능하며 초기 침투에서는 쉘을 휙득해야 하기에 webshell을 php파일로 생성하여 업로드하면 /uploads/filename의 경로에서 webshell이 실행가능하다
휙득한 웹쉘로 서버를 탐색할 수 있다 ls -l을 사용하면 리눅스에서 숨겨진 파일을 확인할 수 있으며 .myfile을 살펴보면 숨겨진 ssh id와 pw를 확인할 수 있다
ssh를 이용하여 휙득한 id와 pw로 서버에 접근 가능하고 .myfile에 있는 note를 읽어보면 linux-kernel이 업데이트가 필요하면 5.10이라고 한다 5.10에 존재하는 취약점 중 dirty-pipe 취약점을 이용하기위해 github에서 exploit 코드를 복사하고 compile한 후 실행하면 root 쉘을 휙득 할 수 있다 또 다시 ls -l을 통해 디렉토리 내에 있는 숨겨진 파일을 확인하고 secret을 읽어 flag를 휙득한다