[웹보안] 웹보안 1일차 - 오후
쌍용 강북 센터 모의해킹 및 웹보안
웹보안 관련 강의만 세번째 듣는다.
처음엔 KISA에서 듣고 두번쨰는 현대 모비스에서 듣고
세번째로 듣는데 내용은 대동소이 하다
1. 기술적 진단
- 웹취약점 진단 vs 소스코드 진단
1)웹 취약점 진단
로그인
계정 및 암호 찾기
회원가입
회사소개
공지사항
현장소식
2) 소스코드 진단
정책자료 http://www.moi.go.kr
---skip ---
웹취약점 진단기준
owasp top10, 10개
A1 ~ A10 (스캔레이의 룰정책에 보면 기본적으로 해당 정보가 있다)
진단 기준은 3년단위로 업데이트 된다. - 그러나 굵직한건 거의 동일 내용임
-----------skip -------------
HTTP 프로토콜
request
브라우저/http 프로토콜마다 request셋팅은 달라진다.
request 기타 메소드는 대부분 사용이 안되고 get/post만 가능 하게끔 구성 되어 있다.
restfull서비스 다 허용하면 공격자가 서버에 파일을 변경하거나 입력할 수도 있게 된다.
response (응답)
200: 정상응답
300:페이지이동
400:클라이언트 잘못된 요청
500: 서버쪽 에러
이러한 응답 코드를 노출하게 되면 공격자에게
어느 부분에서 에러가 났는지 알게 해주기 때문에
공격자에게 힌트를 줄 수가 있다.
에러 페이지는 알아서 잘 만들자.
--skip --
kisa 관련 보안 수업때 항상 등장하는 사이트.
--skip--
Sql injection
1. 일반 sql 인젝션
에서 로그인시에
ID는 대충 누가 봐도 관리자 아이디 일 것 같은
admin 입력 후
pw는
싱글쿼테이션인 ' 이걸 넣어보고 날려보자
그럼 sql 에러 메세지와 함께 쿼리도 보여 준다
이때 pw입력을
'or'1'='1
이라고 넣어주면
sql에서는
WHERE ID='admin' AND pw = ''or'1'='1'
이라고 인식하여 true값을 리턴하게 되며
admin 계정으로 로그인이 된다.
만약 싱글쿼테이션이 url 인코딩되어 전송되는 경우
프록시툴을 이용하여 HTTP 요청을 가로채서 값을 바꾼 후에 전송 한다.
2.블라인드 인젝션
webGoat -- http://localhost./WebGoat/attack?Screen=13&menu=1100
이름의 첫글자가 어떤 글자인지 추측 한다 뒤의 90은 대문자인지 소문자인지 구별하기 위함이며
90보다 작은경우 대문자 90보다 큰 경우 소문자 라고 생각 할 수 있다.
90은 대문자 Z의 아스키 코드값 이다.
1 | SELECT ASCII(SUBSTRING(name,1,1)) FROM pins WHERE cc_number = 4321432143214321 > 90 | cs |
->
1 | 101 and SELECT ASCII(SUBSTRING(name,1,1)) FROM pins WHERE cc_number = 4321432143214321 > 80 | cs |
이렇게 날렸을때 리턴되는 값이 밸리드인지 인벨리드인지 보고 글자를 판단 하도록 한다.
이런식으로 반복하다 어느정도 범위가 좁혀지면
1 | 101 and SELECT ASCII(SUBSTRING(name,1,1)) FROM pins WHERE cc_number = 4321432143214321 = 74 | cs |
이런식으로 날려준다
74에서 밸리드가 나온다면 아스키코드 74에 해당하는 글자가 4321432143214321라는
계좌번호의 주인 이름의 첫글자 라는 것을 알 수 있다.
이런식으로 substring 뒤쪽의 숫자를
1 2 3 | ASCII(SUBSTRING(name,1,1)) ASCII(SUBSTRING(name,2,1)) ASCII(SUBSTRING(name,3,1)) | cs |
등으로 바꿔가면서
한글자식 알아내면 해당 계좌번호의
주인 이름을 전부 알아 낼 수 있다.
다운로드 취약점
서버에 중요한 정보인 config 류의 파일이나
권한,DB접속 정보들이 있는 xml파일을 암호화 하거나 추가적인 권한조치를 취하지 않으면
다운로드 취약점이 발견되는 경우 해당 중요정보가 있는 파일을 다운 받아 해당 서버및 웹어플리케이션
중요정보를 공격자가 알 수 있게 된다
http://localhost./WebGoat/attack?Screen=57&menu=200
Bypass a Path Based Access Control Scheme
프록시툴을 이용해 특정 파일을 요청하는 패킷을 가로채
상대경로로 바꾼 후 톰캣 정보를 가져 올 수 있게 된다.
대충 프로젝트 몇개 하다보면 대부분의 웹어플리케이션의 폴더구조는
비슷비슷 하다는걸 알기 때문에 아래와 같이 추측이 가능 하다
ex) File=../../../tomcat/conf/tomcat-users.xml&SUBMIT=View+File
해당 파일의 정확한 위치를 알 수는 없지만 상대경로를 통해 올라가다 보면
얻어걸리기 때문에 중요 정보를 가져 올 수 있다.
서버보안 이전에 어플리케이션에서 저런 상대경로 요청을 막거나 중요 파일의 암호화를
하지 않은 경우 어렵지 않게 중요 정보가 공격자에게 노출 될 수 있다.
sql MAp 사용
sqlmap 타겟의 디비정보를 뽑아오는 유틸
파이썬기반이기 떄문에 파이썬을 설치 후 사용 하자
파이썬 2점대 버전으로 설치 하도록 하자
사용 방법에 대한 관련 블로그
https://brunch.co.kr/@leesmain/8
테스트 사이트
SQLMAP 명령어
sqlmap.py -u http://testphp.vulnweb.com/AJAX/infoartist.php?id=1 -v 3
뒤에 옵션을 -all --batch 로 주면
모든 공격을 다함
Session
http 는 stateless 프로토콜이다
그런데도 사용 하는 이유는 가볍고 빠르기 때문에
웹서비스에 적합하기 때문이다.
stateless이기 떄문에 클라이언트가 어떤놈인지 구분할줄 몰라서
http 에서 히든태그를 계속 날려줬었다
그런데 그건 보안에 취약하다
그러니까 히든태그에 담는 데이터를
넷스케이프에서 만든 쿠키에 담기 시작했다
그런데 사실 이것도 보안에 안좋음
클라이언트 로컬에 저장하기 떄문이다. 게다가 문자열정보만 저장 할 수 있다.
정 쿠키를 쓸떄는 httpOnly를 사용 하도록 한다.
그러니까
세션에 담아서 사용 하도록 하자
'Yame Programmer > 웹보안' 카테고리의 다른 글
[웹보안] 웹보안 3일차 - 오후 (0) | 2017.06.03 |
---|---|
[웹보안] 웹보안 3일차 - 오전 (0) | 2017.06.03 |
[웹보안] 웹보안 2일차 - 오후 (0) | 2017.05.27 |
[웹보안] 웹보안 2일차 - 오전 (0) | 2017.05.27 |
[웹보안] 웹보안 1일차 - 오전 (0) | 2017.05.20 |