Iriton's log

[Dreamhack/Wargame] Lv.1 error based sql injection 본문

WebHacking/WarGame

[Dreamhack/Wargame] Lv.1 error based sql injection

Iriton 2023. 5. 3. 19:29

 

코드 분석


 

init.sql 코드를 확인해 보니 user 정보를 확인할 수 있었다.

 

app.py 코드 중 일부이다. 내가 텍스트 박스에 입력하여 제출한 값을 uid로 지정하여 그대로 출력한다.

박스에 어떤 값을 넣느냐에 따라 flag를 얻을 수 있고 없고가 결정될 것으로 보인다.

 

sql injection 코드는 구글링을 통해 알아냈다.

 

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

 

위 코드를 분석하자면 다음과 같다.

1을 입력하고 싱글 쿼츠로 닫아서 무조건 참이 되게 한 다음 extractvalue를 활용하여 내가 원하는 값을 추출할 수 있다.

concat은 문자열을 이어서 출력해 주는 함수이다.

저런 식으로 입력해 주면 에러가 뜬다.

이 에러를 통해 flag를 얻어내는 것이다.

 

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

아까 init.sql에서 확인한 user 테이블 정보에 따르면 flag는 0행에 존재하는 upw이므로 0~1행으로 제한해 줬다.

 

에러가 뜨면서 upw인 flag 값이 뜬다.

하지만 ...으로 다 보이진 않는다.

 

' union SELECT extractvalue(1,concat(0x3a,(select substr(upw,20,50) from user where uid = 'admin'))); -- 

위와 같은 코드를 입력하면 나머지 flag값이 뜨게 된다.

Comments