워게임 문제풀이/Segfault

<Segfault> 워게임 문제풀이 [4편] - Login Bypass 3

무너박사 2024. 5. 21. 00:43

[목표] : normaltic3 로 로그인을 하여 flag 를 탈취하라!

 

<주요 키워드>

-order by

-union


 

일단 사이트에 들어왔습니다.

차음으로 해볼것은 당연히! Burp suite 로 응답을 살펴 보겠습니다.

 

일단 쿠키변조는 불가능 한것 같습니다.

근데 POST 방식으로 ID 와 패스워드를 어딘가로 전송해주고 있습니다.

응답에는 보이지 않지만 process.php 로 가서 인증을 해주는 절차 같습니다.

로그인 창에서 sql 인젝션이 가능한지 확인해보겠습니다.


<1> 아래의 구문을 넣어주니 로그인이 되었습니다.

일단을 sql 인젝션이 가능하다는것을 확인하였습니다.

그러면 인증방식이 식별/인증 동시 , 식별/인증 분리 인지를 확인해보겠습니다.

아이디 : doldol' and '1'='1  , 비밀번호 : dol1234

 

 


아이디 : doldol' or '1'='1  , 비밀번호 : 1234

 

 

어라? 위에 설명대로 넣어주니 로그인이 불가능합니다.

그러면 sql 문의 구상을 좀 바꿔야 합니다.

 

<처음에 했던 생각> - 이러면 연산자 우선순위로 인해 doldol 로 로그인이 안될수가 없다..

select * from test where id='$id' or '1'='1' and password='$password'

 

<두번째 한 생각>- 비밀번호를 따로 if 문으로 인증하는것이라면 로그인이 안되겠다!

select * from test where id='$id' or '1'='1'

if(($sql에서 가져온 비밀번호) == ($사용자가 입력한 비밀번호)){
	로그인!
}

 

즉! 식별 절차와 인증 절차가 분리된 코드라는것을 유추해 볼수 있다.

이제 문제는 두번째 코드는 $id 를 가져오는게 아닌 '1'='1' 때문에 전체데이터를 가져오게 된다.

우리는 admin 의 정보를 db에서 가져와야한다.

즉 우리는 여기서 이렇게 생각해야한다.

 

1. admin 이라는 id 가 가진 열을 db에서 어떻게 가져오지?

2. 가져온 열로 저 if 문을 대체 어떻게 뚫어야 하지?

 


 

이 두가지를 해결해 주는것이 바로 union 이라는 sql 구문이다.

union 은 두개의 sql 구문의 결과를 합쳐준다.

문제는 union 을 쓰려면 두개의 구문의 컬럼개수가 같아야 한다는것이다.

이것을 확인하기 위해 order by 라는 문법을 써줄수 있다.

간단하게 알고 가보자.


<order by>

 

select * from test where id='임의값' or '1'='1' order by 3#

 

=> 전체 데이터를 3번째 컬럼에 맞춰서 오름차순으로 정렬해라!

핵심포인트: 만약 가지고있는 컬럼보다 숫자가 크면 에러가 난다!

(3개의 컬럼을 가지고있는 테이블에 order by 4# 를 하면 에러가 난다는 뜻이다.)

 

<union>

select * from test where id='' union select '1','1'

 

=> 컬럼을 테스트 테이블을 따르지만 첫번째 컬럼에 '1' , 두번째 컬럼에 '1' 이 들어간 열을 가지고 온다.

실제로 id ='1' , password='1' 인 열이 나온다. 그런 정보가 저장되어 있지 않아도 나온다.

이것을 통해 id='normaltic3' , password =' 1234 ' 인 열을 뽑아주고 그대로 로그인 하면 된다는것이다!!

 


 

자 이제 로그인 창에

ID = ' union select 'normaltic3','1234' #

PASSWORD= 1234

를 넣어주게 되면!

 

Flag 를 얻었다!


 

리뷰 : 이번 문제는 정말 삽질을 많이한것같다.

근데 문제가 어려운 것이 아닌 나의 sql 지식이 많이 부족해서 그런것이라는것을 몸소 깨달았다.

웹 해킹에서 sql 문법 이 얼마나 중요한 지를 알았고 , SQL 문법공부를 좀더 해야지 나중에 다른 상황에서도 응용하여

사용할 수 있을것 같다는 생각이 들었다.