9주차 모의 해킹 공부이야기
9주차
SQL Injection
우리가 SQL Injection을 Point를 찾을 때
눈에 보이는 곳 아무 곳에 다 SQL Injection test를 해본다고 다 Point가 되는 것은 아니다.
예를 들면 ‘(작은 따옴표) and ’1’=’1 즉 ‘and ’1’=’1을 해본다거나 무지성으로 파라미터나 눈에 보이는 들어갈 만한 곳에 저것을 다 넣는 것은 아니다. 그런 SQL Injection이 일어나는지 일어나지 않는지를 어디에서 확인해야 할까?
바로 웹페지에서 SQL 질의문을 사용하는 곳에서 test를 해봐야 한다. 이것을 염두하고 해봐야한다. 큰 계략적으로
파라미터 ~~을 들고 가고 있구나, 이 파라미터가 어떻게 사용되고 있구나. SQL 질의문에서 어느 포이트에 들어가고 있구나 이거 정도는 알고 있어야 한다. db에서 데이터 가져오는 곳 혹은 회원가입, 로그인, 아이디 중복체그 부분, 게시판 리스트 부분
즉, select ~~~~ from ~~~~ where 뭐 keyword라는 컬럼이 있다고 하면 like 도 있을 것이고
select ~~~~ from ~~~~
where keyword like ‘%_____%’ 이것을 생각을 해야한다.
만약
boardRead.php?boardIdx=65 (게시판을 본다면)
select from
where idx=64+1
where idx=’______‘
두 경우가 나오는데 64+1이면 숫자이면서 ’(작은 따옴표)가 안들어가는 것을 알 수 있다
65 and 1=1
65/**/and/**/1=1 (공백이 없는 쿼리) 로 되는 경우도 있다.
64+1
64+1은 되는데 65 and 1=1는 안된다 하면 그럼 특정 문자열 and 1=1 이런 패턴이라든가 and 자체가 안될 수 있으므로 대소문자를 섞어 사용하거나 하면 aNd이런식으로 하면 되는경우도 있다.
2.서버측 SQL 질의문 추론후 공격 시도해야 한다.
*SQL Injection
SQL 삽입 공격
우리가 실행하고 싶은 질의문을 삽입하는 공격이다
ex) db를 털고 싶다
select * from member 회원정보가 들어있는 테이블에서 정보를 빼오는 것
*SQL 질의문 데이터가 화면에 출력되는 경우
-> 무조건 Union SQL Injection을 사용해야 한다.
*SQL Error 메시지가 출력되는 경우
-> Error Based Injection
*(위에 어느 경우도 아닌 경우)Blind SQL Injection 로 한다.
참과 거짓 조건을 삽입 해서 한글자 한글자 씩 우리가 실행하고 싶은 (추출하고 싶은 데이터) 첫 번째 글자가 이거야 ? 저거야? 물어보면서 시작 하면서 참과 거짓에 응답 결과가 다르다는 것을 이용하는 것임
*SQL Injection 대응방법
Prepared Statement
프리페어스테이츠먼츠를 사용하면 되지만 이것이 완벽하지는 않다
예외) order by (정렬부분, 컬럼부분. 테이블 부분) 이부분에서는 prepared statement를 적용하지 못한다.
그렇기 때문에 white List 기반의 필터링을 해주어야 한다.
*모의 해킹 할 때 주의할 점
insert, delete, update 구문은 왠만하면 진행하지 않는다.
위 구문에서는 or 금지, 주석 금지, 1=1이다. (회원가입페이지, 글 수정 페이지, 게시글 삭제 페이지 이런 것이 사용되는 것이다) 만약 테스트 한다고 하면 and로 해라
2. 주석 남용 금지 (남발금지)
3.데이터 변조 금지
**
sotingAd=, (case+when+ascii(subtr((select+user+from+dual)1,1))=0+then+1+else+(1/0)+end)
soting이나왔으니 정렬 order by를 생각해야 하고 =뒤에 ,(콤마)가 나온 것은
order by title deac (혹은 asc)를 지정해 주는 파라미터에 들어가고 있구나라고 알고 있어야 함
뒤에 보면 case when이 조건절이니 앞이 참이면 1을 출력 그렇지 않으면 1나누기 0 논리 에러를 유발하고 있다. 즉 거짓일때는 에러가 나오도록 된다. 위소스 에러는 오라클에서 에러 유발법이다 ,db마다 에러 유발법이 다다르다. mysql에서는 1나누기 0은 문법에러로 여긴다.
2. sotingAd=ASC;if+substring((select%20user_name()),1.1)=%27a%27+waitfor+delay+%270:0:1%27&startDt=&endDt=&keyword=
똑같이 sotingAd로 들어가는데 asc로 들어갔다. ;(세미콜론)사용하고 if가 작성되었다. 그리도 뒤에 ~~~~ 가다가 waitfor delay가 포인트이다.
(참이면 딜레이를 주는 타임 베이스트 에스큐에 인젝션이다)
Time Based SQL Injection
waitfor delay
ex) 참인 경우 5초 휴에 응답하라 거짓인 경우 바로 답하라 이런 경우임다. 서버에서 응답하는 응답시간을 가지고 하는 sql injectionn이다.
이것은 서버에 장애나 에러가 날 수 있기 때문에 권장은 아닌다. 정 없을 때 해야 함
‘---------------------------------------------------------------------------------------------------
필터링
만약 회사에서 공백 필털링을 사용하고 있다면
내가 사용할 것이 and 1=1인데 공백 제거 후 and1=1로 해서 db에 전달하면 문법 에러가 나기 때문에
and/**/1=1 이런 식으로 주석을 사용하여 다른 글씨를 작성해서 할 수도 있다.
괄호로 우회하는 경우도 있다
and(1=1) 방법은 많다.
--------------------------------------------------------------------------------------------------
*xss (크로스 사이트 스크립팅) 취약점 현업에서는 크사 라고도 함. 크스스라고도 함
클라이어트 측 크크립트 삽입하는 공격기법이다.
피해자 = 이용자
클라이언트 스크립트
=이용자 브라우저에서 실행
HTML, CSS, Javascript 가 있다.
HTML은 프로그래밍 언어는 아니지만 클리이언트 스크립트는 맞다
=> 악성 스크립트 (이용자의 브라우저에서 실행된다.)
공격방식
(클라이언트) 스크립트를 삽입해서 이용자의 브라우저에서 실행되게 만든다.!
EX) 그 브라우저에서 접속하는 로그 빼오기, 세션 빼오기, 그 브라우저에서 내가 원하는 코드를 실행하게 하는 것이다.
*XSS
스크립트 삽입 공격
*어떻게 스크립트 삽입힐까?
크게 2가지임
서버에 저장하는 전락
서버에 어코기능을 이용하는 전략
파라미터로 데이터를 날리는데 에코(메아리처럼) 박혀 날라오는 경우가 있다
서버에 저장하는 전략
회원가입, 게시판 글작성,
데이터가 저장돠고 그 데이터가 출력되는 곳,
게시판 글 작성 기능 -> ok -> 브라우저가 아닌 Burp에서 다 확인해야 한다.
Bu게 : normaltic
내가 적은 값이 나오면 즉, normaltic hello 데이터가 찍혀 오네 하고 알아채야 함
그럼 크사(크로사이드스크립트) 적용할 수 있다.
화면에 출력 안되도 내부적으로 주고 받기만 해도 된다.
서버 응답
작성한 데이터가 화면에 응답되는거 확인
특수 문자 체크
HTML 특수 문자 <’ “>가 인식하는가 확인
-> 다 사용할 수 있다. 어떤 경우에는 ‘나 ”둘중 하나는 안되는 경우가 있다.
3.javascript
HTML
<script>___</script>
javascript
POC : Proof Of Concept
우리는 여기에 크사 취약점이 존재합니다라는 것을 보여주고 싶은 것이다. 그래서 보여주기 용도로 사용하는 것이 POC코드이다.
우리가 보여주고 싶은 것은
우리가 삽입한 클라이언트 측 코드가 실행되는 것을 보여주고 싶은 것이다. 즉, 우리가 삽입한 코드가 이용자(사용자) 측에서 실행되는 것을 보여 주고 싶은 것임
왜 해커들은 해킹을 할 때 alert를 사용할까?
보고서 쓰기 좋다.
ex) alert(1)
___________________
xss (크사를 찾으라고 했더니-> alert만 찾음 막는곳도 있음
prompt
confirm
console.log ex) 실습 <script>alert(!)</script>
이 넷 중 하나 사용하면 된다.
크사 : javascript를 얼마나 잘 다루느냐에 따라 실력이 나뉨
서버에 저장하는 방식을 알아보았음 이것을 바로 Stored XSS(스토어드 크사)라고 함
저장형 크사라고함
서버에 스크립트를 저장하는 방식이다.
서버에서 반사되는 기능을 이용한 것(에코를 이용한 것) Reflected XSS(리플렉티드 크사) Reflected: 반사되다.
우라거 입력한 데이터를 서버에 보냈더니 서버는 그데이터를 그대로 포함에서 다시 응답하는것임
취약점 Point
즉, 파라미터 데이터가 서버응답에 삽입되어 오는 곳에서 확인 할 수 있음
ex) 아이디 중복체크
normaltic -> normaltic는 사용 가능합니다./ normaltic는 사용 불가능합니다.
normal -> normal은 사용 가능합니다. / normal은 사용불가능합니다.
검색페이지
ex) normaltic 검색 -> normaltic 검색 결과 ~가 있습니다. 혹은 ~건이 있습니다.
혹은 normaltic검색결과가 없습니다.
Reflected XSS 특징 무조건 같은 페이지임
(GET)request에 파라미터 입력한 값이 repond에 그대로 나오는지 보면 된다.
차이
Stored XSS
Stored XSS는 내가 스크립트를 삽입하는 요청과 그것이 화면에 출력되는 것이 다를 수 있다.
Stored XSS
저장하는 곳과 출력되는 곳이 다르다. 같은 곳도 있지만 보통 다르다.
Reflected XSS
삽입, 출력하는 곳이 같다.
?????????????????????????????
이게 왜 위험하지.....
Stored XSS : 광역기
-> 게시판 글 작성
->그 게시판 글을 읽는 사람에게 스크립트를 전달
-> 실행
Reflected XSS : 타켓팅
->링크를 전달해서 (클릭해야)공격함 .
->페이로드 : GET 메서드에 있어야 함
만약 POST로 되어 있다면 마우스 우 클릭 change request method 누르면 GET으로 바뀜-> 전달해보기
GET 메서드는 먹히지 않는 곳이 있다. 그런 곳은 우리가 볼 필요 없다.
GET으로 바꿔서 동작하면 더 TEST 해봐도 되지만 그게 아니면 굳이 해볼 필요 없다.
Bug Bounty XSS -> 돈 안쳐줌
Reflected XSS 보다 Std 가 더 쳐줌
Stored XSS -> 취약점에 따라서 돈 많이 줌
---------------------------------------------------------------------------------------------------
XSS
>스크립트 삽입
>피해자 웹 브라우저에서 실행
Stored
-Reflected
XSS => alert(1) : 실행행된다! 보여주기
취약한 URL
alert(1) 넣어 실행해보기
*취약점 보고서 작성해보기
제출 메일 : normalticpublic@gmail.com
9주차 과제
XSS 내용 정리
XSS 1,2,3,4,5,6 보고서 작성 -> 제출 : normalticpublic@gmail.com
3.웹개발 과제