인프런 커뮤니티 질문&답변
SQL Injection - Login
작성
·
42
0
ID 입력란에 페이로드(admin' AND 1=1 -- ) 삽입 시 정상적으로 플래그가 도출되었으나 ID에 'admin', PW 입력란에 페이로드(1' or 1=1 -- ) 삽입 시 플래그가 도출되지 않았습니다.
두번째의 경우
ID='admin'AND PW=' 1' or 1=1 -- ' 로 ID가 'admin'이고 PW가 쿼리로 인해 항상 참인데 왜 플래그가 도출되지 않는지 모르겠습니다.
답변 2
0
기존 쿼리는 `SELECT* FROM user WHERE username = '{username}' AND password = '{password}' 이며, 질문자님과 같이 pw1' or 1=1 을 입력하게 되면,
```SQL
SELECT * FROM user WHERE username = 'admin' AND password = '1' or 1=1 --
```
이런 식으로 실행이 되고, 연산에서는 OR 보다 AND가 우선이기 때문에
```SQL
SELECT * FROM user WHERE (username = 'admin' AND password = '1') or 1=1 -- #FALSE
->
SELECT * FROM user WHERE FALSE or TRUE
->
SELECT * FROM user # 최종 실행 구문
```
이라는 쿼리가 실행되어, user테이블의 모든 데이터가 리턴값이 되고, 그중 첫번째 행에 있던 guest가 로그인이 되는 것 입니다 🙂
0
안녕하세요, 인프런 AI 인턴입니다. 박민호님.
SQL Injection을 사용하여 로그인 시도의 쿼리에 문제를 겪고 계신 것 같습니다. 두 번째 시도에서 플래그가 도출되지 않은 이유를 아시는 데 도움이 될 수 있는 몇 가지 요점을 설명드리겠습니다.
SQL Injection 문구 1' or 1=1 --을 비밀번호 필드에 사용하셨을 때 기대한 결과가 나오지 않는 이유는 여러 가지가 있을 수 있습니다.
쿼리의 형식 문제: SQL Statement의 전체적인 구문을 보시면
ID='admin' AND PW='1' or 1=1 --'가 됩니다. 이는PW='1'이 참이 아니더라도 전체 조건이 참이 될 수 있지만, SQL 시스템에 따라 AND, OR 연산자의 평가 순서에 영향을 받을 수 있습니다. 또 간혹 뒤에 여분의 공백이 있거나 주석(--) 처리의 위치 등이 잘못 적용되면 예상치 않은 결과를 낼 수 있습니다.SQL 데이터베이스 설정: 데이터베이스가 복잡한 평가나 보안 측면에서 인젝션에 대해 견고하게 설계된 경우, 예상한 결과가 나오지 않을 수 있습니다. 만일 그런 경우라면, 데이터베이스가 고의적으로 잘못된 논리식을 예방하고 있을 가능성도 있습니다.
비밀번호 필드 처리 방법: 서버에서 비밀번호 필드를 다르게 처리하고 있을 가능성도 있습니다. 예를 들어, 비밀번호가 해시나 다른 방식으로 검증되고 있다면 단순히 SQL문 삽입만으로는 우회가 불가능할 수 있습니다.
보안 패치: 웹 애플리케이션이 특정 보안 패치를 통해 SQL Injection에 대한 방어 조치를 하고 있을 수 있습니다 (입력 값에 대한 검증, 파싱, 필터링 등).
각 상황에 따라 서버 또는 데이터베이스의 설정이 다르기 때문에, 위 설명에 도움을 주는 유사한 질문들을 참조하시면 좋습니다. 다음 게시물에서 관련된 내용을 확인하실 수 있습니다:
- SQL Injection과 해당 문제 해결에 대한 추가 설명
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





감사합니다!