[OverTheWire] Natas – Level 12

http://natas12.natas.labs.overthewire.org/

Choose a JPEG to upload (max 1KB)…

Xem source:

[php] 1000) {
echo “File is too big”;
} else {
if(move_uploaded_file($_FILES[‘uploadedfile’][‘tmp_name’], $target_path)) {
echo “The file $target_path has been uploaded”;
} else{
echo “There was an error uploading the file, please try again!”;
}
}
} else {
?>




[/php]

Đọc hiểu cơ bản, ta thấy quá trình upload ảnh không có gì đặc biệt, quan trọng nhất là ở đường dẫn của file sau khi được upload:

[php]$target_path = makeRandomPathFromFilename(“upload”, $_POST[“filename”]);

function makeRandomPathFromFilename($dir, $fn) {
$ext = pathinfo($fn, PATHINFO_EXTENSION);
return makeRandomPath($dir, $ext);
}

function makeRandomPath($dir, $ext) {
do {
$path = $dir.”/”.genRandomString().”.”.$ext;
} while(file_exists($path));
return $path;
}[/php]

Có những điểm quan trọng như sau:

  • Tên file (không bao gồm phần mở rộng) được tạo ngẫu nhiên.
  • Phần mở rộng lấy từ thuộc tính filename của form upload.
  • Thuộc tính filename có phần mở rộng cố định là .jpg:
    [php].jpg)[/php]

Vì mọi thuộc tính của form (name và value) đều có thể thay đổi được, nên ta hoàn toàn có thể upload 1 file .php lên web để thực thi tác vụ mình muốn (code trên server theo như ta thấy thì nó không xử lý định dạng file) emo_popo_smile

Tạo file 12.php có nội dung:

[php][/php]

Tại form upload, sửa thuộc tính filename thành *.php:

[html][/html]

Chọn file 12.php và tiến hành upload:

The file ... has been uploaded

Nhấn vào link:

jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY

→ flag = jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY.

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *