Java | SpringBoot

내 페이지 해킹(?)!

pushpush 2020. 8. 7. 21:52

취약점 결과 조치
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

 

[sqlmap] sqlmap 사용법

출처:http://lureout.tistory.com/60 https://brunch.co.kr/@leesmain/8 https://brunch.co.kr/@leesmain/9 ali의 sqlmap을 사용해보자 (취약점 있는 사이트 주소) (sql injection (blind) 메뉴에서 submit을 한..

horae.tistory.com

이거로 하려고 했는데 왜

이게 뜰까요...... 으아아앙ㅇ아아아아아아

 

스누핑이랑 스푸핑도 찾아봤는데여.... 이건 아직 제가 할만한 게 아닌 거 같아요,,,,

 

 

안녕하세요~

제 페이지입니다!

기능별로 문제를 일으켜볼건데요! 제 페이지는

가입, 로그인, 게시판, 글쓰기, 글읽기, 댓글달기, 댓글수정, 내 정보 수정, 포인트랭킹

이렇게

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 파일을 열어준 후 

 

위의 사진처럼 바꿔줍니다!

그러면

이렇게 바뀝니다!