error based sql injection
Description Simple Error Based SQL Injection ! 문제 수정 내역 2023.07.21 Dockerfile 제공
dreamhack.io


Error Based SQL Injection 취약점
웹 애플리케이션이 문법적으로 오류가 있는 SQL 쿼리를 데이터베이스에 요청한다면 데이터베이스는 SQL 쿼리를 실행하지 못하고 SQL 쿼리가 왜 틀렸는지 알려주는 오류를 반환해준다.
만일 개발자가 디버깅을 위해 이 오류를 HTTP 응답내에 출력하도록 작성해두고 이를 그대로 방치해두었다면 오류는 일반 사용자도 확인할 수 있게 됩니다.
바로 이 오류 메시지가 필요 이상으로 자세해서 악의적인 사용자에게는 공격에 필요한 정보가 될 수 있다.
구문 사용 방법(XPath 방법)
extractvalue(xml_frag, xpath_expr)
xpath_expr 인수로 임의의 SQL 쿼리를 지정했을 때 이 쿼리의 실행 결과가 오류 메시지에 포함되는데, 이 점을 이용해 공격을 수행할 수 있다.
두 번째 인수가 항상 유효하지 않은 XPath 표현식이 되도록 하기 위해 concat() 함수를 이용해 콜론(:)을 앞에 추가하고 첫 번째 인수는 임의의 값을 지정하기 위해 rand() 함수를 사용한다. 마지막으로 후속 쿼리를 무효화하기 위해 가장 끝에 주석 문자(--)와 공백 문자(스페이스)를 추가한다.
(0x3a는 콜론의 16진수 표기법)
AND extractvalue(rand(), concat(0x3a, 실행할-SQL-쿼리))--
출처: https://www.bugbountyclub.com/pentestgym/view/53
Error 기반 SQL 인젝션 | Pentest Gym | 버그바운티클럽
오류 기반 SQL Injection이란?오류 기반(Error based) SQL Injection은 주로 데이터베이스에 대한 정보를 획득하기 위해 사용됩니다. SQL의 잘못된 문법
www.bugbountyclub.com

'를 이용해 구문 작성후 뒷 부분을 주석처리 할 것이다.
exploit


users DB의 user table upw 컬럼에 위치하고 있다.


알아낸 정보를 바탕으로 sql문을 삽입하면 플레그의 앞 부분이 출력된다.
오류 메시지의 출력 글자 수의 제한으로 플레그 값이 중간에 잘린 것으로 추측되었다.
' AND extractvalue(rand(),concat(0x3a,(SELECT SUBSTRING(concat(0x3a,upw), 25, 50) FROM users.user LIMIT 0,1)))--
현재 플레그 값은 총 27자가 출력되고, 나는 25자부터 출력했다.

처음 값과 합쳐보면
DH{c3968c78840750168774ad951fc98bf788563c4d}이 나온다.
'WriteUp > 드림핵' 카테고리의 다른 글
| File Vulnerability Advanced for linux (0) | 2024.05.27 |
|---|---|
| file-download-1 (0) | 2024.05.21 |
| command-injection-chatgpt (0) | 2024.04.12 |
| what-is-my-ip (0) | 2024.04.08 |
| simple_sqli (0) | 2024.04.01 |