.
.
.
objective : Try to access all user data without knowing any user name. There are three users with a single malicious search
Hint : Improper or no input validation issue arise when the input is not filtered or validated before using it. when developing components that take input from outside, always validate it. For ease of testing there are three users already present in the database, for example one of them is admin, you can try searching for admin to test the output.
목적 : 사용자 이름을 모르는 상태에서 모든 사용자 데이터에 접근한다. 한 번의 악성 검색으로 3명의 사용자를 확인한다.
힌트 : 입력하기 전에 필터링하거나 유효성을 검사하지 않으면 입력 유효성 검사 문제가 발생한다. 외부에서 입력을 받는 구성 요소를 개발할 때는 항상 유효성을 검사한다. 데이터베이스에 이미 3명의 사용자가 존재하는데, 예를 들어 그 중 한 명이 admin인 경우, 출력을 검사하기 위해 admin을 검색해 볼 수 있다.
username을 검색하는곳에 admin이라고 입력해보았더니 다음과 같은 토스트 메시지가 떴다.
jadx로 소스코드를 확인해 보았다.
소스코드 중 위와 같은 부분에서 SQL 쿼리를 확인할 수 있다.
"SELECT * FROM sqliuser WHERE user = \"사용자 입력"\" 쿼리를 사용해서 검색을 하면
SQL 인젝션에 대한 대응이 전혀 없는 상태로 사용자의 개인정보들이 노출될 수 있다.
기본적인 SQL injection ' or'1'='1 쿼리를 이용해 모든 사용자의 정보를 획득했다.
.
.
.
.
Objective : Try accessing any sensitive information apart from a web URL.
Hint : Improper or no input validation issue arise when the input is not filtered or validated before using it. When developing components that take input from outside, always validate it.
목적 : 웹 URL 외에 중요한 정보에 access해 보라.
힌트 : 입력하기 전에 입력을 필터링하거나 검증하지 않으면, 부적절하거나 입력 검증이 되지 않는 문제가 발생한다. 외부에서 입력을 받는 구성 요소를 개발할 땐 항상 유효성을 확인한다.
처음엔 그냥 구글 웹사이트를 검색했더니 웹사이트를 보여주었다.
jadx를 통해 웹 URL 외에 어떤 중요한 정보를 통해 취약점을 확인할 수 있을지 살펴보았다.
코드 상으로는 문제가 없어 보인다.
get 함수에서는 사용자의 입력에 대해 필터링 없이 loadURL로 이동하는것을 볼 수 있다.
목적에서 URL 아닌 다른 것으로 중요한 정보에 access 하라고 했으니 파일 접근을 하면 될 것 같다
파일 접근은 "file://" 형식을 이용하면 된다.
전에 봤던 userinfo 정보들을 끌어내고 싶어서 /sdcard의 uinfo.txt 파일에 접근해 보았다.