[SQL] SUBSTR , IF , AS 구문 사용방법 (SELECT문 사용시 컬럼명 자리엔 함수식이 들어갈 수 있다)

2025. 1. 9. 23:52·SQL

안녕하세요! SQL 인젝션에 대하여 공부를 하던중 제가 미숙한 SQL 문법을 발견해서 실험을 해본 내용을 남기는 글입니다!

해당 내용을 공부하며 Blind SQL 인젝션 진행시 ASCII를 굳이 쓸 필요 없이 if구문을 를 사용할 수도 있다는 것을 깨달았습니다. if 문으로 참 거짓이 바뀌는 것을 통해 Blind SQL 인젝션을 진행할때 사용해볼 수 있을것 같습니다. 개인적으로 ascii 값을 비교해서 하는방법이 힘들었는데 그것보다는 편해서 종종 이용해볼 것 같습니다 :)

 

SQL 인젝션 공부중 문자 하나만 출력해야 하는 상황에서 드는 의문이 있었습니다.

 

SQL 구문 결과값을 한문자만 출력하거나 TRUE , FALSE 로 출력하려면 어떻게 해야할까?

실험

 

1. 우선 기존의 로그인을 시도한다면 아래와 같은 구문을 사용해야 합니다.

 

> 기존 로그인 시도 SQL 구문

select password from userlog where id="james" and password="admin1234"
(원래는 컬럼명에 * 를 붙이지만 지금은 password 값이 출력되는지 확인차 넣어주었습니다)

 

SQL 구문 시도
SQL 쿼리 성공


 

2. 그러면 만약에 결과값을 한문자만 출력해야 한다면?

 

> 아래 사진과 같이 substr 함수를 사용하시면 됩니다. 여기서 헷갈리실 수 있는 포인트는 컬럼명이 들어갈 자리인데 substr() 함수가 들어가도 되냐? 인데, 컬럼명 부분을 저렇게 함수식으로 사용하게 되면 select password from userlog where id="james" and password="admin1234" 를 실행후 결과값에서 한글자만 가져오게 됩니다. 즉 substr이란 함수는 컬럼명에 영향을 미치는게 아닌 전체 쿼리 결과값에 영향을 미친다는 뜻이죠! substr 사용법은 아래와 같습니다.

 

substr([검색할 컬럼명],[추출 시작위치],[시작위치로부터 추출한 문자 개수])

 

> SUBSTR 을 이용한 한문자만 출력하는 로그인 시도 쿼리

select substr(password,1,1) from userlog where id="james" and password="admin1234";

한문자만 출력하는 쿼리문
'admin1234' 중 한문자만 출력


 

3. SQL인젝션 시도시 유용한 하게 쓸수있는 IF 문

 

> 위에 substr 함수와 같이 Blind SQL 인젝션에 사용하기 좋은 if 구문이 있습니다. 사용법은 다음과 같습니다.

 

if([조건식],[참일경우 결과값],[거짓일경우 결과값])

 

> IF문을 활용한 참 거짓 쿼리

select if(substr(password,1,1)='a',true,false) from userlog where id="james" and password="admin1234";

if 문과 substr 의 조합 쿼리
admin1234 란 비밀번호중 앞자리가 a 인 경우가 참이니깐 1을 반환
admin1234 란 비밀번호중 앞자리가 b 인 경우가 거짓이니깐 0을 반환

 


> IF문을 활용한 참 거짓 쿼리 (Error Based SQL 인젝션용)

MySQL 에선 double 형 변수의 최대값을 넘어가게 되면 에러가 발생되도록 되어있습니다. dobule 형 변수의 범위는 다음과 같습니다. ( -1.22E-308 ~ 1.79E+308)  << 만약 웹 서버의 디버깅모드가 켜져있다면 이 범위를 넘는 값을 삽입함으로써 에러를 의도적으로 발생시켜 Error Based SQL Injection 을 시도해볼수 있습니다.

select if(substr((password),1,1)='a', 9e307*2,0) from userlog where name='james';

 

(참일 경우 에러발생!) : password 맨 앞자리는 a 라는 문자가 맞기때문에 범위초과로 에러발생

password 값은 admin1234 이므로 이 상황은 참입니다.


(거짓일 경우 에러X) : 거짓일경우 조건식대로 0 을 출력한다.

거짓인 조건식을 가진 쿼리

 

에러가 발생안하고 결과값 출력


 

4. 그런데 컬럼명이 이상하게 나옵니다... if(substr... 이라고 이상한 컬럼명으로 나오는데 이를 password 라는 컬러명으로 출력이 되도록 바꾸려면??

 

> 조건식 앞에 as 를 사용하시면 됩니다. as란 alias 의 약자로 별칭이란 뜻이며 as 이후 써주는 이름대로 컬럼명이 출력이됩니다.

 

> AS 를 사용한 컬럼명 변경

select if(substr(password,1,1)='a',true,false) as password from userlog where id="james" and password="admin1234";

as 를 사용하여 password 란 별칭 생성
출력된 결과값의 컬럼명을 통해 as 구문 사용 성공!


긴 글 읽어주셔서 감사합니다!

'SQL' 카테고리의 다른 글

[SQL] UNION ,ORDER BY, LIMIT , LIKE  (0) 2024.05.26
SQL 의 기초문법!  (0) 2024.05.17
'SQL' 카테고리의 다른 글
  • [SQL] UNION ,ORDER BY, LIMIT , LIKE
  • SQL 의 기초문법!
무너박사
무너박사
IT 보안 블로그 입니다. 제가 작성하는 블로그가 누군가의 공부에 조금이라도 도움이 되길 바라며 작성하였습니다.
  • 무너박사
    무너박사의 연구일지
    무너박사
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • WEB 지식 (3)
      • 웹해킹 (13)
      • 웹개발(PHP-Mysql) (12)
      • 웹개발(JSP-Oracle) (2)
      • 워게임 문제풀이 (19)
        • Segfault (17)
        • Dreamhack (2)
      • SQL (3)
      • Python (2)
      • AI (1)
        • LLM(Large Language Model) (1)
      • Kail Linux (3)
      • 잡다한 지식 (2)
      • 모바일 앱개발(Kotlin-PHP-Mysql) (13)
      • 모바일 앱해킹(Android) (31)
        • Frida Lab (2)
        • Android DIVA (8)
        • Insecure Bank (20)
      • 안드로이드 위협 탐지 및 우회 (0)
        • 루팅 탐지 & 우회 (0)
        • 디버깅 탐지 & 우회 (0)
        • 에뮬레이터 탐지 & 우회 (0)
        • Frida 탐지 & 우회 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      앱해킹
      XSS
      웹해킹
      취업반 6기
      안드로이드 스튜디오
      normaltic
      android diva
      모바일앱개발
      sql injection
      MySQL
      Koltin
      mobile diva
      모바일 앱해킹
      리패키징
      취업반6기
      워게임
      php
      해킹
      취업반
      모의해킹
      Blind sql injection
      insecure bank
      모바일 앱개발
      칼리리눅스
      Android Studio
      인시큐어 뱅크
      인시큐어뱅크
      시스템해킹
      Kotlin
      dom based xss
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    무너박사
    [SQL] SUBSTR , IF , AS 구문 사용방법 (SELECT문 사용시 컬럼명 자리엔 함수식이 들어갈 수 있다)
    상단으로

    티스토리툴바