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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

upload_labs_pass17_二次渲染

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

pass17-源碼分析

打開pass17,貌似和前面的幾關(guān)差不多(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);// 獲得上傳文件的擴(kuò)展名$fileext= substr(strrchr($filename,"."),1);//判斷文件后綴與類型,合法才進(jìn)行上傳操作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的圖片文件!";} }

注意函數(shù)

basename()

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

看一些例子:

<?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類型的圖片進(jìn)行新的處理。PNG和GIF都是同理。

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

函數(shù)imagecreatefromjpeg()

php官網(wǎng)的介紹:

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

貌似也沒有特別的東西。

pass17-圖片上傳

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

上傳之前,先把之前幾關(guān)遺留的馬刪除。


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

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


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

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

其實是因為“二次渲染”導(dǎo)致上傳 的圖片中的一句話木馬已經(jīng)不見了。

那這一關(guān)該怎么做呢?

文件對比工具進(jìn)行對比:

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

發(fā)現(xiàn):
1.文件頭的部分有一些區(qū)別。
2.一句話木馬 的內(nèi)容被刪去了。

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

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

再次連接webshell就成功。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。