Oh! JUN

[DreamHack] baby-sqlite 풀이 본문

문제풀이/DreamHack

[DreamHack] baby-sqlite 풀이

Kwon Oh! JUN 2022. 12. 28. 00:12

문제 파일 다운로드해서 app.py 코드 확인해보면

 

 

'admin', 'select' 를 포함한 여러문자를 필터링 하는것과 쿼리를 확인할 수 있다.

uid가 'admin'이면 flag.txt 파일에 있는 FLAG 값을 구할 수 있다.

 


가장 먼저 생각이 난것은

'admin'이 필터링 되니까 char() 우회방법을 생각했다.

 

'admin'
char(97)||char(100)||char(109)||char(105)||char(110)

 


오랜만에 해서 감 다 잃었는지 처음에 아래와 시도를 했다.(다음부터 그러지마)

시도한 쿼리 SELECT uid FROM users WHERE uid='char(97)||char(100)||char(109)||char(105)||char(110)||char(39)--' and upw='{upw}' and level={level};
의도한 쿼리 SELECT uid FROM users WHERE uid='admin'-- and upw='{upw}' and level={level};

*char(39)은 '(작은따옴표 임)

 

uid='' 작은 따옴표 사이에 char() 쓰면 

그거 그냥 char() 문자 그대로 인식해버리고 의도한 문자값 안나온다.(당연한건데...ㅠ)

 

왜 안되지 이러고 있었네 (기말고사 크리티컬)


작은 따움표를 어떻게 해결하지 고민하는 가운데 뒤에 level이 보인다.

level 파라미터는 작은따움표 없다.

 

"GET" 메소드 사용해서 주소URI창에 level 파라미터 건드려도 변화없다.

그래서 burp suite 사용했고 처음에 아래와 같은 시도를 해봤다.

 

 

시도한 쿼리 uid=1&upw=1&level=1/**/or/**/uid=char(97)||char(100)||char(109)||char(105)||char(110)
의도한 쿼리 SELECT uid FROM users WHERE uid='1' and upw='1' and level=1 or uid='admin';

 

계속 하는데 'Good!'만 뜬다...

그래서 union 사용해야 했는데 union 사용하면 select 써야되는데 select는 필터링 되니까 

사용하지 못하는거 아닌가라고 했다.

 

****************BUT****************
여기에 사용한 DBMS는 SQLite이다.


Dreamhack 문서 다시 보니까 
SQLite에서 union values() 
이렇게 사용을 할 수 있었다.