SQL injection string형 문제를 풀어보았습니다. 역시 관리자의 패스워드를 알아내야 합니다.
문제에 들어가시면 홈/검색/로그인 탭이 있습니다.
이 메뉴들 중에서 SQL Injection이 가능한 포인트를 찾는 것이 관건이었습니다.
news_id 파라미터, 로그인 메뉴의 login, password 파라미터 등 여러 곳에서 SQL Injection을 시도해보았으나,
유일하게 SQL Injection이 가능한 포인트는 검색 메뉴의 recherche 파라미터 였습니다.
검색어에 a를 삽입하면 정상 값으로 5개의 결과 값을 출력하였고요,
a'를 삽입하니 syntax Error가 출력되어서 a%'를 삽입 해보았습니다.
no such column 이라는 에러가 떠서 저는 이곳이 SQL Injection에 취약한 포인트라 판단하였습니다.
이번에는 필드 갯수를 구하기 위해 order by 구문을 삽입했는데요, 아래 구문을 순차적으로 삽입하여 필드 갯수 가 2개인 것을 파악하였습니다.
a%' order by 1--
a%' order by 2--
a%' order by 3-- << 에러 출력
sql 쿼리문을 삽입하여 스키마 정보를 파악해보았습니다.
a%' union select 1, sql from sqlite_master-- 구문을 삽입하여 news 테이블과, users 테이블이 존재하고 있음을 알 수 있습니다.
마지막으로, 관리자 패스워드가 존재할 것 같은 users 테이블에서 username과 password 값을 출력하면 됩니다.
a%' union select username, password from users-- 해당 구문을 삽입하면, 관리자의 패스워드를 획득할 수 있습니다.
'Study > Wargame' 카테고리의 다른 글
[root-me] SQL Injection - GBK (0) | 2019.02.21 |
---|---|
[root-me] Server-side Template Injection (0) | 2019.02.08 |
[root-me] LFI - Double Encoding (1) | 2019.01.17 |
[root-me] PHP filters (0) | 2019.01.16 |
root-me >> SQL injection - blind (0) | 2018.06.08 |