728x90 Portswigger/SQL injection15 Portsiwgger - SQL injection with filter bypass via XML encoding solution 이번 문제는 재고확인 기능에 취약점이 존재하고 union을 이용해 XML에서 필터링을 우회하여 sql injection을 하면 된다. 재고 확인 기능에서 union을 넣어본 결과 필터링으로 막혀있는 걸 확인할 수 있다. 확인해 보니 union , select, 싱글쿼터('), - 가 블랙리스트 형식으로 필터링되어 있었다. 그럼 이 필터링을 어떻게 우회해야 하는가? 바로 유니코드를 이용했다. 10진수 형식으로 필터링된 문자들을 하나씩 바꿔주면 칼럼수가 1인걸 알 수 있고 테이블은 users로 문제에 나와 있으므로 username과 password를 알아낼 수 있다. 이로써 관리자 계정으로 로그인하면 2024. 1. 3. Portswigger - Blind SQL injection with time delays and information retrieval solution 시간 지연을 이용한 time based sql injection이다. users 테이블에 username,password 컬럼이 있고 administrator의 password를 찾는 조건은 이전 문제들과 동일하다. 우선 각 DB들의 시간지연 문법들을 사용하여 PostgreSQL로 되어있다는걸 찾았다. import requests import time url="https://0a5c00630475aa7980a82b720025003b.web-security-academy.net/" cookies={"TrackingId":"41drnVTlJQn9towl", "session":"eaq0ZoUs1FthdTJiwnccJtCMQFGw5a0y"} string="0123456789abcdefghijklmnopqrstu.. 2023. 8. 10. Portswigger - Visible error-based SQL injection solution 에러메세지가 노출될때 노출된 정보를 이용하여 sql injection을 시도하여 administrator계정으로 로그인 하는게 문제 목표이다. 우선 trackingid에 싱글쿼터(')를 주입하였더니 문자열이 종료 되지 않았다는 메세지와 함께 쿼리문이 출력되었다. 여기서 우리는 tracking이라는 테이블명과 id라는 컬럼명을 알아낼수있다. 또한 users테이블과 username컬럼이 존재할수도 있다는 가정하에 union select userna from users를 입력해 오류를 내봤더니 아니나 다를까 존재하는걸 알 수 있다. 같은 방식으로 password컬럼도 확인 가능하다. 이제 필요한 테이블과 컬럼명을 알아냈으니 값을 찾아보면 된다. 처음에 to_char,to_number를 이용하여 오류를 발생시키.. 2023. 8. 9. Portswigger - Blind SQL injection with conditional errors solution 이번 문제는 trackingid 쿼리문에 오류가 생기면 에러 메시지를 출력하여 blind injection을 시도할 수 있다. 조건부 에러로 내가 원하는 조건에 에러를 발생시켜 참 거짓을 알 수 있다. 이를 참고해 코드를 작성하면 import requests url="https://0a4700dd049d11cd80450375000700d9.web-security-academy.net/" cookies={"TrackingId":"2N1Ldflr2AxiIj1k", "session":"OWu48fGtISFp7w7V4EQDNaYFNjFq70dS"} string="0123456789abcdefghijklmnopqrstuvwxyz" pw="" for i in range(0,100): #길이구하기 cookies={".. 2023. 8. 8. Portswigger - Blind SQL injection with conditional responses solution 이번 문제는 평소에 하던 blind sql injection인 줄 알고 쉽게 접근했다가 푸는데 오랜 시간이 걸렸던 문제다. 문제 좀 자세히 읽어볼걸... 우선 문제를 요약하자면 tracking 쿠키값을 이용해 웹은 이 사용자가 알려진 사용자인지 확인을 하는데 확인될 경우 Welcome back!이라는 문구를 페이지에 띄운다. 이를 통해 blind sql injection을 시도하는데 쿠키를 기반으로 sql injection을 시도한 건 처음이라 신선했다. 우선 쿠키값들을 확인해주고 우리가 필요한 Trackingid 쿠키를 사용해 공격을 시도할 것이다. import requests url="https://0a1400c204cf197d82b888a400810061.web-security-academy.net.. 2023. 8. 4. Portswigger - SQL injection UNION attack, retrieving multiple values in a single column solution 이번 문제는 한 컬럼에 여러 개의 값을 출력하는 것이다. 즉, 우리는 저번 문제에 username, password로 각각 다른 컬럼에 하나의 값을 출력했는데 이번에는 username과 password를 한 컬럼에 출력하고 다른 컬럼은 사용하지 않아야 된다. 이는 문자열 연결 쿼리 문법을 참고하여 풀 수 있다. ||를 이용하여 연결하는 걸로 보아 oracle 또는 PostgreSQL임을 예상할 수 있고 가독성을 위해 '-------'문자를 추가했다. 이로써 administrator의 password를 알아냈다. 2023. 8. 2. Portswigger - SQL injection UNION attack, retrieving data from other tables solution 아무래도 문제 푸는 순서가 잘못된 것 같다...ㅎ 이번엔 user라는 테이블에 username,password라는 컬럼을 조회하는 게 문제다. 이미 테이블 찾고 조회하는 문제를 풀어봤기에 쉽게 풀 수있다. 이미 테이블명과 컬럼명을 다 알려줬으므로 그냥 조회하고 로그인하면 된다. 2023. 8. 2. Portswigger - -SQL injection UNION attack, finding a column containing text solution 저번문제에서는 컬럼 수를 알아냈다면 이번문제에서는 데이터 타입을 알아내는 문제다. 우선 컬럼 수는 3개로 확인되었고 데이터베이스가 KBJ2QK를 출력하게 만들면 문제가 풀린다. 확인해 본 결과 2번째 컬럼의 데이터 타입이 문자열인 것이 확인되었다. 2023. 8. 2. Portswigger - SQL injection UNION attack, determining the number of columns returned by the query solution 내가 문제 푸는 순서가 잘못되었나... 이번 문제는 union공격을 하기 위해 컬럼 수와 데이터 타입을 알아내야 되는데 그중 컬럼 수를 알아내는 문제다. 뭐 이거야 계속 해오던거니 쉽게 풀 수 있었다. 컬럼 수는 3개로 확인되었다. 2023. 8. 2. Portswigger - SQL injection attack, listing the database contents on Oracle solution 조건은 저번문제랑 동일하고 oracle 데이터베이스 환경에서의 union공격을 하라는 문제다. 컬럼 수와 데이터 타입이 확인되었으니 바로 DB정보를 조회해 보자 테이블들이 조회가 되었고 user가 포함된 테이블은 총 3개가 조회되었다. 3개 중 USERS_NYOWNL 테이블에 password 정보가 있는 것으로 보아 제일 유력하다. administrator의 password가 확인되는걸 볼 수 있다. (참고로 테이블 이름이 랜덤으로 바뀌기 때문에 직접 실습해서 알아내야 된다.) 2023. 8. 2. 이전 1 2 다음 728x90