Information Technology/write-up

Login Bypass 3 - Order by

Brandon IT 2025. 5. 28. 13:59
320x100

문제

 

주어진 계정으로 로그인하였고, Request 값을 살펴본다.

 

 

SQL Injection 공격을 위해 해당 Request proxy를 repeater로 보낸다.

기초적인 SQL 인젝션 공격은 들어가지 않는 것을 확인하였다.

SQL UNION 기법을 사용해본다.

  • SQL UNION 기법 : 여러 개의 SELECT 결과를 하나로 합치는 것

ex)

SELECT name FROM users UNION SELECT title FROM posts;

→ users 테이블의 name 칼럼과 posts 테이블의 title 칼럼을 하나의 결과로 병합해주는 쿼리이다.

 

SQL UNION 을 사용하기 위한 선제조건이 있는데,

→ 두 SELECT 절의 칼럼 개수와 데이터 타입이 일치해야 한다는 것입니다. 그래야 두 테이블의 데이터를 문제없이 하나로 합칠 수 있습니다.

그래서 컬럼수가 일치해야 유니언을 사용할 수 있다.

 

 

칼럼수를 확인 하는 방법은 다음과 같다. order by

→ 제공된 계정 doldol을 활용하여, 비밀번호는 그대로 두고 아이디에 order by를 사용하여 컬럼수가 몇개인지 확인해본다.

 

 

 

 

 

order by 3 에서 error코드인 200 OK가 나왔다.

즉, 컬럼수는 2개이다.

→ 아이디 컬럼, 비밀번호 컬럼 (이렇게 두개라는 것을 간접적으로 알 수 있다)

where id = ‘’ and pw=‘’ (이와 같이 가정을 해본다)

UNION을 기준으로 {2개의 열(아이디,비밀번호)를 가진 DB를 합치는 작업}

  • 첫번째 select 는 빈칸
  • 두번째 select에서는 접속하고자 하는 아이디 normaltic3 와 임의의 랜덤 비밀번호 dol1234를 만들어서 삽입을 한다.

where id = ‘' union select 'normaltic3' , 'dol1234' -- ’ and pw=‘

아이디: ' union select 'normaltic3' , 'dol1234' --

비밀번호 : dol1234 (위에서 만든 임의의 비밀번호와 일치해야함)

 

 

 

* UNION SELECT로 여러 행을 만들어보고, 정렬 순서를 바꿨을 때 로그인되는 계정이 바뀐다면 → 서버는 첫 번째 행만 사용하고 있다.

300x250