SQL 인젝션 공격 시 FROM 절 취약성 분석 방법

SQL 인젝션 공격 시 FROM 절 취약성 분석 방법기술 관련 포스팅은 또 오랜만에 작성합니다… 이번 기술 포스팅도 웹 해킹의 꽃, SQL 인젝션 관련 주제입니다.

자, 오랜만에 포스팅을 시작합니다!
아시다 시피, 사용자 입력 값을 통해서 WHERE절의 조건문에 숫자형, 문자형, 일자로 사용되기, 칼럼으로도 사용되기도 한다.

또 ORDER BY절의 정렬 대상 컬럼, 혹은 ASC, DESC정렬 방식 키워드를 받는다.

뿐만 아니라 오늘의 주제인 FROM절에 사용되는 테이블을 사용자 입력 값에서 받는 이론도 볼 수 있다.

사용자 입력 값이 FROM절에 사용될 경우 어떻게 취약성 분석을 할 수 있는지 알아보자.먼저 파라미터가 FROM절에 사용되는 것을 어떻게 알 수 있을까?웹이라는 제약된 환경에서 서버 측 코드를 볼 수 없어 알 방법이 없다.

다만, 추론은 가능하다.

예를 들어 게시판이란 애플리케이션은 같은 소스 코드로 여러가지 기능 제공이 가능하다.

말씀 드리고 커뮤니티 자료실 등… 그렇긴 다른 기능이지만, 소스 코드는 같다.

그러나 데이터베이스의 테이블은 다른 확률이 높은( 같은 테이블을 사용하고 구분(※)컬럼을 사용하는 경우도 있다).또, 파라메타 이름을 통해서 해당 입력 값이 FROM절에 사용된다고 추론할 수 있다.

예컨대 tb_name, table_name, tbname, tname등의 파라메타 이름은 테이 이름으로 사용될 가능성이 높다고 추론할 수 있다.

(물론 WHERE절의 문자형에서 사용되는 경우도 있다.

)그러므로 위의 2가지 사실을 통해서 사용자 입력 값이 FROM절에 사용된다고 추론이 가능하다.

물론 아직 추론 단계에 불과하다.

취약성 분석을 통해서 확실한 판단이 가능하다.

이제는 취약 여부를 분석할 차례다.

간단한 실습을 통해서 알아보자.tb_name매개 변수를 통해서 FROM절의 테이블 명으로 사용되며, 이에 대한 결과값을 웹 페이지 내에 출력하는 간단한 애플리케이션이다.

간단한 방법으로 WHERE 절을 사용함으로써 취약성 분석을 용이하게 할 수 있다.

최초 요청은 결과를 진정으로 유도하여 웹페이지 내의 결과가 정상 출력됨을 알 수 있다.

페이로드: ex_member(1=1)페이로드: ex_member(1=1)두 번째 요청은 결과를 허위로 유도하여 웹 페이지 내 데이터가 출력되지 않음을 알 수 있습니다.

페이로드: ex_member(1=2)페이로드: ex_member(1=2)위 실습을 통해 SQL 인젝션 시 FROM 절에 대한 취약점 분석이 가능합니다.

하지만 이 방법은 서버 측 쿼리 내 WHERE 절이 선언되지 않을 경우 가능합니다.

만약 WHERE절 선언이 되어 있을 것으로 추론이 된다면 주석을 통해서 작성된 WHERE절을 주석 처리가 되어 정상 구문이 됩니다.

payload(1):ex_member(1=1–payload(2):ex_member(1=2)–그러나 이 방법도 또 문제가 발생할 수 있다.

java웹 애플리케이션의 경우 Prepared Statement을 잘 사용합니다만.사용자 입력 값이 삽입되는 곳을 PlaceHolder이다”?”문자를 사용하고 프리 컴파일 후에 셋토타ー메솟도인 setInt, setString등에서 사용자 입력 값을 대체한다.

아래의 소스 코드는 실습 소스 코드에서 tb_name파라미터는 FROM절의 테이블로 사용되었으며 num파라미터는 프리 컴파일 후에 setInt메서드를 통해서 치환 처리된다…. string tb_name = request.getParameter(“tb_name”); string num = request.getParameter(“num”); string sql = “SELECT * FROM” + tb_name + “WHERE num=? “; pstmt = con.prepareStatement(sql); pstmt。setInt(1, Integer.parseInt(num));;테이블명 ‘ex_member’와 num값에 의해 id값이 웹페이지 내에 출력됩니다.

이전에 본 WHERE 절과 주석을 사용하면 아래와 같이 오류가 발생하게 된다.

이유는 주석을 사용하면 서버 측 작성된 “WHERE Num=?” 부분이 주석 처리되어 셋터를 통해 값을 치환하려 하지만 Place Holder 주석 처리로 인해 오류가 발생하게 된다.

이에 대한 방법으로 Place Holder 문자를 삽입하면 된다.

‘?’는 setInt에 의해 ‘1’로 대체되고, 결국 ‘where1=1’의 진정한 조건문이 만들어진다.

그러나 필자는 이 방법을 권하지 않는다.

이유는 PlaceHoler의 개수를 정확히 맞춰야 한다는 것이다.

사용자 입력치로 바꾸는 것도 있지만, 서버 측 설정 값, 변수 값으로 치환된다 일이 있으므로, 개수 추론은 사용자 입력치만 할 수는 없다.

물론 일일이 추가하면 언젠가는 해당될 것이다…이에 나이 그리고 대체되는 데이터의 자료형을 모르기 때문에, 조건문이 거짓말이 되는 것을 전제로 or연산자를 넣고 쿼리를 작성해야 한다.

단지”변수가 조금 많은 “으로 정리가 가능하다.

PlaceHolder문자를 추가하는 방법보다 훨씬 편한 방법이 있다.

WHERE절이 있던 PlaceHolder가 있다고 전혀 신경 쓸 필요가 없다.

그것은 “서브 퀄리티”의 사용에 쉽게 해결할 수 있다.

(이 서브 질을 하기 위해서 예전의 서문이 너무 길었다.

)···-, .-;;)SQL인젝션 공격 시 FROM절에서 의심되는 파라미터가 있으면 서브 쿼리를 당장 사용하자.아래 그림과 같이 정상적으로 기능이 작동하면’어라?!
”이거 이거, 약할 것 같구나”라고 생각해도 좋다.

payload: (ex_member から * 을선택)apayload: (ex_member から * 을선택)a위의 구문이 “ex_member”와 결과가 같은 이유는 “(select* from ex_member)a”와 “ex_member”의 결과 데이터가 같기 때문입니다.

그리고 조건문 참여와 허위를 통해 확실한 취약점이 존재하는지 여부를 판단할 수 있습니다.

payload: (ex_member から * 을 선택하여 1 = 1) apayload: (ex_member から * 을 선택하여 1 = 1) apayload: (ex_member から * 를 선택합니다.

1 = 2)apayload: (ex_member から * 를 선택합니다.

1 = 2)a그동안 SQL인젝션 공격 시 FROM절 취약성 분석 방법에 대해서 알아보고 왔는데, 서브 쿼리를 통해서 간단하게 취약성 분석이 가능하다는 것을 알았습니다.

서브 쿼리는 SQL기본 문법에 항상 등장하는 기초로서 SQL에서 자주 사용되며 SQL인젝션 공격 때에도 흔히 쓰이는 문법이라 꼭 알아 두셔야 합니다.

저의 강의에서 SQL기본 문법에 대한 강의가 있으므로 SQL기본 문법이 부족한 편은 아래의 강의를 수강하고 학습하세요.https://inf.run/ZMVh[무료] SQL 인젝션 공격을 성공시키기 위한 SQL 기본 문법 – 인프론 | 강의 웹 해킹의 꽃이라 불리는 SQL 인젝션 공격을 배우기 위한 기초 단계!
SQL 기본 문법에 대한 강의입니다!
SQL 인젝션 공격을 성공시키고 싶으시면 먼저 이 강의를 들으세요!
강의 소개 웹 해킹의 꽃이라 불리는 SQL 인젝션 공격을 배우다… inf.run그리고 SQL 인젝션에 대해 더 자세히 알고 싶으신 분은 아래 강의를 통해 수강신청을 해주세요!
(비밀댓글 또는 문자로 할인쿠폰 요청 시 20% 할인쿠폰을 드립니다.

물론 몇분만…) https://inf.run/EBAL모의 해킹 실무자가 가르치고 SQL Injection공격 기법과 안전 코딩:PART 1- 인 프레온| 강의 모의 해킹 실무자가 가르치고 웹 해킹의 꽃 SQL Injection!
공격과 방어를 동시에 배우고 보세요.[사진]모의 해킹 실무자가 가르치고 SQL Injection공격 시리즈!
[사진]PART(1):기초/실무 공격/안전 코딩 현재···inf.run모의해킹 실무자가 알려주는 SQL Injection 공격기법과 시큐어코딩 : PART 1 – 인프론 | 강의 모의해킹 실무자가 알려주는 웹해킹의 꽃 SQL Injection!
공격과 방어를 동시에 배워보세요. [사진] 모의해킹 실무자가 알려주는 SQL Injection 공격 시리즈!
【사진】PART(1) : 기초 / 실무 공격 / 시큐어 코딩 현재 ···inf.run모의해킹 실무자가 알려주는 SQL Injection 공격기법과 시큐어코딩 : PART 1 – 인프론 | 강의 모의해킹 실무자가 알려주는 웹해킹의 꽃 SQL Injection!
공격과 방어를 동시에 배워보세요. [사진] 모의해킹 실무자가 알려주는 SQL Injection 공격 시리즈!
【사진】PART(1) : 기초 / 실무 공격 / 시큐어 코딩 현재 ···inf.run