소개할 sql injection자동화 도구는 다음과 같다.
실제 진단할 때 알려주셔서 간단한 쿼리문으로 테스트를 진행했다.
내가 진단했던 것은 정말 게시판에 있는 검색조회부분이었다. 검색어 조회시 상세 url이 제대로 보이지 않아서 burp로 잡은 후 url를 확인하고 information url 부분에 입력한다. 딱 search.jsp 까지만 입력했던 것 같다.
1. DB 선택 : 미리 사전에 진단했을 때 postgresql를 알고 있었는데 아쉽게도 선택지에 없었다. 그래도 문법이 유사한 oracle로 진행했다.
2. post 체크박스가 있는데, post로 체크하면 POST방식으로 전송 / 체크 안하면 get 방식으로 날라간다.
3. AND 로 공격할 것인지 OR로 공격할 것인지
4. select * from table123 where search_text like '% [test] %'; 가 기본 구문이라면.. (test라는 검색어를 검색)
실제 sqli 쿼리가 들어가는 부분은 [] 이다.
select * from table123 where search_text like '% [test%' and '1'='1] %'; => 오류 (와일드카드 '%' 짝 안맞음)
select * from table123 where search_text like '% [test%' and '1%'='1] %'; => 성공 (와일드카드 '%' 짝 맞음)
본격적으로 blind로 T/F 로 데이터를 조회하기 위해 자동화로 들어갈 쿼리문을 입력해야 한다.
select * from table123 where search_text like '% [test%' and (자동화로 들어갈 쿼리문) and '1%'='1] %'; => 성공
*(자동화로 들어갈 쿼리문) 이 부분에 DB명의 길이 확인 후 알파벳 한 개씩 넣어서 DB명을 뽑게 된다.
5. append test end of query : 자동으로 들어갈 구문 뒤에 오는 부분 , 입력 부분 뒤에를 무력화해줄 구문이 된다.
즉, [ and '1%'='1 ] 이 부분이 해당된다 ==> 완전한 sql 구문 만들기
*cookie에는 만약 회원만 조회 기능을 사용할 수 있다고 했을 때 세션값을 넣어줘야 한다.
6. POST 는 패킷에 찍히는 모든 POST값을 함께 넣어줘야 할 때 사용. 단, 마지막 부분에 자동화 쿼리가 들어가야 하기 때문에 공격을 할 파라미터의 위치를 조정해준다.
예를 들어
실제 POST값 : PAGE=10&MENU=1&PAGECOUNT=3&SEQ_NO=12312312312&SEARCH_WORD=test%25'
(%25는 %문자를 URL 인코딩한 것)
자동화쿼리가 들어가는 부분은 SEARCH_WORD 부분이 된다. SEARCH_WORD가 파라미터들 중에 중간에 들어가 있다면 위치를 마지막으로 조정해야 된다는 것.
결과적으로, Burp로 잡아보면
&SEARCH_WORD=test%25'+AND+[ 3>4 ]+and+'1%25'='1 : [] 안에 자동화쿼리가 들어가는 방식이다.
다 돌리고나면, db명, user명 등을 확인할 수 있다.
**단, 자동화도구를 돌릴 때 %를 url 인코딩을 해줘야 하기 때문에 %25로 변경해서 넣어줘야 한다!!!
'WEB > 모의해킹 진단' 카테고리의 다른 글
웹 URL 인코딩 (0) | 2023.05.21 |
---|---|
Payload (0) | 2023.05.21 |
모의해킹 진단 - SQL 편 (2) (0) | 2023.05.16 |
모의해킹 진단 - SQL Injection 편 (1) (0) | 2023.05.15 |