정보보안 및 해킹/웹 해킹(4)
-
[SQL Injection] SQL Injection 대응 방안
Prepare StatementSQL Injection을 절대적으로 방어할 수 있음 작동 원리SQL 쿼리문을 미리 컴파일 한 후 기계어로 완성된 쿼리문 안에 사용자가 입력한 데이터를 끼워넣는 방식 이점컴파일을 미리 진행하기 때문에 속도가 다소 빨라진다SQL Injection을 절대적으로 방어할 수 있다. 하지만 여전히 SQL Injection공격이 존재하는데 이유는 무엇인가? 1. Prepare Statement를 잘못 사용하는 경우물음표를 사용하여 사용자가 입력할 부분을 뚫어놓고 나머지 부분을 컴파일한 후 기다려야 하는데 이렇게 하지 않는 경우 2. Prepare Statement를 사용하지 못하는 경우order by, table name, column name에는 Prepare Statement를 사..
2024.06.07 -
[SQL Injection] Blind SQL Injection
사용 조건SQL Injection이 발생하는 모든 곳 문법' and (ascii(substr((__SQL__),[index],[count])) > 0) and '1'='1 필수 요소SQL Injection이 일어나는 모든 곳에서 가능하나, 속도가 느리기 때문에 맨 마지막으로 미뤄둘 것을 당부한다. PROCESS 1. SQL Injection Point 찾기참인 조건' and '1'='1거짓 조건' and '1'='2의 결과가 다르게 나오면 해당 문구가 바로 SQL 쿼리문에 들어가고 있다는 증거이므로 SQL Injection이 가능함을 알 수 있음 2. SELECT 문구가 필터링 되고있는지 + 참과 거짓 문구의 결과 차이 확인참인 조건' and ((select 'test') = 'test') and '1'..
2024.06.06 -
[SQL Injection] Error Based SQL Injection
사용조건500에러가 아닌 에러 메세지가 화면에 출력되는 경우 문법Mysql에서는 extractvalue()라는 함수를 사용extractvalue([xml문법],[찾을 표현식]) 필수요소찾을 표현식에는 xml표현식이 아닌 것이 들어가야 한다 PROCESS 1. SQL Injection Point 찾기Error를 유발하기 위해 싱글 따옴표를 하나 더 넣어보거나 하는 등의 Error 유발 코드 삽입 2. Error를 출력하는 함수 선택Mysql의 경우에는 extractvalue() 3. 공격 Format 제작' and extractvalue('1',concat(0x3a,(________))) and '1'='1 4. DB 이름 출력' and extractvalue('1',concat(0x3a,(SELECT D..
2024.06.06 -
[SQL Injection] Union SQL Injection
사용 조건SQL 질의문의 결과가 화면에 출력되는 곳EX) 게시판 문법SELECT [COLUMN] FROM [TABLE] UNION SELECT [COLUMN] FROM [TABLE] 필수 요소앞과 뒤의 SELECT문의 COLUMN 갯수가 맞아야 한다 PROCESS 1. SQL Injection Point 찾기어떤 쿼리문을 사용했을지 추측하기어떤 따옴표(', ")를 사용했을지 추측하기LIKE를 사용했을지 하지 않았을지('%%', "%%") 추측하기) 2. COLUMN 갯수 찾기%' ORDER BY [COLUMN갯수]#눈에 보이는 컬럼이 전부가 아님을 명심하기 3. 출력되는 COLUMN 위치 찾기%' UNION SELECT 1,2,3,4.... #어떤 컬럼이 화면이 출력되는지, 어떤 순서로 출력되는지 파악하..
2024.06.06