본문 바로가기
Hacking/Hacking Beginner Class (normaltic)

[해킹 비기너 클래스] 4주차 정리 (웹서버와 웹쉘)

by st-og 2023. 8. 11.

4주 차에서는 웹 서버 동작 방법과 웹 쉘에 대해 알아봤다.

 


Request & Response

웹서버와 클라이언트는 Request와 Response라는 것으로 서로 소통을 한다

 

클라이언트는 웹서버에게 필요한 요청을 할 때 HTTP Request를 웹서버에게 보내게 된다.

이때 요청은 url을 사용하여 웹 서버에게 보내진다

 

HTTP Request를 받은 웹서버는 해당 요청에 대한 작업을 마친 후 HTTP Respose를 클라이언트에게

보내게 된다.

 


url

예를 들어 이런 url 이 있다고 해보자

 

https://www.example.com:443/path/to/resource?param1=value1&param2=value2

 

 

우리는 이 url에서 어떤 요청이 있었는지 확인할 수 있다.

 

https://

→ 프로토콜을 나타냄, https 프로토콜을 사용하는 것을 알 수 있다.

 

www.example.com 

→ 요청을 받을 도메인주소 또는 ip 주소이다.

 

:443

→ 포트번호를 나타낸다. 443 포트는 https를 뜻한다

 

/path/to/resource

→ 서버에서 요청된 리소스의 경로를 나타낸다.

 

?param1=value&param2=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의 값을 넣어준다면?

 

cmd 변수에 id라는 값을 넣음

다른 명령어도 성공적으로 출력하는 것을 확인할 수 있다.

 


하지만 url 주소를 이용한 웹쉘은 한 가지의 명령어만 적용이 가능하기에 불편함이 많다.

그래서 웹쉘을 이용해 Reverse Shell을 사용하는 경우가 많은데

다음 4주 차 그것에 대해 알아보며 실습해 보겠다.