본문 바로가기

보안/기초

Error based SQL injection

bWAPP 을 통한 실습

 

먼저 실습을 하기전 디비 접속으로 간단한 개념 습득을 먼저해본다

[그림 1-1] 디비 접속

root:bug

[그림 1-2] 데이터 베이스 확인

show databases; 를 통해 현재 서버에 있는 데이터베이스들을 확인 할수 있다.

여기서 주목해야하는 디비는 bWAPP 와 information_schema 이다.

bWAPP은 실습 사이트에 있는 디비이다

information_schema의 경우 데이터 베이스에 존재하는 모든 테이블이나 클론 정보들이 view 형식으로 확인 할 수 있다.

그래서 모든 테이블에 대해서 읽기 권한이 있어서 information_schema는 공격자 입장에서 유용한 도구 이다. 그래서 많이 참고를 해서 error base sql injection을 많이들 시행한다.

[그림 1-3] 디비 접속 및 테이블 확인

bwapp 디비를 사용하고 테이블들을 확인한다.

[그림 1-4]  heroes 테이블 보기

맘에 드는 테이블 보기

[그림 1-5] 기본적인 디비 구문

가장 기초적인 디비 구문이다. id값이 1인 데이터 내용들을 보여달라

[그림 1-6] or 구문 사용

여기서  or 1=1을 추가 해준다 1=1은 참이다.

즉 뒤에값 (1=1)이 참이기 때문에 앞에 값 (id=1) 이 참이든 거짓이든 모든 값들을 출력 한다.

[그림 1-7]  or 구문에 거짓일시

뒤에 값이 거짓이라면 앞에값만 참이기 떄문에 앞에 값 내용만 출력한다

[그림 1-8] and 구문 거짓

당연한 말이지만

만약에 and 라면 뒤에값이 거짓이기 때문에 아무것도 출력을 하지 않는다.

 

union이란

컬럼정보나 데이터 정보를 추가로 붙이고 싶을 떄 사용

[그림 1-9] union 사용

이때 select 다음으로 쓸때 컬럼 갯수랑 맞아야한다 .

[그림 1-10] union 사용시 주의사항

만약에 컬럼 갯수가 안맞는다면  안 맞는다고 혼난다.

[그림 1-11] @@version 사용

단순히 숫자만 추가 하는게 아니라 함수들을 이용할수 있다.

 

실습!

[그림 2-1] 실습 환경 설정

 

 

SQL injection 파트에서 GET/search 부분으로 선택을 한다.

[그림 2-2] 환경 설정 완료

다음과 같은 화면이 나온다

해당 검색창에 영화 이름을 입력하여 search 버튼을 누르면 관련 영화 자료 들이 나온다.

데어터를 입력을 하면 웹에서는

search=’iron man’ 이런식으로 파라미터 값을 넘긴다.

이때 데이터가 입력될떄 ‘ (싱글쿼터)나 “ (더블쿼터)를 사용한데

[그림 2-3] sql injection 테스트

데이터를 입력 할때 싱글 쿼터를 한번 더 써준 상태로 검색을 하면

search='ironman' ' 이런식으로 되어

[그림 2-4] 싱글쿼터 입력으로 인한 sql 오류

sql 단에서 오류가 난다.

 

 

[그림 2-5] 더블쿼터로 테스트

그렇다면 더블커터는 어떨까?

[그림 2-6] 더블쿼터 테스트 결과

더블 쿼터는 하나의 데이터로 인식이 되는지 오류는 안난다.

 

[그림 2-7] union으로 칼럼 파악

컬럼이 몇개인지는 일일히 1,2,3,4,5…. 이런식으로 직접 다 해봐야 한다. 그렇게 하다보니 총 7개 컬럼인것을 파악

 클라이언트 환경에서는 2,3,5,4 가 떴으니 저 위치에서 인젝션을 하면 된다.

 

아니면

 

order by 를 통해 조금더 쉽게 알아낼수 있다.

[그림 2-8] order by 로 갯수 파악 성공

order by 로 정확히 맞는 갯수를 선택하면 에러가 안나지만

[그림 2-9] order by로 갯수 파악 실패

정확히 7개가 아니면 에러가 난다.

 

[그림 2-10] union을 통한 서버 버전 정보

' union select all 1,@@version,3,4,5,6,7#

union을 통해 @@version을 입력하여서 5.0.96-0ubuntu3 라는 결과를 받을 수 있었다.

 

[그림2-11] 테이블 이름들 모두 출력

0 'union select all 1,table_name,3,4,5,6,7 from information_schema.tables#

[그림 1-2]에서 디비에 information_schema 라는 디비가 존재했는데 해당 디비를 이용하여 테이블들 이름을 모두 불러낼수 있다.

 

[그림 2-12] 디비이름 테이블이름 칼럼 정보

0 'union select all null,table_schema,table_name,column_name,null,null,null from information_schema.columns#

디비 , 테이블이름, 컬럼 내용을 쉽게 한번에 볼수 있다.

해당 결과물을 쭉 내리다 보면

[그림 2-13] heroes 테이블 정보

[그림 1-4]에서 확인했던 heroes 테이블들 또한 확인이 가능하다.

[그림 2-14] heroes 테이블 내용

0'union select all 1,login,password,4,secret,6,7 from heroes#

heroes 테이블에 내용들을 확인할 수 있다.

 

[그림 2-15] users 테이블 내용

0'union select all 1,login,password,null,null,6,7 from users#

[그림 2-15]는 users 테이블에 로그인 정보와 패스워드 정보이다. 이때 패스워드 정보가 hash화 되어 있다.

이때 hash된 알고리즘이 취약한 알고리즘인지 아닌지 확인을 해야한다

[그림 2-16] hash-identifier

칼리 리눅스에 hash-identifier 툴에서 hash 된 내용이 어떤 알고리즘인지 확인이 가능한데

[그림 2-17] tunnelsup.com

hash-identifier가 틀릴수도 있으니

항상 다른 툴들을 이용해서 교차 검증이 필수 이다.

해당 암호 알고리즘은 취약한 알고리즘 중 하나인 SHA-1이다.

 

디코더툴이나 웹사이트를 찾아서 디코딩을 하는 방법도 방법이겠지만

[그림 2-18] SHA-1 HASH 구글링

암호화 되어있는 HASH를 그대로 구글링을 해도

바로 평문 문자를 확인할 수 있다.

 

 

 

 

https://adm1n1.tistory.com/92

 

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