웹해킹 문제를 풀다보면 php파일이 많이 나오는데 먼말인지 하나도 모르겟어서 한번 써봄
<html>
<head></head>
<link rel="stylesheet" href="/static/bulma.min.css" />
<body>
<div class="container card">
<div class="card-content">
<h1 class="title">Online Curl Request</h1>
<?php
if(isset($_GET['url'])){
$url = $_GET['url'];
if(strpos($url, 'http') !== 0 ){
die('http only !');
}else{
$result = shell_exec('curl '. escapeshellcmd($_GET['url']));
$cache_file = './cache/'.md5($url);
file_put_contents($cache_file, $result);
echo "<p>cache file: <a href='{$cache_file}'>{$cache_file}</a></p>";
echo '<pre>'. htmlentities($result) .'</pre>';
return;
}
}else{
?>
<form>
<div class="field">
<label class="label">URL</label>
<input class="input" type="text" placeholder="url" name="url" required>
</div>
<div class="control">
<input class="button is-success" type="submit" value="submit">
</div>
</form>
<?php
}
?>
</div>
</div>
</body>
</html>
코드는 이거고요
commandinjection advanced문제임
- isset(): 변수가 존재하지만 null값이라면 true반환
- $url = $_GET['url'];: URL 값을 $url 변수에 저장. $는 변수를 나타낸다
- strpos(): 이 함수는 문자열에서 문자의 위치를 찾거나, 포함하는지 확인할 때 사용 여기서는 http로 시작하는지 검사함
- shell_exec(): PHP에서 서버의 쉘(터미널) 명령어를 실행하는 함수=>서버에서 실제로 함수가 작동하기 때문에 위험하다
- escapeshellcmd: 쉘 명령어 문자열에서 위험한 특수문자들을 이스케이프해서 명령어 인젝션 위험을 줄이는 역할 앞에다가 /를 붙임
- echo: 파이썬의 print와 매우 유사하다
PHP 코드 전체 흐름 요약
- $_GET['url'] 파라미터가 있는지 확인한다.
- 있으면 $url에 저장하고, 문자열이 http로 시작하는지 검사한다.
- http로 시작하지 않으면 die('http only !')로 즉시 종료한다.
- 정상 URL이면 shell_exec('curl ...')로 요청 결과를 받아 $result에 저장한다.
- URL을 md5로 해시해 캐시 파일 경로 $cache_file을 만든다.
- file_put_contents($cache_file, $result)로 결과를 파일에 저장한다.
- 캐시 파일 링크와 결과 내용을 화면에 출력하고 return으로 종료한다.
- url 파라미터가 없으면 입력 폼을 화면에 보여준다.
md5로 해시하는 이유는 URL을 안전하고 일정한 길이의 파일명으로 바꾸기 위해서
'웹해킹' 카테고리의 다른 글
| HSPACEMall 모의해킹 후기 — 동아리 연합 Pentest 결과 정리 (0) | 2026.03.09 |
|---|---|
| 웹해킹: file vulnerability (0) | 2026.02.25 |
| 웹해킹신 8주차:Business Logic Vulnerability (0) | 2026.02.19 |
| 웹해신 6주차(error based sql injection, mango) (0) | 2026.02.05 |
| 웹해신 5주차 (0) | 2026.01.26 |