[SQL 인젝션에 대한 이해] - "검색 기능에 대한 올바른 취약점 점검 방법" 강의 내용에 대해서 질문입니다.
안녕하세요.
[SQL 인젝션에 대한 이해] - "검색 기능에 대한 올바른 취약점 점검 방법" 강의
11분 41초 부분을 따라하면서 테스트하고 있는데요.
강사님께서는 오라클 연결연산자( || )를 예로 들어서 설명해주셨느데요.
저는 mysql를 대상으로 테스트하고 있습니다.
mysql은 연결연산자가 공백이잖아요? 그래서 버프 스위트로 다음과 같이 쿼리를 날리는데 에러가 나고 있습니다. 무엇이 잘 못 되었는지 잘 모르겠습니다.
search_type=all&keyword='+(case+when+1=1+then+'test'+else+'1'+end)+'
에러:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(case when 1=1 then 'test' else '1' end) '%' or writer like '%' (case when 1=1 t' at line 1
한번 봐주시겠어요?
Answer 2
1
안녕하세요. 크리핵티브 강사님 저는 위와 관련하여 추가적인 질문이 있습니다.
질문자님 께서 질문 주신 사항과 관련하여 제가 나름대로 해결책을 찾아보려고 했는데 추가적인 질문사항이 발생했습니다.
일단 검색기능을 이용해서 검색을 하면 MySQL 게시판일 경우 index.php코드를 통해서 동작하기 때문에 먼저 C:\APM_Setup\htdocs\board\mysql\index.php 코드에서 검색 기능 동작부분을 살펴봤습니다.

아래 붉은 상자로 표시한 부분에 질문자 님께서 작성한 쿼리문을 넣게 되면
select * from {$tb_name} where title like '%{$keyword}%' or writer like '%{$keyword}%' or content like '%{$keyword}% 이 부분에 들어가서 아래와 같이 될 겁니다.
select * from tb_board where title like '%'+(case+when+1=1+then+'test'+else+'1'+end)+'%' or writer like '%'+(case+when+1=1+then+'test'+else+'1'+end)+'%' or content like '%'+(case+when+1=1+then+'test'+else+'1'+end)+'%
case when 조건문이 동작하게 되면 아래와 같이 동작 될 것 입니다.
select * from tb_board where title like '%''test''%' or writer like '%''test''%' or content like '%''test''%
싱글쿼터로 닫힌 상태에서 test가 쿼리문이 들어가기 때문에 에러가 발생하다고 생각했습니다.
그래서 저는 아래와 같이 case when 구문을 고쳐 보았습니다.
(case+when+1=1+then+test+else+1+end)
[burp에 넣는 request부분]

[실행결과]
-> 쿼리문은 동작하는 것 같은데

--> 아무런 게시물을 검색하지 못합니다.
case when 구문이 back end 단에서 동작할 때 특이하게 동작하거나 주의 해야 할 사항이 있는 건지 궁금합니다.
0
위에 제가 댓글 달어놓은거 참고하시구요.
문자열을 작성 시 싱글쿼터 처리 반드시 해주셔야 합니다.
test => 'test'
그리고 문장은 원래 에러가 발생하는 문장이 맞습니다.
mysql에서 구문 실습을 해보시면 알 수 있습니다.
0
안녕하세요.
답변이 늦어서 죄송합니다.
mysql 의 경우는 문자열과 문자열 사이에 의미없는 문자 공백, 개행, 탭 등의 문자가 있을때 연결을 해줍니다. 즉, 문자열 사이에 의미 없는 문자가 있을 경우 붙여준다는 말이죠.
그런데 문자열과 문자열이 아닌 함수, 서브쿼리 등 순수 문자열이 아닐 경우 문장 에러가 발생하게 됩니다. 연결이 안된다는거죠.
[문자열] [공백] [함수, 서브쿼리] => 에러 발생
때문에 이에 대한 활용은 MySQL에서는 할 수 없고, MSSQL, ORACLE에서는 활용이 가능합니다.
제가 이에 관련하여 강의 영상에 설명을 빠트린것 같네요. 추후에 영상 추가를 하도록 하겠습니다.
컬럼명 기반으로 테이블 개수를 출력
2
499
1
외부 자료 학습중 질문사항-메타데이터 추출 불가한 상황
1
477
1
텍스트 인코딩 한국어
1
610
1
강의랑 관련없는 내용이지만
1
525
2
왜 취약점이 존재한다고 판단할 수 있는지 궁금합니다.
2
553
1
스프링을 배우는 게 나중에 웹 취약점 진단에 도움이 될까요?
2
618
1
Fatal error
1
697
1
코드에 있는 이상한 노란박스
1
1795
1
Parse error 마지막 부분 에러
1
450
1
microsoft machine leraning server 구성 요소 오프라인 설치
1
697
1
실무에서의 버프스위트 사용이 궁금합니다!
1
370
1
sql injection이 왜 위협적인 공격인지 궁금합니다.
2
458
1
union 공격 시 최적화 방법 (게시글 상세보기)
2
258
1
질문이 있습니다
1
201
1
한글은 비트추론할때 어떻게 해야하나요?
1
231
1
로그인 버튼
1
284
1
php+mssql 연동
1
447
1
취약점 실습 에러가 안나요
1
237
1
php 기반 로그인 기능 제작 관련해서 질문드립니다.
1
365
3
[실습 7-4, 7-5, 7-6] MySQL, MSSQL, Oracle union based 공격 실습 강의 이후 상세보기에서 순차적 데이터 호출 실습 질문
1
313
1
[실습2-1] 취약점 분석 실습 도중에 질문있습니다 !!
2
222
1
[실습6-1]MSSQL ERROR-BASED 공격 실습 관련 질문 내용
2
372
1
ORA-12541
1
895
7
apache monitor is already started
1
547
1

