전에 보았던 취약점으로 회원가입시 아이디, 비밀번호, 이메일의 생성 조건이 없어 굉장히 간단한 아이디 비밀번호 이메일을 통한 회원가입이 가능했다. 따라서 최소한의 조건을 설정하고자 로그인 php파일에 다음 코드를 추가하였다. if (preg_match('/^[a-zA-Z0-9_-]{5,20}$/',$username)) { // 아이디가 유효한 경우, 회원가입 처리 수행 } else{ echo "아이디는 5자 이상 20자 이하의 대소문자 알파벳과 특수기호 -,_ 만을 사용할 수 있습니다. "; echo "돌아가기"; exit; //아이디가 유효하지 않을경우 php종료. } if (preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@..
우선 현제까지 로그인 페이지를 만들었다. 이 로그인페이지의 취약점이 있는지 물론 현제 전부 알진 못하겠고 부실할게 뻔하지만, 그래도 한번 저번에 해봤던 쿠키 변조를 통해 찾아보도록 하겠다. mysql> SELECT * FROM accounts; +----+----------+--------------------------------------------------------------+---------------------+ | id | username | password | email | +----+----------+--------------------------------------------------------------+---------------------+ | 1 | admin | $2y$..
Mitigation 즉. 보안조치의 일종인 Same Origin Policy(SOP, 동일 출처 정책)은 다른 출처에서 로드 된 리소스에 대한 엑세스를 제한하는 보안 매커니즘을 말한다. 쿠키에는 인증상태를 나타내는 중요한 정보가 포함되어 브라우저 내부에 저장된다. 브라우저는 이를 이를 웹 서비스 접속시 자동으로 쿠키를 헤더에 포함시켜 보내도록한다. 이는 일정기간동안의 로그인 유지를 시켜주지만 이를 이용하여 악의적인 페이지가 사용자의 웹 서비스로 요청을 보내게 되면 헤더에 쿠키를 포함해 보내게 될 것이다. 다시말해서 웹사이트가 인증을 거치지 않고 사용자로 요청을 보낼 수 있다는 것이다. 이를 방지하기 위해서 클라이언트 측은 악의적인 페이지가 데이터를 읽을 수 없도록 하는 것이다. i출처(Origin)은 프..
로그인페이지에서 admin admin으로 로그인을 해보았다 그 결과 당연하게도 로그인되지 않고 다시 로그인 페이지로 돌아왔다. 로그인 페이지를 살펴보자;. guest/guest라는 디폴트계정이 있다는 주석이 있다. 이를 쿠키를 통하여 변조해보도록 하겠다. intercepte를 통해 쿠키의 username=guest에서 username=admin으로 변경하였다. 그리고 새로고침을 하였더니 admin으로 로그인 되었다.
0123을 그냥 넣어봤다. 바로 메인페이리로 리다이렉트된다. 바로 intruder로 보내서 0000부터 9999 까지 돌렸다. 그러나.. 한시간 가까이가 지났는데 600개.. 이건 코드 짜야된다. 5분만에 나왔다. 심지어 이 코드 다 짜고 돌릴때까지 burp swite는 2000개를 채 넘기지 못했다. 이렇게 로그인 성공. 아래는 파이썬 코드이다. # 파이썬에서 HTTP 요청을 보내기 위한 라이브러리 중 하나인 Requests 라이브러리를 가져오는 코드 import requests url = 'http://ctf.segfaulthub.com:1129/6/checkOTP.php' cookie = 'session=68748617-2024-4f43-a512-a0abd78d737e.KIJqW4N_2wR8M2at..
우선 로그인을 해보자. 4와 다르게 MIMEtype가 json인 respons에서 로그인 성공여부를 알려주지 않는다. 개발자모드를 이용해 페이지를 살펴보면 login.js가 없다. 혹시나 싶어 bootstrap.min.js를 뒤져봤지만 로그인 성공여부를 판단하는 코드가 없다. 그래서 그냥 admin으로 비밀번호 아무거나 로그인해봤다. 성공이다..
우선 취약점을 파악하기 위해 Request와 Respons를 살펴보도록 하자. 주석으로 보면 두번쨰 페이지에 'Show password protected content down here' 라는 주석이 달려있다. 하지만 그곳에서는 Home, About, Contact라는 메뉴와 Segfault라는 저작권 정보가 포함된 푸터, IE10에서 발생하는 뷰포트 버그를 처리하는 스크립트를 로드하는것밖에 확인 할 수가 없다. 그런데 첫번째 페이지에서 userId가 매개변수값으로 받아가게 된다. 이를 변조하게 되면 다음과 같이 화면이 바뀌게 되는 것을 알 수 있다. 사실 여기서 잠깐 해매었다. 기껏 userId를 바꾸고 나서 새로고침을 하지 않아 화면이 바뀌지 않았던 것이다. 진짜 장난 안치고 이걸로 9시간 반 가량을..
우선 css파일 만드는건 좀 오래걸릴거같아서 뼈대만 만들어보았다. 우선 tool파일에 만들어둔 php파일이 있다. chack_er.php db_conn.php sessionck_open.php 위 파일들은 include()나 require_once()를 통해 불러올것이다. 우선 기본페이지 모습이다. index.php 게시판 1 게시판 2 게시판 3 게시판 4 참고로 이하 모든css파일에는 폰트만 들어있다. 게시판 4개와 세션없을때 로그인/회원가입이 보이고 세션이 있을 떄 마이페이지와 로그아웃이 있다. 로그인 php파일이다. syjij.php User Profile Username: Email: Logout 돌아가기 유저이름과 이메일이 보이게 하였다. 후에 비밀번호 및 아이디 변경기능과 회원탈퇴 기능도 추..