Websec - level 14

 

 

 

 

input은 25글자로 제한되어 있으며, 내부함수와 설정된 문자, 문자열들이

블랙리스트로 등록되어 Input에 해당 문자가 있으면 Insecure code detected!을 출력하게 된다.

 

 


 

1.

 

 

처음에는 $blacklist{0}, $blacklist{1} ... 를 각각 출력해서 내부함수를 사용하려고 하였다.

 

 

Input : $blacklist{0}(); 

 

 

다음과 같이 $blacklist{숫자}의 결과값이 내부함수명으로 나와 함수를 실행 가능하게한다.

 

하지만 이 방법을 포기하게 된 것은. 우리가 원하는 flag값은 문제에서 sha1($flag)형식으로 되어있는 것을 알 수 있는데

 

 

 

input값이 25글자를 초과할 수 밖에 없다고 생각하여 다른 방법을 생각하게 되었다.

 

 


 

2.

 

root-me eval 문제에서도 사용했었던  not, xor과 같은 연산을 이용하여 시도하였다.

 

파일명이 길기 때문에 파일명을 GET방식으로 전달하고 Input을 통해 GET으로 전달한 파일명을 얻어서 문제를 해결하면 될 것 같다. []는 블랙리스트 되어있으니 {}로 대체해주고 NOT연산을 사용하여 작성하면

 

 

 

Input : ${~%a0%b8%ba%ab}{0} ~~

%a0 은 글자수 하나로 인식된다.

 

 

이런 형태로 input을 진행시킬 수 있을 것 같다.

 

우선 flag를 찾기위해 ()안의 payload를 실행 시켜줄 수 있는 assert를 이용하여

payload로 assert(var_dump(scandir('/')))를 사용한 후

 

 

 

찾은 파일을 file_get_contents를 통해 읽으면 문제를 풀 수 있다.

 

 

 


 

 

처음에 payload를 보낼 때 %a0%b8%ba%ab가 아닌 \xa0\xb8\ba\ab를 보냈었다.

 

 \xa0\xb8\ba\ab로 문자를 보내게 되면 

 

 

 

 

_GET으로 변형되는게 아니라 =_=G=E=T으로 변형되고 not이 되기 전 문자도 %를 사용했을 때와 다르게 진행된다.

php를 통해서 E를 not연산을 이용하면 BA가 나오게 되고 이 문자를 다시 ~\xBA 을 하게되면 º라는 문자가 나오게 된다. 하지만 ~%BA를 사용한다면 �로 출력된다.

 

정리하면

 

NOT 연산의 결과

E            =>  BA   

\xBA       =>  º        =>  =E

%BA        =>  �       =>    E

 

 

분명히 같은 값으로 연산을 하였는데 =이 추가되어 원하는 결과 값을 얻을 수 없었다.

\xBA를 bin2hex로 hex값을 구해보니 C2BA로 not 연산을 하면 3D45가 되고 -> =E가 되게된다.

 

 

\xBA를 할 때는 왜 º 로 들어가고  %BA로 할 때는 왜 다르게 들어가는지 알아봐야겠다.

'Web hacking > Websec' 카테고리의 다른 글

websec - level 24  (0) 2020.02.25
Websec - level 22  (0) 2020.02.22
Websec - level 17  (0) 2020.01.05
Websec - level 4  (0) 2020.01.05
Websec - level 2  (0) 2019.12.30

+ Recent posts