bWAPP 을 통한 실습
먼저 실습을 하기전 디비 접속으로 간단한 개념 습득을 먼저해본다
root:bug
show databases; 를 통해 현재 서버에 있는 데이터베이스들을 확인 할수 있다.
여기서 주목해야하는 디비는 bWAPP 와 information_schema 이다.
bWAPP은 실습 사이트에 있는 디비이다
information_schema의 경우 데이터 베이스에 존재하는 모든 테이블이나 클론 정보들이 view 형식으로 확인 할 수 있다.
그래서 모든 테이블에 대해서 읽기 권한이 있어서 information_schema는 공격자 입장에서 유용한 도구 이다. 그래서 많이 참고를 해서 error base sql injection을 많이들 시행한다.
bwapp 디비를 사용하고 테이블들을 확인한다.
맘에 드는 테이블 보기
가장 기초적인 디비 구문이다. id값이 1인 데이터 내용들을 보여달라
여기서 or 1=1을 추가 해준다 1=1은 참이다.
즉 뒤에값 (1=1)이 참이기 때문에 앞에 값 (id=1) 이 참이든 거짓이든 모든 값들을 출력 한다.
뒤에 값이 거짓이라면 앞에값만 참이기 떄문에 앞에 값 내용만 출력한다
당연한 말이지만
만약에 and 라면 뒤에값이 거짓이기 때문에 아무것도 출력을 하지 않는다.
union이란
컬럼정보나 데이터 정보를 추가로 붙이고 싶을 떄 사용
이때 select 다음으로 쓸때 컬럼 갯수랑 맞아야한다 .
만약에 컬럼 갯수가 안맞는다면 안 맞는다고 혼난다.
단순히 숫자만 추가 하는게 아니라 함수들을 이용할수 있다.
실습!
SQL injection 파트에서 GET/search 부분으로 선택을 한다.
다음과 같은 화면이 나온다
해당 검색창에 영화 이름을 입력하여 search 버튼을 누르면 관련 영화 자료 들이 나온다.
데어터를 입력을 하면 웹에서는
search=’iron man’ 이런식으로 파라미터 값을 넘긴다.
이때 데이터가 입력될떄 ‘ (싱글쿼터)나 “ (더블쿼터)를 사용한데
데이터를 입력 할때 싱글 쿼터를 한번 더 써준 상태로 검색을 하면
search='ironman' ' 이런식으로 되어
sql 단에서 오류가 난다.
그렇다면 더블커터는 어떨까?
더블 쿼터는 하나의 데이터로 인식이 되는지 오류는 안난다.
컬럼이 몇개인지는 일일히 1,2,3,4,5…. 이런식으로 직접 다 해봐야 한다. 그렇게 하다보니 총 7개 컬럼인것을 파악
클라이언트 환경에서는 2,3,5,4 가 떴으니 저 위치에서 인젝션을 하면 된다.
아니면
order by 를 통해 조금더 쉽게 알아낼수 있다.
order by 로 정확히 맞는 갯수를 선택하면 에러가 안나지만
정확히 7개가 아니면 에러가 난다.
' union select all 1,@@version,3,4,5,6,7#
union을 통해 @@version을 입력하여서 5.0.96-0ubuntu3 라는 결과를 받을 수 있었다.
0 'union select all 1,table_name,3,4,5,6,7 from information_schema.tables#
[그림 1-2]에서 디비에 information_schema 라는 디비가 존재했는데 해당 디비를 이용하여 테이블들 이름을 모두 불러낼수 있다.
0 'union select all null,table_schema,table_name,column_name,null,null,null from information_schema.columns#
디비 , 테이블이름, 컬럼 내용을 쉽게 한번에 볼수 있다.
해당 결과물을 쭉 내리다 보면
[그림 1-4]에서 확인했던 heroes 테이블들 또한 확인이 가능하다.
0'union select all 1,login,password,4,secret,6,7 from heroes#
heroes 테이블에 내용들을 확인할 수 있다.
0'union select all 1,login,password,null,null,6,7 from users#
[그림 2-15]는 users 테이블에 로그인 정보와 패스워드 정보이다. 이때 패스워드 정보가 hash화 되어 있다.
이때 hash된 알고리즘이 취약한 알고리즘인지 아닌지 확인을 해야한다
칼리 리눅스에 hash-identifier 툴에서 hash 된 내용이 어떤 알고리즘인지 확인이 가능한데
hash-identifier가 틀릴수도 있으니
항상 다른 툴들을 이용해서 교차 검증이 필수 이다.
해당 암호 알고리즘은 취약한 알고리즘 중 하나인 SHA-1이다.
디코더툴이나 웹사이트를 찾아서 디코딩을 하는 방법도 방법이겠지만
암호화 되어있는 HASH를 그대로 구글링을 해도
바로 평문 문자를 확인할 수 있다.
hash 문자로 구글링을 통해 취약한 사이트 발견
*7F0C90A004C46C64A0EB9DDDCE5DE0DC437A635C 해당 문자는 암호화된 문자이다 해당 hash 타입은 mysql5 이다. 해당 hash를 복호화 하면 'asdf' 이다 자판기에 asdf가 한번에 붙어 있어서 비밀번호 설정시 가장 많이 쓰
adm1n1.tistory.com
hash된 문자로 구글링 관련 참고 게시글
'보안 > 기초' 카테고리의 다른 글
time base sql injection (0) | 2024.01.14 |
---|---|
blind SQL injection (1) | 2024.01.14 |
TCP vs UDP (0) | 2023.11.14 |
Bind shell 과 Reverse shell (0) | 2023.10.24 |
3 way handshake 와 nmap으로 실습! (1) | 2023.10.11 |