SQL 인젝션은 OWASP Top 10 2017 버전에 포함되어 있는 주요한 웹 취약점 입니다.
입력값 검증이 미흡한 사용자 입력값에 DB 쿼리에 들어갈 공격 구문을 삽입하여 DB 내 개인정보를 탈취할 수 있는 공격 방식 입니다.
실무적으로도 SQL 인젝션은 타 취약점보다 위험도가 높아 점검 방법 및 대응 방안을 익혀두시면 좋습니다.
추가로 sqlmap이라는 Tool을 많이 사용한다는 점도 알아두시면 좋을 것 같아요.
(SQL 인젝션 포인트를 수동으로 찾고 도구를 통해 효율적으로 DB 정보를 dump하는 방식으로 진단을 수행합니다.)
그럼 SQL Injection을 익힐 수 있는 Lord of SQLInjection 사이트를 통해 천천히 학습을 해보겠습니다.
사이트 주소 : https://los.rubiya.kr/
우선 1번 문제 gremlin 입니다.
[문제 구성]
사이트에 로그인을 하면, 아래와 같이 문제들이 나오고 앞 문제를 풀어야 뒤 문제를 풀 수 있도록 되어 있습니다.
gremlin으로 들어가서 첫 문제를 살펴보겠습니다.
문제의 구성을 보면 먼저 URL이 있고, 쿼리(query)가 있고, php 소스 코드가 있습니다.
URL에 공격 구문 파라미터를 넘겨서 SQL 인젝션을 실습할 수 있습니다.
그리고 넘긴 결과를 query : 로 표시를 해줘서 DB에 어떻게 들어갔는지 확인하면서 연습할 수 있게 해뒀네요.
또 php 소스코드를 출력해줘서 소스코드를 보고 문제를 풀 수 있도록 해뒀네요.
참고로 랭킹을 볼 수 있게 되어 있습니다. 우리나라 사람들이 많이 하는 사이트 인 가 보네요.
이제 문제를 풀어보겠습니다.
[문제 접근]
query를 보면 id와 pw 파라미터가 존재하고, 소스코드를 보면 id 값이 존재하면 문제가 성공하겠네요.
1번 문제는 아주 기본적입니다. 가장 기초적인 공격 구문을 시도해보세요.
URL에 ? 뒤에 파라미터 id를 넣고 = 값을 넣으면 공격을 시도할 수 있습니다.
?id=0'||1=1# 를 넣겠습니다.
#가 없어졌네요. #를 URL 인코딩 값으로 넣어봐야 할 것 같습니다.
[문제 정답]
정답 : ?id=0'||1=1%23
"CREMLIN Clear!" 가 나타납니다. 정답!
다음 스테이지로 넘어가시죠~
select 구문의 where 조건 절을 id='0' 또는 1=1 로 하여 무조건 참으로 만들었습니다 참 또는 참은 참이니까요.
그리고 주석 #를 써서 뒤에 구문을 생략 시켜 성공시켰습니다.
[Lord of SQL Injection] darkelf 6번 풀이 (0) | 2020.07.06 |
---|---|
[Lord of SQL Injection] wolfman 5번 풀이 (0) | 2020.07.06 |
[Lord of SQL Injection] orc 4번 풀이 (0) | 2020.07.06 |
[Lord of SQL Injection] goblin 3번 풀이 (0) | 2020.07.06 |
[Lord of SQL Injection] cobolt 2번 풀이 (0) | 2020.07.06 |
댓글 영역