문제에 접근한 결과 error를 발생시켜보라고 한다.
Show userdetails에 있는 [TheCow] 또는 [Admin]을 클릭하면 usr 파라미터 뒤에 이상한 글자들이 들어간다. Base64라 판단하여 디코딩해본 결과
TheCow : 063223006156141254
Admin : 042211014182140
의 결과물들이 떨어진다.
무슨 의미일지 계속 생각해봤지만 나오지 않았다. 일단 문제에서 에러를 찾아보라했으니 에러를 찾아보자.
usr 파라미터값 변경, -1 대입, having절 이용 등등 많은걸 해보았지만 에러는 나오지 않았다. usr 파라미터값을 이용해서 에러를 추출하는 것은 아니라 생각된다.
결국 구글링을 통해 힌트를 얻었고 에러를 발생시키는 것은 usr[]=값 형태로 파라미터를 배열 형식으로 전송하는 것이다.
배열형식으로 전송하면 preg_match는 배열이 아니라 문자열로 된 파라미터 2개를 기대한다는 에러를 발생시킨다.
preg_match() 함수에 대한 메뉴얼(http://php.net/manual/en/function.preg-match.php)을 참조하면 패턴과 그 패턴이 존재하는지 확인할 문자열을 필요로 한다. 그렇기 때문에 문자열 2개가 필요한 것인데 우리는 배열을 전송시켰기 때문에 에러가 발생한 것이다.
이것을 통해 에러를 발생시켰고 에러에 나타난 uri에 접근해보자.
접근한 결과 php코드가 나타나고 이를 통해 usr 파라미터값은 이 php의 encrypt 함수를 통해 나타난 것이란 것을 알 수 있다.
online php tester(http://sandbox.onlinephpfunctions.com/)에서 decrypt 함수를 통해 디코딩한 결과 TheCow와 Admin이 잘 떨어진다.
이제 encrypt 함수를 통해 injection POC를 작성하면 될 것이다.
' or username='Admin'#를 encrypt한
[ MDc2MTUxMDEyMTczMTk0MjUyMTQwMDkzMjA4MTExMTg4MTQ1MDc2MjQyMDg4MDM2MTg3MDEyMjQ0MDA0MDQyMjAw ]
를 넣어보면 Admin의 값이 잘 떨어짐을 확인하였다.
1. ' order by 8# 에서 에러가 발생한 것으로 컬럼은 7개임을 확인
2. ' union select 1,2,3,4,5,6,7# 으로 어디에 뭐가 출력되는지 확인
3. ' union select 1,Username,3,4,5,Password,7 from level3_users where Username='Admin'# 을 통해 Admin의 패스워드 획득
'Solve Problem' 카테고리의 다른 글
[RedTiger's Hackit] 5번 문제 (0) | 2018.01.29 |
---|---|
[RedTiger's Hackit] 4번 문제 (0) | 2018.01.28 |
[RedTiger's Hackit] 2번 문제 (0) | 2018.01.28 |
[RedTiger's Hackit] 1번 문제 (0) | 2018.01.28 |
[SuNiNaTas] WEB부분 올클 (0) | 2018.01.22 |