日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

upload_labs_pass17_二次渲染

發布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 upload_labs_pass17_二次渲染 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pass17-源碼分析

打開pass17,貌似和前面的幾關差不多(pass14,15,16都是圖片馬)。

看源碼和提示:

提示:

即利用上傳的圖片生成了一張新的圖片。

源碼:

$is_upload = false; $msg = null; if (isset($_POST['submit'])){// 獲得上傳文件的基本信息,文件名,類型,大小,臨時文件路徑$filename = $_FILES['upload_file']['name'];$filetype = $_FILES['upload_file']['type'];$tmpname = $_FILES['upload_file']['tmp_name'];$target_path=UPLOAD_PATH.'/'.basename($filename);// 獲得上傳文件的擴展名$fileext= substr(strrchr($filename,"."),1);//判斷文件后綴與類型,合法才進行上傳操作if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上傳的圖片生成新的圖片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "該文件不是jpg格式的圖片!";@unlink($target_path);}else{//給新圖片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上傳出錯!";}}else if(($fileext == "png") && ($filetype=="image/png")){if(move_uploaded_file($tmpname,$target_path)){//使用上傳的圖片生成新的圖片$im = imagecreatefrompng($target_path);if($im == false){$msg = "該文件不是png格式的圖片!";@unlink($target_path);}else{//給新圖片指定文件名srand(time());$newfilename = strval(rand()).".png";//顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagepng($im,$img_path);@unlink($target_path);$is_upload = true; }} else {$msg = "上傳出錯!";}}else if(($fileext == "gif") && ($filetype=="image/gif")){if(move_uploaded_file($tmpname,$target_path)){//使用上傳的圖片生成新的圖片$im = imagecreatefromgif($target_path);if($im == false){$msg = "該文件不是gif格式的圖片!";@unlink($target_path);}else{//給新圖片指定文件名srand(time());$newfilename = strval(rand()).".gif";//顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagegif($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上傳出錯!";}}else{$msg = "只允許上傳后綴為.jpg|.png|.gif的圖片文件!";} }

注意函數

basename()

給出一個包含有指向一個文件的全路徑的字符串,本函數返回基本的文件名。

看一些例子:

<?php echo "1) ".basename("/etc/sudoers.d", ".d").PHP_EOL; echo "2) ".basename("/etc/sudoers.d").PHP_EOL; echo "3) ".basename("/etc/passwd").PHP_EOL; echo "4) ".basename("/etc/").PHP_EOL; echo "5) ".basename(".").PHP_EOL; echo "6) ".basename("/"); ?>

輸出:

看源碼可以知道,如果圖片 的類型是png,gif,png并且Content-type是允許上傳的。(比如源碼15行)

所以在看上面的源碼的時候,只需要看一個if語句塊就行了:

if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上傳的圖片生成新的圖片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "該文件不是jpg格式的圖片!";@unlink($target_path);}else{//給新圖片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}}

在上面 的代碼中,就是只針對于jpg類型的圖片進行新的處理。PNG和GIF都是同理。

關注有一行:(使用上傳的圖片生成新的圖片)

函數imagecreatefromjpeg()

php官網的介紹:

由文件或 URL 創建一個新圖象。
imagecreatefromjpeg() 返回一圖像標識符,代表了從給定的文件名取得的圖像。

貌似也沒有特別的東西。

pass17-圖片上傳

上傳之前第14關-16關我一直用的圖片馬:shell.gif

上傳之前,先把之前幾關遺留的馬刪除。


不知道為什么我上傳完是這個鬼樣子。。。
可能是環境問題。

我將PHP版本改為7.3.4nts,清空上傳文件之后再次上傳文件。


又告訴我不是GIF格式的文件。。。

后來我又嘗試了幾次,有一次確實上傳成功了,但是文件包含怎么都不行。奇了怪了。。。

其實是因為“二次渲染”導致上傳 的圖片中的一句話木馬已經不見了。

那這一關該怎么做呢?

文件對比工具進行對比:

將二次渲染的圖片和我原先上傳的圖片shell.gif進行對比(可以用010editor進行對比)

發現:
1.文件頭的部分有一些區別。
2.一句話木馬 的內容被刪去了。

解決思路:把木馬加載哪一個地方,木馬才不會被刪掉。

當然我自己有一個圖片(不會因為“二次渲染”而導致木馬被刪掉),
上傳文件:

再次連接webshell就成功。

總結

以上是生活随笔為你收集整理的upload_labs_pass17_二次渲染的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。