오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 counting query를 함께 풀어볼 예정이다. [wargame.kr] counting query Description text Error based SQLi Challenge dreamhack.io ## 문제 설명: 문제 정보를 살펴보면 Error based SQL injection 공격을 이용하면 되는 것으로 보인다. ## 문제 풀이 사이트에 접속해보니 다음과 화면이 보인다. 우선 get source 버튼을 클릭하여 소스 코드를 확인해보겠다. Brute Force 공격에 대한 방어가 되어 있고, 다른 계정으로 접근이 불가능한 것을 확인할 수 있다. 또한 type 부분에서 SQLi가 가능한 것을 알 수 있다. 우선 type에 2 or 1을 입..
오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 simple_sqli를 함께 풀어볼 예정이다. simple_sqli 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Server-side Basic dreamhack.io ## 문제 설명: 문제 정보를 살펴보면 SQL Injection 공격을 활용하여 flag를 획득하면 되는 것으로 보인다. ## 문제 풀이 사이트에 접속해보니 다음과 화면이 보인다. Login 버튼을 클릭하면 다음과 같은 로그인 창이 뜬다. 소스 코드를 확인해보면 다음과 같다. 아주 기본적인 구성이며 필터링 처리도 없고 단지 싱글쿼터 대신 더블 쿼터를 사용하고 있다. 또한 ad..
오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 adm1nkyj를 함께 풀어볼 예정이다. [wargame.kr] adm1nkyj Description text SQL injection Challenge! (injection) thx to adm1nkyj dreamhack.io ## 문제 설명: 문제 정보를 살펴보면 SQL Injection 공격을 활용하여 풀면 되는 것으로 보인다. ## 문제 풀이 사이트에 접속해보니 다음과 같은 소스 코드가 보인다.
이번 포스트에서는 DVWA의 Blind SQL Injection 문제를 실습해보겠다. ## 공격 정의 질의 결과를 이용자가 화면에서 직접 확인하지 못할 때 참 / 거짓 반환 결과로 데이터를 획득하는 SQL Injection 공격 기법 일반적인 SQL Injection 공격보다 더욱 어려운 공격. 이는, SQL Injection Blind 공격에서는 결과값이 출력되지 않으므로, 공격자가 정보를 수집하기 위해 사용할 수 있는 수단이 제한적이기 때문 SQL Injection Blind 공격은 대상 시스템에서 취약점을 확인할 수 있는 데 있어서 매우 효과적인 공격 방법 중 하나 ## 공격 다이어그램 공격자는 대상 시스템에서 취약점을 찾기 위해, SQL Injection 공격을 수행 대상 시스템에서 SQL 쿼리의..
이번 포스트에서는 DVWA의 SQL Injection 문제를 실습해보겠다. ## 공격 정의 웹사이트의 입력란에 악의적인 SQL 코드를 삽입하여, 데이터베이스를 해킹하는 방법 일반적으로 웹사이트의 입력란에 입력된 데이터를 데이터베이스 쿼리의 일부로 사용하여, 데이터베이스를 조작하는 방법으로 수행됨 악성 SQL 코드를 삽입하여, 데이터베이스에서 정보를 불법적으로 탈취하거나 수정, 삭제 등의 악의적인 행동을 할 수 있음 ## 공격 유형 Error Based : 논리적 에러를 이용한 SQL Injection 공격. SQL 쿼리 고의적으로 오류를 발생시켜 출력되는 에러의 내용을 통해 필요한 정보를 찾아냄 Union Based : 정상적인 쿼리문에 Union 키워드를 삽입하여 원하는 쿼리문을 실행하는 SQL Inj..
이번 포스트에서는 Lord of SQLInjection의 zombie문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 rollup, join, ace, @를 필터링하고 있다는 것을 알 수 있다. 또한 pw값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : ace가 필터링 처리되어 replace() 함수를 사용하지 못한다. 따라서 다른 방식으로 접근해야 한다. DB의 information_schema에는 processlist이라는 테이블이 존재한다. 해당 테이블에는 현재 실행 중인 쿼리가 저장되어 있다. 따라서 이를 활용하면 문제를 쉽게 해결할 수 있다. ### 사용할..
이번 포스트에서는 Lord of SQLInjection의 ouroboros문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., rollup, join, @를 필터링하고 있다는 것을 알 수 있다. 또한 pw값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 간단하게 pw=' or '1를 통해 공격을 시도해보겠다. ### 사용할 공격문 : pw=' or '1 ### 실행 결과 : 아무런 값이 출력되지 않다는 사실을 알 수 있다. 즉, 테이블 안에 아무 값이 존재하지 않다는 것이다. 그럼 이어서 union select 문을 활용하여 공격을 시도해보겠다. ..
이번 포스트에서는 Lord of SQLInjection의 phantom문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 duplicate를 필터링하고 있다는 것을 알 수 있다. 또한 no=1의 email값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 일단 joinmail 파라미터에 아무 값을 넣어서 결과를 확인해보겠다. ### 사용할 공격문 : joinmail=haha ### 실행 결과 : 테이블에 no=0, ip, 'haha'가 새로 삽입된 것을 확인할 수 있다. insert문은 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다. 해당 취약점을..
이번 포스트에서는 Lord of SQLInjection의 frankenstein문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), union을 필터링하고 있다는 것과 에러가 발생하면 탈출한다는 사실을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : error 출력 및 case문을 이용해서 공격을 시도해보겠다. 또한 ()괄호가 필터링 되어 있으므로 비밀번호의 길이를 구하지 않고 바로 비밀번호를 구하도록 하겠다. ### 사용할 공격문 : pw=1' or id='admin' and case when pw like ..
이번 포스트에서는 Lord of SQLInjection의 blue_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., ', \를 필터링하고 있다는 것을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : "\"와 "'"가 필터링 되었으므로 이번에는 Time based SQL Injection 기법을 통해 공격을 실행해보겠다. ### 사용할 공격문 : id=&pw=' or if(id='admin' and length(pw) > 5, sleep(2), 1)%23 ### 실행 결과 : 페이지가 2초 동안 로딩한 뒤에 ..