-
[Dreamhack] error based sql injection(+문제해결 완)web웹/Dreamhack wargame 2022. 7. 14. 22:29
init.sql 파일
위 sql문으로 추측할 수 있는 것은 'user'이라는 이름의 테이블이있고 각 튜플은 다음과 같은 값으로 채워진다는 것이다.
idx uid upw admin DH{**FLAG**} guest guest test test app.py
이용자 입력값이 별다른 검사 없이 SQL 쿼리에 포함되어 SQL Injection 취약점이 발생함도 알 수 있었다.
error based sql injection은 문법적 오류가 아닌 논리적 오류가 포함된 쿼리를 작성해야 가능한 공격이다.
문법오류는 아예 컴파일이 되지 않을 수 있기 때문이다.
다음은 문법오류를 발생시켰을 때의 결과입니다.
고민을 하다가 드림핵 로드맵의 도움을 받기로 하였다.
나는 다음을 참고하여 문제를 풀어보았다.
[WHA] ExploitTech: Error & Time based SQL Injection | Dreamhack
extractvalue 응용
: extractvalue함수를 응용해 사용할 경우 데이터베이스의 정보를 추출할 수 있다.
#EXTRACTVALUE
- 사용법 - EXTRACTVALUE(XML 형식의 값, XPath 조건식)
- XPath 조건식을 지정해서 해당하는 XML노드의 값을 반환
이 함수는 첫 번째 인자로 전달된 XML 데이터에서 두 번째 인자인 XPATH 식을 통해 데이터를 추출
올바르지 않은 XPATH 식을 전달하면 에러 메시지에 삽입한 식의 결과가 출력되는 점을 이용한다.
*concat(): 문자열 합치는 함수
**사용법: concat(0x3a,(우리가 실행할 쿼리문))
admin' and extractvalue(1,concat(0x3a,(SELECT upw FROM user WHERE uid='admin')));#
위에 있는 쿼리문을 입력하고 submit을 하면 다음과 같은 화면이 나온다.
댓글에 플래그가 짤려있다는 말이 있었는데 이것도 해결을 해야하는 부분인듯하다.
substr()함수를 활용하면 될 것 같은데 잘 안돼서 좀 더 고민해봐야겠다.
좀더 생각해본 결과 concat() 2번째 인자부분을 수정하면 문자를 추출할 수 있을 것도 같다. 아직 시도 안해봄
문제해결
여기 글이 에러를 이해하고 해결하고 도움이 되었다.
결론적으로 xml 내장함수인 extractvalue()는 에러발생 시 출력되는 길이가 32Byte로 제한된다.
따라서 substr()또는 substring()으로 여러번 나누어 출력해주어 플래그를 확인해야한다.
32Byte가 넘지않도록 조절해서 출력해보았다.
난 그냥 직접 접속해서 했었는데 파일하나 만들어놓고 vsc에서 작업하는게 더 일반적이라고 해서 이번에는 그렇게 해봤다.
admin' and extractvalue(1,concat(0x3a,(SELECT substr(concat(0x3a,upw),20,40) FROM user WHERE uid='admin')));#
아까 나온 플래그랑 조합하면 원하는 플래그를 획득할 수 있다
나는 0x3a직접 입력하다가 대문자로 X를 써서 몇번 오류가 났었다 다른 사람들은 이런 실수 없기를 바란다.
'web웹 > Dreamhack wargame' 카테고리의 다른 글
[Dreamhack] web-ssrf (0) 2022.08.16 [Dreamhack] XSS-1 (0) 2022.08.02 [Dreamhack] session (0) 2022.07.26 [Dreamhack] session-basic (0) 2022.07.26