본문으로 바로가기

1. DIVA 5번 문제.

앞의 3,4번 문제와 마찬가지로 5,6번 문제는 데이터가 저장되는 곳을 확인하는 문제다.

내용을 보면

 

createTempFile(), getApplicationInfo().dataDir을 검색해본 결과

createTempFile()로 파일을 생성하는데 그 위치가 getApplicationInfo().dataDir임을 알 수 있다.


/data/data/어플리케이션 디렉터리 밑에서 uinfo로 시작하는 tmp 파일을 확인할 수 있다.

내용 확인



2. DIVA 6번 문제.

6번 문제도 같은 형식으로 풀어본다.

마찬가지로 코드를 보자.

이번엔 Environment.getExternalStorageDirectory()를 찾아보면 될 것 같다.

해당 경로는 기본값으로 /mnt/sdcard로 설정되어 있다고 하니 가보자.

해당 경로로 가니 파일이 있다.

6번 문제도 이렇게 확인. 



각 함수별 파일 저장 경로 정리 (DIVA 3~6번 문제)

1. getDefaultSharedPreferences()의 저장 위치는 /data/data/com.package.name/shared_prefs

2. (SQLite) openOrCrateDatabase()의 저장 위치는 /data//data/data/com.package.name/databases

3. createTempFile()의 저장 위치는 /data/data/com.package.name

4. getExternalStorageDirectory()의 저장위치는 외부저장소, 기본값으로 /mnt/sdcard 




3. DIVA 7번 문제.

다음 문제는 악성 검색으로 3명의 사용자 이름을 확인하는 문제다. 

힌트는 3개중 예시로 admin을 검색해 볼 수 있다고 써있다. 한번 검색해보자.

admin을 검색하니 계정명, 패스워드, 카드번호가 출력되었다. 

코드를 확인해보니, SQLite를 사용하여 데이터를 넣어놓았다. 

코드를 보고 계정명을 확인했지만, SQL injection 문제이므로, SQL injection 코드를 검색해서 입력해보았다.


' having 1=1-- 을 대입하고 오류를 확인하니

다음과 같은 에러를 확인할 수 있었다. 

에러에서 sqliuser 라는 테이블을 사용하는 것을 확인하였고, SQL 구문이

SELECT * FROM sqliuser WHERE user= '  + 입력값 + ' 

인 것을 확인할 수 있다.

 

' union select min(user) from sqliuser -- 구문을 넣다보니, 양쪽의 columns 값이 같지 않다고 나온다. 


columns을 한개씩 늘려서 나오는 것을 확인 (사실 출력되는게 3개라서 3개를 맞춰주면 될 것 같다.)

admin 출력 확인

그 다음 계정 확인

diva 계정 확인

그 다음 계정 확인

john 계정 확인

계정이 3개라고 했으니 다음은 뭐가 나올까 한번 확인

계정이 3개라서 null값이 출력되는 것을 볼 수 있다.

계정 3가지 :  admin, diva, john 확인



SQL 인젝션 기본 구문이 잘 나온 블로그가 있어서 링크를 남겨 놓는다.

https://blog.lael.be/post/55




※ 그냥 

' or 1=1 -- 

치면 다 나온다.

ㅡㅡ...