본문 바로가기
CTF/Dreamhack

[Dreamhack] error based sql injection

by 8희 2023. 5. 2.

https://dreamhack.io/wargame/challenges/412

 

error based sql injection

Description Simple Error Based SQL Injection !

dreamhack.io

 

 

문제에 접속해서 값을 입력해 보면

검색 결과는 보여주지 않고 입력 결과만 보여준다.

 

 

데이터베이스 관련 코드인 init.sql을 살펴 보면

user table에 FLAG가 저장되어 있다.

 

 

app.py를 살펴 보면 쿼리에 이용자의 입력 값인 uid를 그대로 사용한다.

 

extractvalue() 함수를 활용하여 error based SQL Injection 공격을 해야 한다.

extractvalue() 함수를 써서 에러를 발생시킨 후에

에러 메시지에 함수를 포함시켜서 user 테이블의 upw필드를 읽어와야 하는 것이다.

 

 

 

1' and extractvalue(0x0a,concat(0x0a,concat(0x0a,(select database()))));--

 

1'를 사용하여 입력값을 닫아준 뒤 and 연산자를 사용해 공격에 사용할 코드를 넣어준다.

이걸 입력하면 에러 값을 통해 users가 데이터베이스 명이란 것을 알 수 있다.

문제에서 주어진 코드에서 데이터베이스 명이 users가 맞다는 걸 확인할 수 있다.

 

 

1' and extractvalue(0x3a,concat(0x3a,(SELECT upw FROM user LIMIT 0,1)));--

 

LIMIT 0,1을 통해 0번 행부터 1개의 행으로 범위를 제한 시킨다.

그리고 concat()을 통해 uid와 0x3a(:), upd를 한 문자열로 합쳤다.

해당 값을 입력하면 에러 값으로 플래그가 출력되지만 플래그 값이 너무 길어서 값이 잘린다. 

 

 

1' and extractvalue(0x3a,concat(0x3a,(SELECT substr(upw,20,25) FROM user LIMIT 0,1)));--

 

플래그의 뒷 부분을 확인하기 위해서 문자열 반환 함수인 substr()을 통해

upw의 20번째 문자열부터 25개의 문자열을 추출했다.

 

 

나온 플래그 값들을 합쳐서 입력하면 문제가 해결된다!

 

 

참고

https://mimzz2.tistory.com/m/100

 

'CTF > Dreamhack' 카테고리의 다른 글

[Dreamhack] xss-1  (0) 2023.05.03
[Dreamhack] command-injection-1  (0) 2023.05.02
[Dreamhack] sql injection bypass WAF  (0) 2023.05.02
[Dreamhack] session  (0) 2023.04.12
[Dreamhack] image-storage  (0) 2023.04.12