본문 바로가기

Hacking/write-up

(Square_CTF2017) Password checker

오류

해결: github.com/occidere/TIL/issues/116

 

docker정상작동

---- docker는 왜 준거지

 

문제화면

소스코드

 

if문에서 toBeCheckedValue와 actualValue값이 같으면 Password vaildated! 창을 띄운다.

actualValue 값을 확인해보면 password123으로 의미 없는 값이다.

(나는 actualValue값을 확인하는 방법으로 doucument.write()를 사용하는 걸로 생각했는데,

강의에서는 xnlHttp.open()안에 있는 url을 사용해서 현재url/run.php?cmd=cat%20../password.txt창을 열어서 확인했다.)

 

actualValue는 의미 없는 값이고 Password vaildated! 알람창을 띄우는 것도 무의미 한 일인데 이제 무엇을 해야할까?

 

문제에서 파일을 탈취할 수 있느냐?라는 질문을 했다...흠 모르겠다.

정답은 소스코드를 보면 알 수 있다. open에 url과 run.php?에 파라미터를 보면 명령어를 입력해주면 그에대한 결과를 출력해주는 것을 알 수 있다.

ls명령어
ls-al명령어
원래 ls-al 결과에는 현제디렉터리 상위디렉터리에 대한 정보도 출력되어야 한다.
cmd=cat run.php

cmd값을 'ls', 'id', 'ls-al', 'cat run.php'를 입력해보면 해당 명령어에 대한 결과를 출력해준다.

But, 위 명령어에 대한 결과를 보면 전부 한줄씩만 출력하고 있다는 것을 알 수 있다.

 

Why??? run.php를 거쳐서 명령어에 대한 결과가 출력이 되는데 run.php 코드에서 한줄만 출력하도록 하는 코드가 있을 듯 싶다...

 

강의에서 한줄만 출력하는 이유를 개행문자를 만나면 출력을 하지 않도록 run.php에 되어있을 것이다라고 했지만 나는 이렇게 생각을 못 했을 ...것 같다는 생각은 노노!! 생각을 길게 안해봤는데 앞으로는 생각, 고민을 오래 하도록 노력하자

tr또는 xargs사용
tr를 이용하 한줄로 출력

만약 tr을 사용하지 않고 ls -al ../ 명령어를 쳤다면 not_flag파일만 확인 가능했을 것이다.

tr없이 ls-al ../
cat flag.txt tr "\n" " "

 

**개행문자를 만나면 출력을 안하는 게 맞는지 확인**

(이 부분이 이해가 안됐었다. 개행문자를 만나서 출력이 안되는 건데 왜 뒷쪽만 출력을 해주는 건지 의문이였다.)

run.php 소스코드

run.php 소스코드를 보면 개행문자를 만나면 출력을 그만하라는 코드는 없다.

!!집중!!해서 봐야 할 부분은 exec()의 동작이다.

exec()함수는 인자로 들어온 명령어에 대한 결과중 가장 마지막 라인만 반환하는 동작을 한다.

 

그렇다면 명령어의 모든 결과를 확인하려면 어떻게 해야할까?

실행결과를 한줄로 만들어주는 명령어를 사용해주는 것이다.

ls -al | tr "\n" " " 와 같이 tr명령어를 이용하면 ls -al 명령어의 결과가 딱 한 줄이 되고, exec()에서 한 줄 중에 마지막 한줄을 출력해주므로 결국 전체 실행 결과를 확인할 수 있게 되는 것이다.

'Hacking > write-up' 카테고리의 다른 글

(Dreamhack::Webhacking)php-1  (0) 2021.05.18
(Dreamhack::Webhacking) proxy-1  (0) 2021.05.18
(Reversing)runme  (0) 2020.11.16
(HackCTF) rtlcore  (0) 2020.09.10
(HackCTF)1996  (0) 2020.09.10