Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- JS
- 게시판 만들기
- sql injection point
- css
- Reflected Xss
- Python
- php
- 세션
- Cross Site Request Forgery
- sql injection
- cors
- 웹개발
- MySQL
- blind sql injection
- union sql injection
- 쿠키
- 과제
- 모의해킹
- cookie 탈취
- Error based sql injection
- file upload
- 로그인
- lord of sqli
- 로그인페이지
- Los
- XSS
- JWT
- lord of sql injection
- csrf
- CTF
Archives
- Today
- Total
Almon Dev
모의해킹 공부 8주차 (SQL Injection) 본문
8주 차 정리
SQL Injection Point 찾기
SQL injection Point
- DB에 SQL 질의문을 사용하는 곳
- 파라미터
- Cookie나 Header와 같이 눈에 안 보이는 입력도 있음
주의사항
- SQL과 서버 측의 코드를 생각하며 결과가 출력되는 과정을 추측해 보기
- SQL문을 막 날려보면 방화벽에 차단될 가능성이 있음
Cookie에서 SQL Injection
$sql = "select * from member where user_id=$_COOKIE['user'];"
쿠키의 값을 이용해서 sql문을 사용할 경우 쿠키를 이용해 sql injection이 가능할 수 있습니다.
Order by에서 SQL Injection
$column_name = $_POST['ord'];
$sql = "select * from boards limit 0,15 order by $column_name";
게시판 같은 곳의 정렬기능을 이용할 때 order by절에 들어갈 입력값을 이용해서 sql injection이 가능합니다.
ex)
select * from boards limit 0,15
order by case
when (ascii(substring((select database()),1,1)) > 0) then 1 else 2 end
case when 문을 사용해서 참과 거짓의 결과를 다르게 만들어 blind sql injection이 가능합니다.
CASE WHEN
when을 여러 번 사용할 수도 있습니다
case
when (조건) then (참일 때)
when (조건) then (참일 때)
when (조건) then (참일 때)
else (거짓일 때)
end
SQL Injection 대응 방법
Prepared Statement
SQL 질의문을 유저의 입력값 부분만 비워둔 채 미리 컴파일해서 쿼리문의 구조 변환이 불가능하게 만듭니다.
=> 미리 컴파일하기에 속도도 빠름
원천적으로 SQL Injection이 불가능하지만 그럼에도 취약점이 존재하는 이유가 있습니다.
1. Prepared Statement를 잘못 쓰는 경우
sql문에 사용자의 입력은 먼저 삽입한 후에 컴파일을 하는 경우가 있습니다.
Prepared Statement는 미리 컴파일을 해서 유저의 입력이 sql문의 구조적인 변화를 일으키지 못하게 하는 것이기에
유저의 입력을 먼저 삽입하면 의미가 없습니다.
2. Prepared Statement를 못 쓰는 경우
Order By절, Column명과 같이 문자열과 같은 값이 아니라 sql문법에 포함되는 경우 사용할 수 없는 경우가 있습니다.
화이트 리스트 필터링을 이용해서 특정단어(정해진 Column명)만 쓸 수 있게 만들어주는 것이 좋습니다.
'모의해킹 > 모의해킹' 카테고리의 다른 글
ctf 풀이 (SQL Injection Point 2) (0) | 2024.12.10 |
---|---|
ctf 풀이 (SQL Injection Point 1) (1) | 2024.12.10 |
ctf 풀이 (SQL Injection 6) (0) | 2024.12.02 |
ctf 풀이 (SQL Injection 5) (0) | 2024.11.30 |
ctf 풀이 (SQL Injection 4) (0) | 2024.11.30 |