好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > PHP中一個有趣的preg_replace函數詳解

PHP中一個有趣的preg_replace函數詳解

熱門標簽:萍鄉商鋪地圖標注 電信外呼系統多少錢一個月 神龍斗士電話機器人 太原400電話申請流程 代理打電話機器人 合肥企業外呼系統線路 企業400電話辦理多少費用 桂陽公司如何做地圖標注 宿州正規外呼系統軟件

0x01 起因

事情的起因是下午遇到了 preg_replace 函數,我們都知道 preg_replace 函數可能會導致命令執行。現在我們來一些情況。

0x02 經過

踩坑1:

測試代碼大概是這樣的:

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

測試過程中發現通過瀏覽器的方式傳入數據的時候,會將 . + 等特殊字符轉換為 _ 。

這里涉及到了php的一個特性

php自身在解析請求的時候,如果參數名字中包含空格、.、[等字符,會將他們轉換成_。

?php
$a = $_GET;
var_dump($a);
?>

經過我的fuzz,結果如下圖:

踩坑2:

那我們知道 preg_replace 的 /e 修正符會將 replacement 參數當作 php 代碼,并且以 eval 函數的方式執行,前提是 subject 中有 pattern 的匹配。既然是這樣我們看一張圖。

圖中實際上通過 eval 執行的是 strtolower 函數。分別實際執行的是:

strtolower("JUST TEST");
strtolower("PHPINFO()");
strtolower("{${PHPINFO()}}");

第三個之所以可以執行代碼,是因為我們通過復雜(花括號)語法的方式來讓其代碼執行。

踩坑3:

回到源代碼中,我們再理解一下:

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

這里的 replacement 是 strtolower(“\\1”) ,著重理解一下 \\1 。

每個這樣的引用將被匹配到的第n個捕獲子組捕獲到的文本替換。 n可以是0-99,\0和\$0代表完整的模式匹配文本。

假設一個正則表達式是這樣的:

preg_replace('/(.*)(\&;|)' . $key . '=[^]+?()(.*)/i', '$1$2$4', $url . '');

這里的 \$1\$2\$4 等同于上面的 \1\2\4 的作用,因此我們看一下是怎么選擇匹配的。

 $1 $2   $3 $4
'/(.*)(\&;|)' . $key . '=[^]+?()(.*)/i'

0x03 解決

好了上面都已經鋪墊完坑了,這里要開始解決了。

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

我們想要讓這部分代碼達到代碼執行的效果需要達到幾個條件:

  • pattern 部分的表達式需要命中 \$value 中的數據
  • \1 中取出的數據復雜(花括號)語法的特征,來保證在雙引號的包含下達到代碼執行的效果
  • 由于php的特性url會將 . 、 [ 、 + 等特殊字符轉換為 _ 。

我們知道這里是通過 get 方式獲取到 \$regex 和 \$value 的,要想在 replacement 部分通過 \1 截取到 pattern 正則匹配命中 \$value 中的數據,并且攜帶 \$ 、 { 、 ( 這里就涉及到正則表達式的使用了。

這里我選擇了 \S ,也就是匹配任意的非空白字符,那么最后的payload長這樣

\S*()={${phpinfo()}}

0x04 后記

其實還有點小問題,我這邊沒有寫,不過大家可以看看這個深入研究preg_replace與代碼執行。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • PHP 字符串正則替換函數preg_replace使用說明
  • PHP正則替換函數preg_replace和preg_replace_callback使用總結
  • php正則之函數 preg_replace()參數說明
  • PHP 正則表達式之正則處理函數小結(preg_match,preg_match_all,preg_replace,preg_split)
  • php中preg_replace_callback函數簡單用法示例
  • php中使用preg_replace函數匹配圖片并加上鏈接的方法
  • php正則preg_replace_callback函數用法實例
  • PHP正則替換函數preg_replace()報錯:Notice Use of undefined constant的解決方法分析
  • PHP5.2下preg_replace函數的問題

標簽:衡陽 白銀 綏化 鄂州 廊坊 崇左 辛集 太原

巨人網絡通訊聲明:本文標題《PHP中一個有趣的preg_replace函數詳解》,本文關鍵詞  PHP,中,一個,有趣,的,preg,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP中一個有趣的preg_replace函數詳解》相關的同類信息!
  • 本頁收集關于PHP中一個有趣的preg_replace函數詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 办公室强行丝袜秘书啪啪| 粗大挺进粉嫩紧窄女朋友麻豆| 国产色情?伦小说| 日本h视频在线| 受不了了麻麻好爽| 美女被强行扒下丝袜糟蹋| 韩国三级电影久久| 性中国videosfreehd| 亚洲日本精品va中文字幕| 台湾A级理论片在线观看| SUMMER~乡下的性活在线播放| 黄色毛片网| 日本她在丈天面前被耍了在线观看| 激情乱欲| 国产网红主播精品无码一区| 全免费观看a级毛片| 隔壁传来娇妻呻呤二声| 甜性涩爱免费在线观看| 男人扒开女人秘?桶到爽网站| ?国产精品嫩草影院?春菇| 成人免费观看网站| 黑丝jk| 污到下面流水的视频 | 亚洲视色| 操处女视频| 父欲by金银花露| 揉我胸?啊?嗯~喷水了在线观看| 两攻一受3p调教h| 可以试看5分钟的毛片| 高贵美妇跪趴高撅肥臀| 高潮喷水一区二区三区| 深夜在线免费视频| 免费?无码?国产29在线| 国产精品亚洲欧美日韩久久| 男女强吻乳沟激烈摸下面| 欧产?日产?国产蜜臀| bl强制h| 97久久久久| 曰夲卖婬片免费看9.1 | 四月激情网| 日本六十路|