SQLInjection: 우리가 원하는 질의문을 실행하는 것
- Union SQLi: SQL 질의 결과가 화면에 출력되는 경우
- Error Based SQLi: SQL 에러가 발생하는 경우
- Blind SQLi: 만능, SQLInjection이 가능한 모든 곳에서 가능
SQL Injection Point 찾기
- SQL Injection이 일어나는 곳(DB에게 SQL 질의문을 사용하는 곳)
- 입력란만 SQL Injection이 가능한 것 아님
- 질의를 하고있다면 SQL Injection의심해보기
- SQL 쿼리 예상하고 쿼리 생성 후 실행
- 결과가 참 / 거짓 부분을 찾으면 됨
SQL Injection Point
쿠키 정보,Http 요청 헤더
- Cookie: user=yytest
column 명
- select * from board where ‘test’ like ‘%test%’
order by절
- where username like ‘%test%’ order by ‘title’
- case when (조건) then (참일 때) else (거짓일 때) end → 조건문임
- case when (1=1) then 1 else 2 end →1
- case when (1=2) then 1 else 2 end →2
- case when (1=1) then 1 else (select 1 union select 2) end ⇒ order by 에 행이 2개 출력됨
- (select 1 union select 2 where (1=1))
- 두개의 행의 데이터가 나옴 → 에러 발생
- (select 1 union select 2 where (1=2))
- where 이 거짓이기 때문에 정상 출력 됨
- 참과 거짓 조건의 결과가 똑같이 나올때 에러를 유발 방법
- yytest' and (select 1 union select 2 where (1=2)) and '1'='1
SQL Injection 대응 방법
- Prepared Statement
- 파라미터를 빈칸으로 둔 후 SQL 질의문을 컴파일 해둠
- 질의문 파라미터 빈칸 ‘?’ 로 놔둠
- 컴파일 해둔 질의문에 입력값을 빈칸 ‘?’에 넣음
- SQL Injection을 배우는 이유
- Prepared Statement를 잘 못 쓴 경우
- Prepared Statement를 못 쓰는 경우(적용이 안되는 곳)
- order by절
- table 이름, column 이름
- 파라미터를 빈칸으로 둔 후 SQL 질의문을 컴파일 해둠
- White List Filtering
- 단어를 필터링 하면 됨
- 화이트: 특정 단어만 쓸 수 있게 하는 것
- 블랙: 특정 단어를 못 쓰게 하는 것
- 단어를 필터링 하면 됨
if(sort == "title"){
} elif (sort == "username"){
}else{
sort = "title";
}
728x90
반응형
'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글
모의해킹 스터디 CTF 문제 - SQL Injection 5 (0) | 2024.12.10 |
---|---|
모의해킹 스터디 CTF 문제 - SQL Injection 4 (0) | 2024.12.06 |
모의해킹 스터디 CTF 문제 - SQL Injection 3 (0) | 2024.12.04 |
모의해킹 스터디 CTF 문제 - SQL Injection (Blind Practice) (0) | 2024.12.04 |
모의해킹 스터디 CTF 문제 - Error Based SQLi Basic (0) | 2024.12.04 |