25번은 제가 풀면서 처음 본 취약점의 문제여서 문제풀이와 함께 취약점에 대한 설명도 같이 추가했습니다.
처음 들어가면 이런 화면이 나옵니다. 이때 url을 보면 file=hello라는 것을 볼 수 있습니다. 그래서 당연히 여기에 flag를 넣어보았습니다.
플래그는 코드에 있다는 말외에는 아무 정보를 얻을 수 없었습니다. 그래서 뭘까 하고 소스코드도 뒤지고 잡다한 삽질을 하다가 라업에서 무슨 취약점으로 풀었는지를 보았더니 LFI라는 취약점을 이용해 소스코드의 내용을 확인해서 푸는 문제라는 것을 보았습니다,
이게 무슨.... 이런 생각이 들긴했지만 일단 취약점을 알았으니 다시 구글링을 했습니다.
그렇게 해서 LFI 취약점을 정리했습니다.
일단 이 취약점은 php 코드상에서 include함수를 사용했을 때 적절한 필터링이 없을 경우에 사용가능한 취약점이라고 합니다. 그리고 이 취약점이 활용간으한 경우라면 서버 관리자가 소스코드를 공개하지 않아도 해당 소스코드의 내용을 가져올 수 있다고 합니다. LFI 취약점 중에서도 이 문제에서 사용된 취약점은 php wrappers를 사용한 취약점입니다.
php wrappers를 사용한 공격은 여러 가지 방법이 존재하는데 그 중에서 많이 사용되는 방법이 코드를 base64 인코딩이 되어 있는 값을 가져오는
php://filter/convert.base64-encode/resource=[파일이름]
을 이용하는 방법을 사용합니다. 이 구문을 file에 넣어주게 되면 해당 소스코드를 base64형태의 인코딩되어 있는 값을 가져오게 됩니다.
이 값을 구글에 base64디코딩이라고 겁색한 후 아무 사이트를 이용해서 디코딩해주면 소스코드의 내용은 아래와 같습니다.
<?php
echo "FLAG is in the code";
$flag = "FLAG{this_is_your_first_flag}";
?>
이렇게 flag을 알 수 있습니다.
일단 이 문제를 풀면서 파일 소스코들 읽어오는 취약점은 처음 보았습니다. 그래서 이 문제를 보면서 고민하다가 라업에서 취약점을 찾아본 이유가 완전히 처음보는 유형의 문제일거라고 예상했습니다.
이 문제를 풀면서 새로운 취약점과 공격 기법들을 배울 수 있는 문제여서 좋았던 것 같습니다. 얻은 플래그를 webhacking.kr 페이지의 auth에 넣어주면 문제가 풀립니다.
'웹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 27번 (0) | 2021.02.17 |
---|---|
webhacking.kr 26번 (0) | 2021.02.17 |
webhacking.kr 24번 (0) | 2021.02.17 |
webhacking.kr 21번 (0) | 2021.02.17 |
webhacking.kr 19번 (0) | 2021.02.06 |