[목표] : 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 문법공부를 좀더 해야지 나중에 다른 상황에서도 응용하여
사용할 수 있을것 같다는 생각이 들었다.
'워게임 문제풀이 > Segfault' 카테고리의 다른 글
<Segfault> 워게임 문제풀이[6편] - SQL Injection3 (1) | 2024.05.31 |
---|---|
<Segfault> 워게임 문제풀이 [5편] - Secret Login (0) | 2024.05.22 |
<SegFault> 워게임 문제풀이 [3편] - Admin is Mine (0) | 2024.05.21 |
<Segfault> 워게임 문제풀이 [2편] - PIN CODE Bypass (0) | 2024.05.20 |
<SegFault> 워게임 문제풀이 [1편] (0) | 2024.05.15 |