취약점 | 결과 | 조치 |
xss | O | htmlspecialchars함수 사용 |
sql injection | O | htmlspecialchars함수 사용 |
사이트 정보뜨는거.. | O | 파일수정함 |
- XSS
"<script>alert(\"hello!\");</script>"
-Sql Injection
'or 1=1; --
' ' or 1=1--
"or 1=1 --
or 1=1--
'or 'a'='a
" or "a"="a
')or('a'='a
sql' or 1=1--
sql" or 1=1--
+ or 1=1--
';--
- sqlmap
sqlmap을 해볼게요...
제가 노트북을 초기화한지 얼마 안 돼서 vmware을 깔긴 했는데 아직 준비가 안되어있어서... aws서버에서 진행했습니다...
할라했더니 저걸 깔라길래
sudo apt install sqlmap
을 입력해줘서 깔았습니다
num이 XSS공격에 취약하다네요...
저건 어뜨케 막지.....
https://horae.tistory.com/entry/sqlmap-sqlmap-%EC%82%AC%EC%9A%A9%EB%B2%95
이거로 하려고 했는데 왜
이게 뜰까요...... 으아아앙ㅇ아아아아아아
스누핑이랑 스푸핑도 찾아봤는데여.... 이건 아직 제가 할만한 게 아닌 거 같아요,,,,
안녕하세요~
제 페이지입니다!
기능별로 문제를 일으켜볼건데요! 제 페이지는
가입, 로그인, 게시판, 글쓰기, 글읽기, 댓글달기, 댓글수정, 내 정보 수정, 포인트랭킹
이렇게
9가지가 있습니다.
일단 가입은 되어있기때문에 admin계정으로 테스트를 하겠습니다!
로그인 & 회원가입 & 포인트 랭킹
로그인을 진행하면 이렇게 뜨는데요!
코드를 보면
이렇게 뜹니다! 한번 저기에 script를 추가해줘서 alert을 발생시켜볼까용ㅇ??
되는지 확인하기위해 "<script></script>"로 가입해보았습니당!
호옹 코드를 보겠습니다!
오홍 먹히네여
"<script>alert(\"hello!\");</script>"
을 이름으로 넣어봤습니다!
과연!
짠! alert이 발생했습니다!
근데 이름이 나오는 곳에선 모두 alert이 되네요!
그럼 이건 어떻게 막아야 될까여?!
먼저 point_ranking.php에서 막아볼까요?
if($_SESSION['name']) $_SESSION['name'] = htmlspecialchars($_SESSION['name']);
if($_SESSION['id']) $_SESSION['id'] = htmlspecialchars($_SESSION['id']);
이걸 이용할 겁니다!
이건 태그에 사용되는 특수문자( <, >, &, " )가 있으면 강제로 URL 인코딩을 해주는 건데여
이걸 point_ranking.php에 넣어주면!
이렇게 됩니당
그리고 회원가입에선 아예 저런 긴 코드가 안들어가게 글자제한을 수정해주겠습니다!
원래 이건데여 다들 한 15글자로 바꾸면 되지 않을까용?
이때 delete from users;를 해줬습니당
여기서 showyourself는 어차피 보여주는 공간이 없어서... 일단 자기소개이기도 하고 길게 냅뒀습니다!
그럼 이제
스크립트가 들어간 이름은 아예 가입이 안 됩니다!
sql injection을 해볼까여?
오잉 막히네
아 로그인 체크를 하는 부분에서 막아놨네요!
그럼 패스!
게시판
게시판 공격을 해보겠습니다!
이 게시판의 테스트 부분의 코드를 봐보면여!
이렇게 a태그 가운데에 공격이 된 것을 볼 수 있습니당!
그러면!
</a><a><script>alert("게시판공격!")</script><a>
이거로 공격해보겠습니당!
이걸 타이틀에 넣어볼게요~
성공! 그러면 이걸 막으려면 아까처럼 강제 인코딩을 해주면 되겠죠?
게시판엔 이 코드를 추가해줬습니다!
그랬더니 공격이 안되고 이렇게 뜨네요!
글읽기 & 댓글쓰기
그럼 글 읽기도 저걸 해볼까여?
댓글에서도 막아줬습니다!
글쓰기
글쓰기도 볼까요?
readonly는 읽기만 가능하고 수정이 불가능합니다!
required는
이렇게 공백일 때 제출하면 저런 알림을 뜨게 합니다!
저걸 없애고 작성해볼게요!
오잉ㅇ!
작성이 됐습니다!
저거는 제가 글작성 과정에서 타이틀 혹은 내용이 공백이라면 다시 쓰라는 문구를 출력하면 될 것 같아요!
정보수정
required랑 readonly를 조작해볼게여
이렇게 제출을 누르고 다시 로그인을 해보면~
아이디는 바뀌지 않았지만 이름과 비밀번호가 아무것도 없게 됩니다!
그럼 이건 코드에서 if를 이용해서 입력값이 없으면 입력 부탁드린다고 하면 될 것 같습니다
그런김에 회원가입, 글작성, 댓글작성에도 이 코드를 추가하면 좋을 것 같네요 :)
근데 제가 아이디, 이름, 비밀번호는 다 db에서 크기를 막아놨는데... 그 정보수정은 안막았거든여,,,?
근데 제 사이트에서 정보수정은 입력만 받고 출력되는 곳이 없어요... 그래서 정보수정은 공격을 어떻게 해야될 지 모르겠는데.... 긁적
그래서 넘어가겠습니다...
정보노출
아파치 버전 뜨는 것도 막아줄게여
cd /etc/apache2/conf-available
들어가서
security.conf 파일을 열어준 후
위의 사진처럼 바꿔줍니다!
그러면
이렇게 바뀝니다!
'Java | SpringBoot' 카테고리의 다른 글
SpringBoot + Gradle + Linode Object Storage 연동하기 (0) | 2022.08.24 |
---|---|
HTML & Internet (0) | 2020.07.09 |