구멍난 자바스크립트 보안

· 18년 전 · 3504

 

로컬파일로 접근

①번의 방법은 GET방식때문에 막혔습니다 그러면 자바스크립트를 우회하면서 POST방식으로 보내는 방법은 없을까요? 물론 있습니다

웹브라우져는 "소스보기" 라는 좋은 메뉴가 있습니다 있는건 적극 활용합시다 ㅎㅎ

소스보기한 후 바탕화면에 저장하여 약간 손을 보았습니다

즉 입력값을 체크하는 자바스크립트를 무력화 시키면서, action을 수정해 주었습니다

 

C:\Documents and Settings\Administrator\바탕 화면\client.html

<script>

/* 입력한값이 13자리인지 체크 후 전송 */

function validateValue() {

    return true;
}

</script>

 

<form name=f method=post action="http://www.jakartaproject.com/html/process.jsp" onsubmit="return validateValue()">
주민번호 <input type=text name=register_no> <input type=submit name=btn value=submit>
</form>

 

 

웹화면은 다음과 같겠죠

T200602211140519907749_jpg

"submit"버튼을 클릭합니다 ^^

 

역시나 자바스크립트를 거치지 않고 process.jsp에 13자리수가 아닌 "22"값을 무난히 보냈습니다

T200602211140519918590_jpg

 

그럼 서버쪽에서는 "어이쿠 이런 헤더정보도 체크해야 겠군" 하고 다음 코드를 추가해 버릴겁니다

즉 레퍼러값이 null인 경우는 허용할수 없다는 것이죠

 

http://www.jakartaproject.com/html/process.jsp

<%@ page contentType="text/html; charset=euc-kr" %>

 

<%

if (!"POST".equals(request.getMethod())
   return;


if (request.getHeader("referer") == null)
   return;

String register_no = request.getParameter("register_no");
%>

 

헤더정보 <%=request.getHeader("referer")%><br><br>
주민번호 <%=register_no%>

그럼 위와같은 소스가 될것입니다

그럼 과연 위 소스가 안전할까요?

 

HEADER값 조작

그렇다면 HEADER값을 조작해 봅시다 어떻게 조작할 수 있을까요?

여러가지 프로그램들이 있지만 그중에 Achilles 라는 proxy server를 이용하여 조작해 보겠습니다

Achilles라는 proxy server는 웹브라우져와 서버간의 HTTP 세션을 중간에서 가로채어 원하는대로 수정한 후 보낼수 있도록 해주는 작으면서도 강력한 프로그램입니다

 

※ 참고

Achilles 문서를 보면 맨 첫줄에 나오는 문장입니다

"Achilles is a tool designed for testing the security of web applications"

이 프로그램은 웹어플리케이션의 보안 테스팅을 하는데 작성되었으므로 테스팅용으로만 사용합시다

 

다운로드

http://www.mavensecurity.com/achilles

 

우선 위에서 작성한 바탕화면에 저장된 C:\Documents and Settings\Administrator\바탕 화면\client.html 를 실행한 결과를 Achilles가 Intercept한 결과입니다
T200602211140520230177_jpg
여러 가지 헤더정보들이 보이며 쿠키값까지 조작할수 있습니다

하지만 위의 헤더정보에는 referer값이 없습니다 그래서 referer체크에서 null이 나와 로직에 걸립니다

그렇다면 referer정보를 추가해 줍시다

T200602221140603109108_jpg

파랑색으로 줄쳐진 부분을 에디팅하여 추가해주었습니다

Referer: http://www.jakartaproject.com/html/input.html

그런다음 "Send"버튼으로 전송합니다

T200602211140519964661_jpg

짠~

그러면 조작된 헤더정보를 알아채지 못하고 헤더의 referer값을 가져오는군요!

 

 

4. 서버쪽 로직 추가!

위에서 자바스크립트를 우회하는 몇가지 방법들을 알아보았습니다

결론은 하나입니다 즉! 서버쪽에서도 동일하게 체크해 주어야 합니다

 

<%@ page contentType="text/html; charset=euc-kr" %>

 

<%

String register_no = request.getParameter("register_no");

 

if (!"POST".equals(request.getMethod())
   return;


if (request.getHeader("referer") == null)
   return;

 

if (register_no.length() != 13)

   return;
%>

 

헤더정보 <%=request.getHeader("referer")%><br><br>
주민번호 <%=register_no%>

 

그렇다면 서버쪽에서만 체크하고 클라이언트에서는 체크할 필요가 없다고 생각할지도 모르지만,

그만큼 서버쪽으로 오는 request를 줄이면 더더욱 좋겠죠

자잘한것 하나때문에 서버쪽 부하를 줄수 없는 노릇아니겠습니까?

 

자 이러이러 하고 저러저러한 이유로 우리는 이제부터라도 클라이언트에서는 자바스크립트로,

서버쪽에서는 또 서버쪽 스크립트로 사용자가 입력한 값에대해 유효성을 검증해야 하는것을 알았습니다

로직이 복잡한 경우 가뜩이나 자바스크립트도 복잡한데 그 로직을 서버쪽에서 다시한번 만든다는게 힘들다는거 다들 압니다 하지만 안전한 웹페이지를 만들기 위해 다같이 노력해야 되지 않겠습니까?

[이 게시물은 관리자님에 의해 2011-10-31 16:57:14 JavaScript에서 이동 됨]
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
18년 전 조회 3,525
18년 전 조회 3,318
18년 전 조회 3,197
18년 전 조회 2,817
18년 전 조회 4,169
18년 전 조회 5,518
18년 전 조회 3,763
18년 전 조회 3,204
18년 전 조회 3,623
18년 전 조회 2,278
18년 전 조회 2,711
18년 전 조회 3,940
18년 전 조회 2,870
18년 전 조회 4,382
18년 전 조회 2,097
18년 전 조회 2,537
18년 전 조회 2,427
18년 전 조회 3,788
18년 전 조회 3,850
18년 전 조회 2,592
18년 전 조회 2,664
18년 전 조회 2,995
18년 전 조회 2,825
18년 전 조회 2,038
18년 전 조회 2,201
18년 전 조회 4,851
18년 전 조회 4,199
18년 전 조회 2,827
18년 전 조회 2,383
18년 전 조회 2,887
18년 전 조회 2,359
18년 전 조회 3,527
18년 전 조회 2,198
18년 전 조회 1,985
18년 전 조회 1,838
18년 전 조회 1,660
18년 전 조회 3,257
18년 전 조회 4,582
18년 전 조회 4,858
18년 전 조회 2,145
18년 전 조회 3,602
18년 전 조회 3,320
18년 전 조회 4,608
18년 전 조회 3,251
18년 전 조회 4,250
18년 전 조회 3,940
18년 전 조회 3,627
18년 전 조회 3,027
18년 전 조회 2,924
18년 전 조회 3,505
18년 전 조회 2,162
18년 전 조회 2,103
18년 전 조회 5,506
18년 전 조회 2,691
18년 전 조회 2,437
18년 전 조회 2,737
18년 전 조회 2,084
18년 전 조회 3,071
18년 전 조회 1만
18년 전 조회 1,929
18년 전 조회 2,841
18년 전 조회 2,874
18년 전 조회 2,131
18년 전 조회 2,975
18년 전 조회 3,974
18년 전 조회 2,934
18년 전 조회 2,315
18년 전 조회 6,038
18년 전 조회 3,664
18년 전 조회 6,339
18년 전 조회 2,433
18년 전 조회 2,359
18년 전 조회 2,376
18년 전 조회 3,327
18년 전 조회 3,190
18년 전 조회 1,978
18년 전 조회 3,713
18년 전 조회 1,628
18년 전 조회 1,367
18년 전 조회 1,391
18년 전 조회 1,546
18년 전 조회 1,635
18년 전 조회 3,418
18년 전 조회 2,268
18년 전 조회 1,719
18년 전 조회 2,116
18년 전 조회 4,615
18년 전 조회 2,342
18년 전 조회 2,985
18년 전 조회 1,975
18년 전 조회 3,473
18년 전 조회 1,843
18년 전 조회 7,658
18년 전 조회 3,309
18년 전 조회 1,289
18년 전 조회 2,318
18년 전 조회 3,530
18년 전 조회 2,376
18년 전 조회 2,147
18년 전 조회 2,771