[실습2-4] 인증 우회 공격을 통한 게시글 무단 삭제 실습
test 계정으로 로그인한 후, 관리자가 올린 게시글을 무단으로 삭제하고 싶을 땐 어떻게 해야 할까? test 계정으로 들어갔을 때 관리자가 올린 게시글을 수정, 삭제가 불가능하다. 그러나 test 계정으로 올린 게시글을 수정, 삭제가 가능하다.
일단 test 계정으로 등록한 게시글을 삭제하려고 하면 패스워드를 입력하라는 창이 뜬다. 그 창에 아무거나 누른 후 auth를 누르는 것을 burp suite로 잡아서 repeater로 보내볼 것이다.
그러면 이렇게 마지막 줄에 패스워드와, idx와 delete mode를 볼 수 있다. 우리가 지우고 싶은 게시글은 관리자가 작성한 비밀게시글인 idx 6번째 게시글이므로 7을 6으로 바꾼다.
입력한 패스워드가 참이어야 되므로 추가로 '+or+1=1%23을 써준다.
여기서 +는 공백을 의미하고, %23은 #을 인코딩했을 때 나오는 것이다. 그러면 패스워드가 통과되고, 6번째 게시글을 지우는 모드로 결과가 나올 것이다.
그렇게 해서 request를 send하면, 이런 response가 나온다. 삭제가 되었다.
다시 돌아가보면 비밀게시글이 삭제되었음을 알 수 있다.
코드가 어떻게 짜여있나 보기 위해 action.php 코드를 들여다보면, delete를 눌렀을 때 즉, 삭제를 하려고 시도했을 때 패스워드가 맞는지 확인하고, 바로 query문을 보낸다는 것이 보인다. 뒤의 if문을 보면 지금 게시글이 몇 번째 게시글인지 중요하지 않고 레코드가 있는지 없는지에 대해서만 중요하게 나타내고 있다.
웹페이지의 코드에 따라서 모든 게시글이 삭제될 수도 있다. 매번 다른 환경에 따라 다른 결과가 나타날 수밖에 없다.
만약 저기서 if문이 사라지고, query에
delete from {$tb_name} where idx={$idx} and password='{$password}'
이렇게 되어 있었다면?
idx는 6으로 되어 있을 것이고, password는 ' or 1=1#
이렇게 되어 있어서 앞의 and 구문은 거짓, 뒤의 구문은 참이 되어 모든 게시물이 삭제될 수도 있다.
[실습2-5] idx 파라미터가 취약할 경우 인증 우회 공격 방법
우리는 여태까지 패스워드 파라미터에 대해 공격했었다. 만약 idx 파라미터가 취약할 경우 어떻게 공격해야 할까?
우선 admin 계정으로 로그인한 뒤 다시 비밀글을 만들고, 로그아웃한 상태에서 비밀글을 보기 위해 패스워드를 아무거나 입력해보자.
버프스위트로 보낸 후, 패스워드를 입력하고 view를 하려고 했을 때를 리피터로 보내보자.
만약,
select * from board where idx=8 and password='a'
이렇게 되어 있다면, idx=8 뒤로 주석 처리를 해버리면 비밀번호를 몰라도 볼 수 있을 것이다.
이렇게 작성한 뒤 (주석 처리 #는 %23) send를 눌러 응답을 보자.
그럼 게시물 열람이 가능해진다! 그렇다면 이런 방법으로 관리자가 쓴 비밀글을 삭제할 수도 있을까?
test 계정으로 글을 하나 더 작성한 뒤, 아무 비밀번호나 누르고 (a) 버프스위트로 들어가서 마찬가지로 리피터로 보내준다. idx=9를 idx=8로 바꿔준 뒤에 #를 입력해야 주석처리가 되므로, 인코딩된 문자인 %23을 작성해줘보자.
이렇게 쓰고 send 한 후 결과를 보면
8번째로 쓴 게시글인 비밀글이 지워졌음을 확인할 수 있다.
결국은, 환경에 따라 패스워드의 취약점뿐만 아니라 다른 idx의 취약점도 공격할 수 있다. 사용자의 입력값으로는 모두 다 안전하게 대비해야 공격을 막을 수 있다.
'웹 해킹 & 시큐어 코딩' 카테고리의 다른 글
웹 해킹 & 시큐어 코딩 (9) (0) | 2025.01.17 |
---|---|
웹 해킹 & 시큐어 코딩 (8) (0) | 2025.01.17 |
웹 해킹 & 시큐어 코딩 (6) (0) | 2025.01.15 |
웹 해킹 & 시큐어 코딩 (5) (0) | 2025.01.15 |
웹 해킹 & 시큐어 코딩 (4) (0) | 2025.01.13 |