xavis

2022. 4. 13. 15:36Site/LOS

이번에는 xavis를 풀어보겠습니다

이번 xavis문제는 힌트를 참고했습니다[역대급으로 까다로운 문제여서 힌트없이는 힘들었습니다ㅠ]


소스코드를 보겠습니다.

prob _ . ( )

regex like 을 필터링 해줍니다 cf) regex =  특정한 규칙으로 문자열을 찾아내줌

addslashes함수로 $_GET['pw'] 필터링

$result['pw']와 $_GET['pw']가 정확히 일치해야 클리어되는 blind sql injection 문제인 것 같습니다

기존의 blind sql injection 문제풀이럼 접근하면 되는 줄 알았습니다

 

당연히 pw의 길이를 구하고 길이가 8이라 예측했지만 아니었습니다...

 

힌트를 찾아보니 UNION 을 활용해서 푸는 방법이 있었습니다.

SQL에서 UNION은  두 개 이상의 SQL 쿼리문을 합치는 방법이고 여러개에 쿼리문을 사용하여 하나에 데이터로 출력해야되는 경우 자주 사용이 된다고 합니다. [각 쿼리의 결과 합을 반환하는 합집합 (중복제거)]

 

접근방법

select @지역변수이름:=값 -> 변수에 값을 할당하는 코드

cf) select @지역변수이름=값을 해주면 select에서 =을 비교연산자로 인식함.

 

만약 select @local_name:="1234" 라고 해준다면 지역변수이름을 local_name이라 해주고 값에 "1234"를 넣어준다는 의미입니다.

 

(SELECT @pwname:=pw WHERE id='admin') 이라고 설정을 해준다면 

pwname에 admin의 pw의 값을 넣어준다는 의미입니다.

 

하지만 @pwname에 admin의 pw값을 리턴을 해주어야 값을 알아낼텐데 위처럼하면 아무것도 리턴을 안해준다고 합니다.

여기서 리턴을 해주기 위해 UNION을 사용하여 지역변수값을 select해주면 됩니다.

 

최종 쿼리문 -> or (select @pwname:=pw where id='admin') union select @pwname#'

admin의 pw값이 우왕굳이라고 나옵니다[한글?]

 

 

 

 

 

cf) 여기서 상세한 설명을 잘해놓으신 것 같아서 참고하면 좋을것 같습니다

-> https://hackingisly.tistory.com/33

복습 좀 빡세게 해야 될 것 같습니다

 

'Site > LOS' 카테고리의 다른 글

dragon  (0) 2022.04.13
nightmare  (0) 2022.04.06
zombie assassin  (0) 2022.04.06
succubus  (0) 2022.04.05
assassin  (0) 2022.04.05