cat /flag 역할을 하는 웹 쉘을 업로드하라고 한다.
웹 쉘
웹페이지의 '웹' 과 서버에게 명령을 내려 실행하기 위한 인터페이스 역할을 하는 '쉘'의 합성어로
웹페이지에서 서버에게 명령을 실행하기 위해 만들어진 프로그램이다.
Server Side Script 형태를 갖는다.
그래서 이런 소스를 작성했다. ( webshell.php )
<?php
system("cat /flag");
?>
그리고 이 소스를 갖는 파일을 업로드해보니, Wrong Type 이라는 에러가 뜬다. 아마 php 형태의 파일을 업로드하지 못하게 막아놨을 것이다. 그래서 어떤 확장자가 허용되어있나 확인하던 중 .jpg 파일은 잘 업로드되는것을 확인할 수 있었다.
그래서 처음엔 Null Byte Injection을 수행하여, BurpSuite같은 프록시 툴에서 webshell.php%00.jpg 를 넘겨주었으나 먹히지 않았다.
이런 방식의 널 바이트 인젝션이 php 버전 5.3인지 이후부터 막혔다고 알고 있었는데 역시 먹히지 않았다.
그래서 다음엔 .htaccess 파일을 아래와 같이 만든 뒤 업로드하여, php 확장자를 입력하지 않아도 php로 인식되게끔 시도해보기도 했다.
-> /hello/webshell.php 인 것을, /hello/webshell 이라고만 입력해도 php로 인식하게끔 하는 작업.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
그리고 .htaccess 파일을 업로드하려고 했으나, Dont do that 이라며 막혀있다 ㅋㅋ
후.. 그래서 또 다른 방법으로 접근해봤다.
BurpSuite를 통해 파일을 업로드하는 패킷을 잡을 때, 중요하게 보아야 할 것은 Content-Type 항목이다.
.jpg 형태의 파일을 업로드할 때엔 " Content-Type: image/jpeg " 이라는 것을 확인할 수 있고, .php 파일을 업로드할 때엔 " Content-Type: text/php " 임을 확인할 수 있다. 따라서 파일이름은 webshell.php로 그대로 두되, 이번엔 Content-Type 을 image/jpeg로 주어 우회를 시도했다. php 파일이라고 인식하지 않게끔 해주는 것이다.
결과는 성공적으로 업로드된다. 그리고 업로드된 파일을 확인해보면 Flag값이 이렇게 나온다.
FLAG{V2hhdCBkaWQgeW91IGV4cGVjdD8=}
괄호안의 내용이 Base64인코딩 되어 있는 것 같으니 디코딩 해주면
FLAG{What did you expect?} 가 나온다.
뭘 기대했냐는 뜻이 나오길래 뭐지 했는데, 역시 이걸 Auth에 넣어보니 답이 아니였다 ㅋㅋ 그냥 Base64인코딩 되어있는 FLAG{V2hhdCBkaWQgeW91IGV4cGVjdD8=} 자체가 정답이였다.
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 45번 & 나중에 알게 되면 다시보기 (0) | 2020.11.13 |
---|---|
[Webhacking.kr] 44번 (0) | 2020.11.12 |
[Webhacking.kr] 42번 (0) | 2020.11.10 |
[Webhacking.kr] 41번 (0) | 2020.11.10 |
[Webhacking.kr] 40번 (0) | 2020.11.05 |