공격의 특징들이 언어의 특징을 많이 따라간다.XSS 를 이용하는데 PHP의 특징을 이용하긴 쉽지않다. · XSS → Javascript → 불특정 다수를 대상 · Server script language → php 를 이용 php는 특정한 타겟(서버..)을 대상으로 공격이 가능하다.php를 이용해서 취약점이 발생했을경우 타겟이나 공격의 형태가 어떻게 변하는지 확인해보도록 하자. PHP 자체의 취약점 1). php 파일 업로드 취약점 - php 소스파일이 서버에 존재 - 웹 브라우저에서 접근이 가능 이 두가지 조건이 성립될 때 php 업로드 취약점을 이용하여 공격이 가능하다.다시말하면 둘중 하나를 막아두면 이 공격은 성립하지 않게된다. 파일은 php를 통해 어떻게 업로드 되는지 직접 확인해야 공격을 이해할..
이번엔 XSS 의 변종에 대해 알아보도록 하자. CSRF : Cross Site Request Forgery - 사이트간 요청 위조 - HTML태그를 사용하는 XSS의 변종기법이다. - HTML상에서 img, embedded, iframe, ... 등 많이쓰는 태그를 사용하여 공격한다 - 2008년 옥션의 개인정보 유출사건에서도 관리자 계정을 탈취하는데 이 공격기법이 사용되었다. - 공격이 어렵지 않기때문이 널리 쓰이는 편이다. 공격에 들어가기 앞서서 가장 먼저 선행되어야 할 것이 있다. 소스코드 분석 관리자페이지를 분석해보자. # 이게 관리자 페이지인데 사용자 레벨을 변경한다거나, 사용자를 삭제한다거나가 가능하다.이것들이 관리자의 고유 권한 중 하나라고 할 수 있는데, 꼭 이 페이지에서만 사용자의 레벨..
Client-script language - HTML, javascriptServer-script language - PHPSQL 우리가 다뤘던 언어들이다. 이중에서 우리는 먼저 Javascript 를 이용한 취약점에 대해 알아보자. XSS : Cross Site Scripting - 사이트를 교차해서 스크립트를 발생시킴. - 게시판을 포함한 웹에서 자바스크립트같은 스크립트 언어를 삽입해 개발자가 의도하지 않은 기능을 작동시키는것. - 클라이언트측을 대상으로 한 공격 XSS의 등장 배경에대해 알아보자면 1995년 '넷스케이프' 사에 의해 자바스크립트가 도입된다.과거에는 넷스케이프의 점유율이 80퍼센트 이상이었을때가 있었고, 그렇기 때문에 그당시 주류였던 넷스케이프에서 최초로 자바스크립트를 도입하게 되므로..
게시판 설치게시판은 제로보드를 사용해 실습을 진행해보도록 하자. 제로보드 - PHP로 작성된 공개게시판이고 , 무료였다. - 개발자가 NHN으로 넘어가면서 XE라는 새로운 웹 플랫폼을 만들었다. - 한때 엄청난 인기를 끌던 게시판 플랫폼. 요즘의 '워드프레스'와 비슷한형태의 툴이라 보면 된다. - 보안상의 문제로 현재는 제로보드 사용을 권장하지않는 추세이지만, 그렇더라도 여러 측면에서 잘 만들어진 툴이다. - 그 XE는 제로보드를 만들면서 있었던 보안이슈를 설계시부터 고려해서 만들었다고 하나, 제로보드만큼의 인기를 끌고있지는 못하는듯 하다. 따라서 우리는 취약점 분석이 목적이기때문에 제로보드를 이용하여 분석을 해보도록 하자. 구버전의 제로보드를 다운받아 리눅스에 설치하도록 하자. # 위에 첨부된 파일을 ..
상속 : 클래스와 클래스간에 계층구조를 형성할 수 있는 기능이다. - 클래스는 다른 클래스를 상속받아서, 상속받은 클래스를 확장한 클래스로 만들어서 사용할 수 있다. - 상속을 받게되면 부모클래스의 멤버변수, 멤버함수들을 물려받아서 사용할 수 있다. - 단, 부모에 private 으로 지정되어있는 변수나 함수는 사용할 수 없다. 다중상속 : 여러 부모를 상속받을 수 있다. # 위와같이 부모, 자식 클래스를 생성해주었다. # 자식클래스의 객체를 생성시에 부모-자식 간 생성자와 소멸자의 실행순서를 알아보자부모 생성자 → 자식 생성자 → 자식 소멸자 → 부모 소멸자 순서로 진행된다. # 상속구조에서의 생성, 소멸자 호출 순서생성자 : 부모 -> 자식소멸자 : 자식 -> 부모 # public : 어디에서든 접근..
지금까지 DB에 저장했으니 DB에서 꺼내 게시물을 출력해주도록 하자. # 지금까지의 게시판.현재는 임시로 표를 긁어다가 콘텐츠를 변경하여 제작하였으나, 실제 게시판의 내용을 보여줄 수 있도록 작성해보자. # DB에서 저장된 데이터를 가져오는 과정. index.php 에서는 db를 가져다 쓴적이 없기때문에, 메인화면(index.php)에서 저장된 내용을 가져다 쓰기위해선먼저 db.php 를 include 해주어야한다. simple_board_post 테이블에서 내용을 가져와야 하므로 SELECT문으로 쿼리를 던져준다.이때, 게시판은 가장 마지막에 올라온 글이 최상단에 기재되어야하므로, 정렬을 다시해서 작성해준다.(order by no desc). while문으로 return되는 데이터가 없을때까지 반복문을..
# 지난번까지의 write_ok.php # 지난번까지의 write.php write.php에서 텍스트 및 파일을 첨부하고 업로드 하면 write_ok.php 로 파일이 넘어가는 방식이다.POST방식으로 데이터를 전송하게 된다. 파일을 첨부할땐 enctype="multipart/form-data" 를 사용해서다양한 데이터 타입에 대한 처리가 가능하도록 설정해줘야한다. 이번엔 이어서 write_ok.php 에서 전달받은 데이터를 DB에 입력하는부분을 구현해보도록 하자.사실 상당부분 이전내용과 유사하기때문에 완성코드를 바탕으로 설명을 적어보겠다. # write_ok.php #세션값을 체크해서 비정상적인 접근을 차단한다. #file은 임시경로에 저장이 되게된다. 파일 업로드시 최초로 아파치 내의 임시경로에 저장..
- 게시글 작성 : write.php -> write_ok.php: 로그인 한 사용자만 게시글 작성 - 게시글 제목, 게시글 본문, 게시글 작성 시간, 첨부파일(파일 업로드), 조회수 - 게시글 삭제 : delete.php: 본인이 작성한 게시글만 삭제 가능 - 게시글 수정 : view.php -> update.php: 본인이 작성한 게시글만 수정 가능TIME함수 사용해서 게시글 작성 시간. write.php : 입력폼 만들고 submit하면 write_ok.php 로 게시글 제목은 text 쓰고 게시글 본문은 text area 쓰면 된다. 지난번에 이어 Write 기능을 구현해보도록 하자.Write 는 로그인 한 사용자만 사용 가능하게 하도록 설계하였으므로, index.php 파일을 수정해준다. # 현..
설계도 1. 기능 설계1). 회원가입 : register.php -> signup.php(여기서 정보입력) (여기서 정보처리) - 아이디, 패스워드, 이메일 - 중복된 아이디는 존재하지 않는다. - 빈 입력값도 허용하지 않는다. 즉, 아이디 패스워드 이메일 모두 입력해야함 2). 메인 화면 : index.php - 로그인 : signin.php- 아이디, 패스워드 만 입력받아서 올바른 사용자면 세션만 만들어 줄수 있으면 된다.- session: user_no, user_id, is_login=1 or 0 - 전체 게시물 목록 확인: 로그인 하지 않은 사용자도 목록 확인은 가능 - 게시물 확인 : view.php: 로그인 한 사용자만 게시글 확인 - 게시글 작성 : write.php -> write_ok...
아주 간단한 게시판 1. 기능 설계 1). 회원가입 : register.php → signup.phpregister.php : (여기서 정보입력)signup.php : (여기서 정보처리) - 아이디, 패스워드, 이메일 - 중복된 아이디는 존재하지 않는다. - 빈 입력값도 허용하지 않는다. 즉, 아이디 패스워드 이메일 모두 입력해야함 2). 메인 화면 : index.php - 로그인 : signin.php · 아이디, 패스워드 만 입력받아서 올바른 사용자면 세션만 만들어 줄수 있으면 된다. - 전체 게시물 목록 확인 · 로그인 하지 않은 사용자도 목록 확인은 가능 - 게시물 확인 : view.php · 로그인 한 사용자만 게시글 확인 - 게시글 작성 : write.php → write_ok.php · 로그..