4주 차에서는 웹 서버 동작 방법과 웹 쉘에 대해 알아봤다.
Request & Response
웹서버와 클라이언트는 Request와 Response라는 것으로 서로 소통을 한다
클라이언트는 웹서버에게 필요한 요청을 할 때 HTTP Request를 웹서버에게 보내게 된다.
이때 요청은 url을 사용하여 웹 서버에게 보내진다
HTTP Request를 받은 웹서버는 해당 요청에 대한 작업을 마친 후 HTTP Respose를 클라이언트에게
보내게 된다.
url
예를 들어 이런 url 이 있다고 해보자
https://www.example.com:443/path/to/resource?param1=value1¶m2=value2
우리는 이 url에서 어떤 요청이 있었는지 확인할 수 있다.
https://
→ 프로토콜을 나타냄, https 프로토콜을 사용하는 것을 알 수 있다.
www.example.com
→ 요청을 받을 도메인주소 또는 ip 주소이다.
:443
→ 포트번호를 나타낸다. 443 포트는 https를 뜻한다
/path/to/resource
→ 서버에서 요청된 리소스의 경로를 나타낸다.
?param1=value¶m2=value2
→ 문자열들을 통해 추가적인 매개변수를 전달하는 데 사용된다.
"?"는 구분자로서 파일과 파라미터를 구분하고 "="는 변수에 들어갈 값을 알려주며 "&"는 각 매개변수를 이어준다
웹쉘
웹쉘이란 웹 서버에 공격자가 침투해 웹 기반 인터페이스를 통해 시스템을 원격으로 제어하고 조작하는 악성코드다.
쉽게 말하면 웹 화면에서 시스템 쉘을 사용하는 것이다.
예시를 보기 위해 가장 기초적인 웹 서버를 만들어 보았다.
URL 링크를 보면 php로 만들어진 사이트라는 것을 알 수 있다.
php에서 웹쉘을 사용하는 가장 간단한 방법은 system() 함수를 사용하는 것이다.
<?php system(); ?>
system 함수는 외부 프로그램을 실행시켜 주는 함수로서 운영 체제 명령이나 다른 실행파일을 호출이 가능한 함수이다.
예를 들어 pwd 명령을 하고 싶다면 pwd 명령을 함수 안에 넣어주면 된다.
<?php system('pwd'); ?>
해당 명령어를 소스코드에 추가해준다면
웹사이트에 pwd의 결과가 출력되는 것을 확인할 수 있다.
하지만 이렇게 될 경우 다른 명령어를 입력하기 위해서는 소스코드를 계속해서 바꿔줘야 한다.
그 문제를 해결하려면 파라미터를 사용해 값을 받아오게 만들면 된다.
php에서 파라미터에 값을 가져오는 방법은 $-GET 방식과 $_POST 가 있다.
우리는 URL 주소창에서 바로 값을 넣을 것이기 때문에 GET 방식을 사용하면 된다.
<?php system($_GET['cmd']) ?>
#cmd 변수에 값을 GET 방식으로 가져와 system함수에 넣겠다는 의미
소스코드를 해당 명령어로 바꾸어 주고 웹 사이트에서 URL 주소를 통해 cmd의 값을 넣어준다면?
다른 명령어도 성공적으로 출력하는 것을 확인할 수 있다.
하지만 url 주소를 이용한 웹쉘은 한 가지의 명령어만 적용이 가능하기에 불편함이 많다.
그래서 웹쉘을 이용해 Reverse Shell을 사용하는 경우가 많은데
다음 4주 차 그것에 대해 알아보며 실습해 보겠다.
'Hacking > Hacking Beginner Class (normaltic)' 카테고리의 다른 글
[해킹 비기너 클래스] 5주차 정리 (정보수집) (0) | 2023.08.17 |
---|---|
[해킹 비기너 클래스] 4주차 Practice (0) | 2023.08.11 |
[해킹 비기너 클래스] 3주차 Practice (0) | 2023.08.09 |
[해킹 비기너 클래스] 3주차 정리 (Shell, Shell 획득법) (0) | 2023.08.08 |
[해킹 비기너 클래스] 2주차 정리 (네트워크에 대해) (0) | 2023.07.21 |