2024. 1. 13. 15:40ㆍInformation Security 정보보안/Web Security 웹 보안
배울내용:
리눅스 기초 취약점
OS 종류 노출
ServerTokens Prod
웹서버 대표오류
intitle : index of intext :
에러메세지 구분 보호하기
banner grabbing 방어
ErrorDocument 설정
TCP Flag
3way handshake
DocumentRoot
제가 지금 부터 작성하는 모든글은 제가 공부기록용이기 때문에 정확하지 않을수 있음을 알려드립니다.
틀린게 있으면 댓글로 써주시면 고치겠습니다.
User => SHELL => KERNEL => OS
이걸보면
user (자연어) 가 shell 을통해서 기계어로 바뀐다
자연어를 기게어로 바꾸어주는 라이브러리를 가지고 있다고하는데
이 SHELL 이라는 녀석중 하나가 bash shell 이다 이를 명령어 해석기라고 불린다 .
그리고 운영체제 (OS) 에 전달한다
SHELL은
sh => ksh => bash => csh => zsh
순으로 발전해왔다
bash 부터 자동 완성기능이 생겼고
zsh에서는 패키지를 알아서 설치를 한다
명령어 해석기
user(자연어) => SHELL => 기계어
Kernel HW/SW 를 연결해주는 핵심 프로그램
TCP FLAG
몇가지 용어중 가장 기본중에 기본인 TCP FLAG를 알아보자
- URG (Urgent): 긴급하게 처리 (응급, 최우선 1순위)
- ACK (Acknowledgment): 이 플래그는 패킷이 확인 응답(Acknowledgment)을 포함하고 있음
- PSH (Push): 데이터를 가능한 빨리 상위 계층(어플리케이션 계층)에 전달해야 함을 의미 (응급보단낮음, 새치기)
- RST (Reset): 연결을 강제로 초기화
- SYN (Synchronize): TCP 연결 설정을 위해 사용
- FIN (Finish): 데이터 전송이 완료
이 플래그들은 TCP 연결의 수립, 데이터 전송, 그리고 연결 해제 과정에서 중요한 역할을 합니다.
기본중에 또다른 기본은 3 Way handshake 이다
클리이언트 에서 서버로 SYN 을 보내면
서버에서 클라이언트로 ACK/ SYN을 다시보내고
클라이언트에서 다시 서버로 ACK 를 보낸뒤에 연결을한다
일단 vm mini(centos) 를 키고 방화벽을 꺼준다
systemctl disable firewalld 영구 정지 (껏다켜도 내려감)
그리고
네트워크 툴 설치
yum -y install web-tools
(이떄부터 ifconfig,netstat -lntup 사용가능)
웹서버 설치
yum -y install httpd*
(systemctl restart httpd 하면 설정된거 적용됨)
기본 웹서버 취약점
루트란 ?
2가지의 의미가 있는데
관리자 (리눅스 ) 와 최상위 계층을 말한다
vi /etc/httpd/conf/httpd.conf 로 가보면
최상위 계층이
DocumentRoot /var/www/html 로 되어있는걸 볼수있다
즉 , html 파일이 이경로에 저장된다는걸 알수있다
이 경로는 웹 서버의 기본 디렉토리로서, 웹 페이지 파일들(HTML, PHP, 이미지 등)이 이 위치에 저장
예를 들어, 웹 브라우저를 통해 http://your-server.com/index.html 주소로 접근하면, Apache 서버는 /var/www/html/index.html 경로에 위치한 파일을 찾아 사용자에게 제공하고 Apache 서버 설정 파일(httpd.conf 또는 apache2.conf 등)에 이 지시어를 포함시켜 설정을 할 수 있다
이젠 한번 실제 window에서 구글이나 edge를 켜서
192.168.10.100 ( centos Server) 를 쳐주면
이런식으로 뜰것이다
자이제 다시 centos 로가서 cd /var/www/html 로 가준뒤에
그리고 html 경로에
cat > index.html
Server 입력후
Ctrl+C
이렇게 만들어주고
그뒤에 다시 webpage 킨거를 F5 눌러보면
아까 만들었던게 보이게 된다
다시 돌아와서 html 경로에
mkdir php 한뒤에cd php 로가서
이렇게 만들어준다
그뒤에 다시 f5 눌러서 웹페이지 보면
이런식으로 나온다
그리고 phpinfo.php 를 클릭하면
아까 만들었던 코드가 노출이 된다
그런데 phpinfo() 가 어떤 매서드를 실행하는것 같은데 뭔가 안된것같다
다시 돌아와
서버에 웹언어를 실행하기 위해서는 해당 라이브러리를 설치해줘야한다
yum -y install php-*
systemctl restart httpd (서버를 실행하여 php를 적용)
그런데 설치하다가 에러가 뜰수도있다
자세히 보면 php-mysql 와 php mysqlnd 와 충돌이 난것같다
그리고 친절하게 아래쪽에 --skip-broken을 쓰면 문제를 해결할수있다고 한다 그럼
yum -y install php-* --skip-broken
을 해버리면 제대로 설치가 된다
그리고 다시 웹사이트로가서 f5 누르면 php version 뭐가 나오는걸 볼수가 있다
리눅스 기초 취약점
1. OS 종류 노출
공격 : Banner Grabbing (telnet [ip] 80)
이제는 cmd 를 열어서 telnet 192.168.10.100 80 하면
이렇게 Bad Request 라고 뜬다
(Telnet 설치안되있으면 제어판/윈도우추가.제거 / 텔넷 클라이언트 클릭후 써보자
참고로 Window11운영체제에서는 위처럼 설정해도 안될것이다 그때는 그냥 기존에 kali에다가 진행하자 )
CVE (Common Vulnerability Exposure) 로 들어가면
어떤 취약한 내용들을 리스트가 잘되있으니
여기서 submit 하면
이렇게 나오는데 CVE - 발생년도 - 일련번호 로 표시가 된다
그리고 이런 취약점이 저때 발생했다고 보면된다
https://cve.mitre.org/cve/search_cve_list.html
여기서 검색가능하니 한번 입력해보자
이제 centos 로 다시 돌아와
vi /etc/httpd/conf/httpd.conf 로 들어간뒤에
ServerTokens Prod 를 추가해준다
그리고 systemctl restart httpd
한다음에
이렇게 하고 엔터후 아무키나 누르면
이렇게 아까처럼 비슷하게 나오는걸 볼수있다
그러나 이번엔
이렇게 Full 로 나오는게 아닌 prod 즉, 웹서버 이름만 나오도록해서
major 이상부터는 모르도록 설정할수있다.
그러면 여기에 웹서버의 대표오류같은게 있는데
400 Bad Request
잘못된 요청
403 Forbidden
권한오류
404 Not Found
파일없음
500 Internel Error
설정오류
참고로 200은 성공이다
그런데 만약 이러한 에러가 뜨면 404 인지 403 인지 구분이 된다
그러다 보안 이슈가 발생할수있음으로 이것도 구분이 안되게
vi /etc/httpd/conf/httpd.conf 에서
ErrorDocument 403 /index.html
ErrorDocument 404 /index.html
로 바꿔준다 그러면 403 에러나 404 에러가 뜨면
전에 index.html 로 만든
이게 보여지게 될것이다
이것으로 어떤 에러가 떳는지도 구분이 안되게 할수있다.
취약점
Directory Listening : 웹에 파일목록 리스트
[ Google dock ]
intitle : index of intext : 이력서
이걸 이제 구글 검색에 입력하면
이런식으로 되어있는것들을 볼수가 있다 그리고 이걸 클릭하게 되면
이렇게 그 홈페이지에서의 파일도 알수있고 가끔 어떤 것들은 parent Directory로 이동할경우
root 까지 가서 /etc/passwd 에있는 개인정보들이 털릴수가 있는 위험이 있다
그래서 다시 vi /etc/httpd/conf/httpd.conf 에서
Options Indexes FollowSymLinks 를 해주면 이러한 공격에 당한다
indexese 는 디렉토리 리스닝
FollowSymLinks 링크 연결
그래서
기존에것을 주석처리하고
Options
만 새로 추가해주고
systemctl restart httpd 해준다음에
다시 php 그거를 열어보면
아까 php version 어쩌구는 안나오고
이렇게 안보이게 된다
만약 아까
ErrorDocument 403 을 설정했다면
server 가 나온다
그럼 20000