카테고리 없음

8 주차 모의 해킹 스토리

h/bhacker 2024. 12. 10. 22:57

8주차

1강

SQL Injection : Data 추출

Union

: SQL 질의 결과가 화면에 출력되는 경우

 

 

 

 

Error Based

; SQL 에러가 발생하는 경우

Blind

: 위 경울 말고도 다 됨

 

 

우리가 원하는 select 문을 실행하는 것!

 

 

SQL Injection Point 찾기

DB에게 SQL 질의문을 사용하는 곳에서 할 수 있음

파라미터

 

문장으로는 where user_id like ‘%nor%’ and ‘1%’=’1%’ 이 된다.

 

where user_id like ‘% %’ and’1’ 이것이 되는지 확인

nor를 검색했을 때와

이것을 바꾸면 nor%’ and ‘1%’=’1 로 됨 ->이 것으로 검색했을 때 결과가 같다면

SQL 질의문을 삽입했다고 판단 할 수 있음

 

http://ctf/segfaulthub/com:7777/findSQLi_1/ 이사이트로 접속해서 SQL Injection (Point찾기) 취약점 찾기

찾았다면 주소와 어디 파라미터, 데이터 찾기

>>참 / 거짓 조건 삽입 가능

 

sfUser

sfUser’ and ‘1’=’1

그냥 ‘ 사용해서 하지 말고 지금 들어가는 데이터가 서버에서 어떻게 완성되어 이결과가 나오고 있구나 생각해복 페이로드 그리기

 

2강

 

option_val=title

board_result=test 안됨

 

select where username like ‘%sfUser%’ 나

select where test like ‘%test%’

 

title’ and ‘1’=’1

 

‘1’=’1’ and title

select where ‘1’=’1’ and title like ‘%sfUser%’ -> 참 결과

select where ‘1’=’2’ and title like ‘%sfUser%’ -> 거짓 결과

 

 

test

test%’ and ‘1%’=’1 이것을 결과가 같은지 다른지 비교해본다

 

------------------------------------------------------------

정리

첫 번째 사례는 쿠키(cookie)에서도 SQL Injection이 가능하다.

column이름에 SQL Injection이 될 수도 있다.

3.

 

option_val=username board_result=sfUser sort=title sort는 정렬이다.

 

wher username like ‘%sfUser%’ order by title order by title는 어떻게 할 것인가?

 

wher username like ‘%sfUser%’ order by sort=1 -> 나옴

wher username like ‘%sfUser%’ order by sort=2 -> 나옴

 

wher username like ‘%sfUser%’ order by sort=999999999999 -> 안나옴 why? -> 컬럼 개수 초과했기 때문임

 

order by title 에 참/ 거짓 조건을 어떻게 넣을까?

 

csase when

 

사용법

csae when (조건) then (참일 때) else (거짓일 때 ) end

 

ex)

csae when (1=1) then 1 else 2 end

(참이면 결과가) 1

(거짓이면 결과가) 2

 

order by 절에서 SQL Injection을 하려면 case when이 필요하다

 

문제에 적용하면

sort= case when (1=1) than username else title end

title가 참이면 username로 정렬이 돼서 test부터 나오고 title가 거짓이면 2 test부터 정렬되서 나옴

이렇게 되면 이것만 가지고 SQL Injection이 가능하다고 판단이 가능하다.

 

/Blind SQL Injection때 말했듯이 참과 거짓조건이 when (1=1) 이 괄호 안에 잘 활용되면 데이터를 한 글자씩 뽑아낼 수 있다.

 

 

 

 

 

일부로 error 유발 해야 하는 경우가 나올 수 있다.

참 거짓 결과가 구별이 안되거나, 에러를 유발해야 할 경우(에러를 발생해야 할 경우)

ex )

(select 1 union select 2)

 

ex )

Cookie: user=sfUser’ and (select 1 union select 2 where (1=2)) and ‘1’=’1

 

--------------------------------------------------------------------------------------------------

가장 많이 사용하는 것

Cookie에서도 일어날 수 있다. http 요청해더에 있는 것도 SQL Injection이 가능하다.

column(컬럼)에서도 SQL Injection 가능하다

Order by 절에서도 SQL Injection이 가능하다. (실제로는 이것이 제일 많이 SQL Injection이 가장 많이 사용됨 이어남

---------------------------------------------------------------------------------------------------

*SQL Injection 대응방법

Prepared Statement(프리페얼드 스테이츠먼트)

: SQL Injection을 미리 컴파일 한다.

우리가 서버에 select where id=‘’여기에 파라미터가 그대로 들어가게 된다음에 이것이 실행되고 난 다음에 문제가 된 것임 ex) select where id=’qwefdgg’여기에 파라미터 그러나 Prepared Statememt를 사용하면

ex) select ~~~ where id=’wdsfsd‘ (이 SQL 질의문을 준비해놓는다.)

컴파일 해둠 단, id=’‘부분은 채워지지 않고 미피 컴파일 해둔다. select ~~~~ where id=’?‘ 이렇게 함 ?로약속함

select ~~~ where id=’ewfwe’ and ‘1’1=

 

Prepared Statement를 사용하면 처리 속도를 빠르게 하기 위해 나왔다. 처리 속도를 위해서 Prepared Statement를 사용 안합니다. 못합니다는 변명이 안된다.

왜 배운 걸까?

1) Prepared Statement를 잘 못 사용한 경우

Prepared Statement 사용하는데 이 ?를 사용해서 미리 컴파일을 해둬야 돤다. 근데 옛날 개발자분들이 그냥 개발하는 방식 그대로 select where id=’___‘ ?문법을 사용하지 않고 Prepared Statement를 그냥 사용한 경우가 있다.

 

Prepared Statement를 못 사용하는 경우가 있다.

- order by 절에는 Prepared Statement를 사용 할 수 없다. order by절에는 ?를 사용하지 못 한다. where ___like에?사용못함 파라미터에 sort, ord가 있다면 무조건 확인해봐야 한다.

- table 이름, column 이름에는 사용 못한다.

 

 

 

 

 

 

 

 

 

2.WHite List Filering 사용하기

필터링 : 단어를 기반으로 해서 글자를 제한하는 것이다.

제한을 할 때는 화이트리스트와 블랙리스트가 있다

화이트리스트 : 특정 단어만 사용할 수 있게 하는 것이다.

블랙리스트 : 특정 단어를 못 사용하게 하는 것이다.


ex)

if(sort == ‘title’) {

 

} elif(sort == ‘author’)

 

else{

sort == ‘title’

}

저런 곳에서는 위에 화이트리스트 기반으로 저헐게 하면 막을 수 있다.

 

order by________

 

 

8주차 과제

1.오늘 수업 정리

2.SQL Injection 공격기법 정리(배운 것 총정리 (공격기법이 어떤 것이 있고, 대응 방법은 어떤 것이 있는지 등 찾아보면서 공부 및 정리하기)

3. 심화 문제 풀기 (SQL Injection Advanced) 4개( 할 수 있는 데 까지 풀기)

+ 휴식 과제

1.웹개발

-게시판(검색기능까지구현) 시큐어코딩까지 해보기 그냥해보기