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 --
치면 다 나온다.
ㅡㅡ...
'[ IT ] > 모바일 및 리버싱 스터디' 카테고리의 다른 글
[5주차] DIVA 8~9번 문제 풀이 (0) | 2018.08.29 |
---|---|
[4주차] DIVA 1~4번 문제 풀이 (2) | 2018.08.19 |
[3주차] 코드엔진 3번 문제 풀이 (0) | 2018.08.11 |
[2주차] 코드엔진 1번,2번 문제 풀이 (0) | 2018.08.06 |
[1주차] 안드로이드 리버싱 툴 다루기. (2) | 2018.08.01 |