Show ❮ Tham chiếu khác PHP Ví dụĐánh giá một chuỗi dưới dạng mã PHP: <?php $str = ‘This is a $string $time morning!’; eval(“\$str = \”$str\”;”); Đầu ra của đoạn mã trên sẽ là: This is a $string $time morning! Định nghĩa và Cách sử dụngHàm eval () đánh giá một chuỗi dưới dạng mã PHP. Chuỗi phải là mã PHP hợp lệ và phải kết thúc bằng dấu chấm phẩy. Lưu ý: Một câu lệnh trả về sẽ chấm dứt việc đánh giá chuỗi ngay lập tức. Mẹo: Hàm này có thể hữu ích để lưu trữ mã PHP trong cơ sở dữ liệu. Cú phápGiá trị tham số
Chi tiết kỹ thuật
❮ Tham chiếu khác PHP botvietbai.com BCK là giải pháp tích hợp thanh toán MOMO, ViettelPay, VNPay, Vietcombank, Vietinbank, Techcombank, MB.. dành cho cá nhân ! Eval () lưu trữ mã trong một cơ sở dữ liệu để thực hiện sau PHP eval () xây dựng được sử dụng để đánh giá một chuỗi đầu vào như PHP và sau đó xử lý nó như vậy. Hàm Eval () không phải là một hàm, nhưng nó hoạt động giống như một hàm theo nghĩa nó xuất ra mọi thứ — ngoại trừ thay vì xuất nó thành văn bản, nó xuất ra dưới dạng mã PHP được thực thi. Một sử dụng của eval () xây dựng là để lưu trữ mã trong một cơ sở dữ liệu để thực thi sau này. Ví dụ về Eval () Language ConstructĐây là một ví dụ đơn giản về mã hóa cho cấu trúc ngôn ngữ eval (). > "; eval (" \ $ a = \ "$ a \"; "); in $ a." ";?> Đoạn mã ví dụ này kết quả đầu ra Bạn bè của tôi là $ name và $ name 2 khi lần đầu tiên được gọi với lệnh in, và kết quả đầu ra Bạn bè của tôi là Joe và Jim khi được gọi lần thứ hai sau khi chạy eval (). Yêu cầu và đặc điểm của Eval ()
Nguy hiểm khi sử dụng Eval ()Hướng dẫn sử dụng PHP không khuyến khích sử dụng cấu trúc eval (), nhấn mạnh việc sử dụng nó là "rất nguy hiểm" vì có thể thực thi mã PHP tùy ý. Người dùng được hướng dẫn sử dụng bất kỳ tùy chọn nào khác ngoài eval () trừ khi điều đó là không thể. Việc sử dụng PHP eval () xây dựng trình bày các rủi ro bảo mật. Hàm eval() trong PHP có cú pháp như sau. eval ( string Theo như định nghĩa từ trang chủ của PHP. Tham khảo: https://www.php.net/manual/en/function.eval.php Nôm na thì hàm này sẽ nhận đầu vào là một string và xem nó như một đoạn code trong PHP và thực thi nó (nếu được). Vì chức năng này nên nếu ứng dụng WEB sử dụng hàm này để xử lí input người dùng mà không kiểm tra cẩn thận thì sẽ dễ dẫn đến ứng dụng WEB sẽ bị attacker khai thác và có thể dẫn đến RCE. Ví dụ về hàm eval(). Ta có thể thấy nó đã thực thi câu lệnh echo(123); Trong khi chơi CTF thì mình gặp khá nhiều bài về hàm này. Nên mình sẽ làm một bài cụ thể để có thể hiểu thêm về hàm này. Link challenge: https://websec.fr/level22/index.php Vào bài ta được như một giao diện như trên. Và bài này đã cho sẵn source-code nên ta sẽ đi đọc và phân tích nó. Bài cho ta gửi một tham số code lên, thông qua phương thức GET, và server sẽ chỉ lấy 21 kí tự, thông qua hàm substr() ở trên. Tiếp đến mình thấy nó tạo một class A và include file_containing_the_flag_parts.php này vào. Chắc flag nằm trong này :)). Tạm thời chưa hiểu đoạn này làm gì, bỏ qua đọc tiếp. Ta thấy là nó sử dụng hàm eval() ở đây để thực thi biến $code, biến này là do ta gửi lên. Nhưng nó sẽ không dễ dàng như vậy, mà có thể thấy là một cái blacklist dài ngoằn đằng trên nhằm filter $code. Để bypass đc đống blacklist ở trên thì chúng ta phải sử dụng kí tự ~ trong PHP. Kí tự nhằm đảo ngược một string. Khi ta đảo ngược nó sẽ trả về một kí tự ko phải kí tự dạng alphabet nên có thể bypass đống blacklist trên. Mình đã chạy đc phpinfo() rồi. ${~%A0%B8%BA%AB}{0} == $_GET[0] Giờ tìm cách đọc flag, nhưng tên file khá dài nên ko đọc được. Giờ để ý cái class A. Đề cho vậy chắc có mục đích, nên var_dump($a) xem có gì.$a là một object từ class A. Flag đã xuất hiện. Post navigation |