전체 글

Department of Computer Science and Engineering, 21th, Sungkyunkwan University
Web Hacking/LOS

Lord of SQL Injection - blue_dragon

우리의 친구 백슬래시를 잃었다. 문자열 탈출을 어떻게 할까가 매우 고민이었다. 백슬래시를 우회할 방법은 없는 것 같다. 또한 든든한 지원군 싱글쿼터도 읽었다. 청룡의 공격에 큰 피해를 입었다. 그런데 가만히 코드를 보면 mysqli_fetch_array 함수를 실행한 '이후'에 싱글쿼터와 백슬래시를 필터링하여 "No Hack ~_~" 이라는 문자열을 출력하는 페이지로 exit 시키고 있다. 싱글쿼터나 백슬래시를 이용하는 방법으로는 'Hello admin"이라는 문자열을 볼 수 없겠지만, 시간 측정 함수도 풀려있는 마당에 "No Hack" 페이지로 exit 되기 전까지 sleep 함수로 응답 시간을 지연시킬 수 있을 것 같다. 한번 해보자. 우선 간단한 참값을 넣어보자. ?id=' or if(1,sleep..

Web Hacking/LOS

Lord of SQL Injection - evil_wizard

이전 문제에서 sleep이나 benchmark 함수를 사용하지 못 한다는 점만 빼고 모든 것은 다 똑같다. SQL에서는 order로 table을 정리할 적에, 만약 order 에 대한 값이 오류를 일으킨다면 정상적인 table을 return 해주지 못하게 된다. 예를 들어서 order에 싱글쿼터만을 전달해주면, 과 같이 mysqli_fetch_array 함수가 아무런 값도 return 해주지 않아 우리가 보는 문제 페이지에도 아무런 table 값이 출력되지 않는다. 정상적인 query문이라면, 과 같이 모든 사용자들이 출력된다. 동작 그만. 이 점을 이용하면 되지 않을까? 우리는 Error-Based SQL Injection에서 수행한 방법처럼 특정 문자열이 출력되는 것을 이용하여 query문의 오류 여..

Web Hacking/LOS

Lord of SQL Injection - green_dragon

오랜만에 id가 admin인지만을 묻는 문제가 나왔다. 또한 첫 번째 query문이 정상적으로 전달되었을 때, query2에서 첫 번째 query의 결과를 가져와 id가 admin인지를 검사한다. 우선 첫 번째 query문은 많이 해왔던 역슬래시를 이용한 문자열 탈출을 하면 된다. ?id=\&pw= or 1%23 여기까지는 간단하다. 아래 조건문을 만족하기 위해서, query문이 정상적으로 날라가야 한다. MySQL에서는 query문이 정상적으로 작동하기 위해서 where 뒤의 부분을 참값으로 만들어주거나, subquery 문이 존재할 경우 select로 선택할 column의 개수와 subquery로 선택할 column의 개수가 같아야 한다. 예를 들어서 이번 문제같은 경우는 선택할 column의 개수가..

Web Hacking/LOS

Lord of SQL Injection - hell_fire

드디어 table이 시각적으로 출력되기 시작하였다. query문도 order by 를 통하여 정렬하는 query문으로 변경되었다. 문자열 필터링에서 sleep, benchmark 가 빠진 것을 보아 time-based sql injection 에 관한 문제인 것 같다. Time-Based SQL Injection 이란, query문에 시간을 delay 시키는 함수, sleep/benchmark 등을 사용하여 요청에 대한 응답시간을 의도적으로 지연시키는 방법이다. 어떻게 사용하는 것인가? 우선 문제에 간단하게 테스트해보자. ?order=1 위와 같이 query 를 전달할 경우, 1번 column, 즉 id column 을 기준으로 table 이 정렬된 것을 볼 수 있다. admin 의 email 주소는 p..

Lucvs
Lucvs