成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

無字母數字Webshell之提高篇

安全 應用安全
難點呼之欲出了,我前面文章中給出的所有方法,都用到了PHP中的變量,需要對變量進行變形、異或、取反等操作,最后動態執行函數。但現在,因為$不能使用了,所以我們無法構造PHP中的變量。

前幾天有同學提出了一個問題,大概代碼如下:

  1. <?php 
  2. if(isset($_GET['code'])){ 
  3.     $code = $_GET['code']; 
  4.     if(strlen($code)>35){ 
  5.         die("Long."); 
  6.     } 
  7.     if(preg_match("/[A-Za-z0-9_$]+/",$code)){ 
  8.         die("NO."); 
  9.     } 
  10.     eval($code); 
  11. }else{ 
  12.     highlight_file(__FILE__); 

這個代碼如果要getshell,怎樣利用?

這題可能來自是我曾寫過的一篇文章,里面介紹了如何構造無字母數字的webshell。其中有兩個主要的思路:

  • 利用位運算
  • 利用自增運算符

當然,這道題多了兩個限制:

  • webshell長度不超過35位
  • 除了不包含字母數字,還不能包含$和_

難點呼之欲出了,我前面文章中給出的所有方法,都用到了PHP中的變量,需要對變量進行變形、異或、取反等操作,最后動態執行函數。但現在,因為$不能使用了,所以我們無法構造PHP中的變量。

所以,如何解決這個問題?

PHP7 下簡單解決問題

我們將上述代碼放在index.php中,然后執行docker run –rm -p 9090:80 -v pwd:/var/www/html php:7.2-apache,啟動一個php 7.2的服務器。

php7中修改了表達式執行的順序:http://php.net/manual/zh/migration70.incompatible.php

PHP7前是不允許用($a)();這樣的方法來執行動態函數的,但PHP7中增加了對此的支持。所以,我們可以通過(‘phpinfo’)();來執行函數,第一個括號中可以是任意PHP表達式。

所以很簡單了,構造一個可以生成phpinfo這個字符串的PHP表達式即可。payload如下(不可見字符用url編碼表示):

  1. (~%8F%97%8F%96%91%99%90)(); 

 

PHP5的思考

我們使用docker run –rm -p 9090:80 -v pwd:/var/www/html php:5.6-apach來運行一個php5.6的web環境。

此時,我們嘗試用PHP7的payload,將會得到一個錯誤:

原因就是php5并不支持這種表達方式。

在我在知識星球里發出帖子的時候,其實還沒想到如何用PHP5解決問題,但我有自信解決它,所以先發了這個小挑戰。后來關上電腦仔細想想,發現當思路禁錮在一個點的時候,你將會鉆進牛角尖;當你用大局觀來看待問題,問題就迎刃而解。

當然,我覺得我的方法應該不是唯一的,不過一直沒人出來公布答案,我就先拋鉆引玉了。

大部分語言都不會是單純的邏輯語言,一門全功能的語言必然需要和操作系統進行交互。操作系統里包含的最重要的兩個功能就是“shell(系統命令)”和“文件系統”,很多木馬與遠控其實也只實現了這兩個功能。

PHP自然也能夠和操作系統進行交互,“反引號”就是PHP中最簡單的執行shell的方法。那么,在使用PHP無法解決問題的情況下,為何不考慮用“反引號”+“shell”的方式來getshell呢?

PHP5+shell打破禁錮

因為反引號不屬于“字母”、“數字”,所以我們可以執行系統命令,但問題來了:如何利用無字母、數字、$的系統命令來getshell?

好像問題又回到了原點:無字母、數字、$,在shell中仍然是一個難題。

此時我想到了兩個有趣的Linux shell知識點:

  • shell下可以利用.來執行任意腳本
  • Linux文件名支持用glob通配符代替

第一點曾在在我之前的文章露出過一角,但我沒細講。.或者叫period,它的作用和source一樣,就是用當前的shell執行一個文件中的命令。比如,當前運行的shell是bash,則. file的意思就是用bash執行file文件中的命令。

用. file執行文件,是不需要file有x權限的。那么,如果目標服務器上有一個我們可控的文件,那不就可以利用.來執行它了嗎?

這個文件也很好得到,我們可以發送一個上傳文件的POST包,此時PHP會將我們上傳的文件保存在臨時文件夾下,默認的文件名是/tmp/phpXXXXXX,文件名最后6個字符是隨機的大小寫字母。

第二個難題接踵而至,執行. /tmp/phpXXXXXX,也是有字母的。此時就可以用到Linux下的glob通配符:

  • *可以代替0個及以上任意字符
  • ?可以代表1個任意字符

那么,/tmp/phpXXXXXX就可以表示為/*/?????????或/???/?????????。

但我們嘗試執行. /???/?????????,卻得到如下錯誤:

這是因為,能夠匹配上/???/?????????這個通配符的文件有很多,我們可以列出來:

可見,我們要執行的/tmp/phpcjggLC排在倒數第二位。然而,在執行第一個匹配上的文件(即/bin/run-parts)的時候就已經出現了錯誤,導致整個流程停止,根本不會執行到我們上傳的文件。

思路又陷入了僵局,雖然方向沒錯。

深入理解glob通配符

大部分同學對于通配符,可能知道的都只有*和?。但實際上,閱讀Linux的文檔( http://man7.org/linux/man-pages/man7/glob.7.html ),可以學到更多有趣的知識點。

其中,glob支持用[^x]的方法來構造“這個位置不是字符x”。那么,我們用這個姿勢干掉/bin/run-parts:

排除了第4個字符是-的文件,同樣我們可以排除包含.的文件:

現在就剩最后三個文件了。但我們要執行的文件仍然排在最后,但我發現這三個文件名中都不包含特殊字符,那么這個方法似乎行不通了。

繼續閱讀glob的幫助,我發現另一個有趣的用法:

就跟正則表達式類似,glob支持利用[0-9]來表示一個范圍。

我們再來看看之前列出可能干擾我們的文件:

所有文件名都是小寫,只有PHP生成的臨時文件包含大寫字母。那么答案就呼之欲出了,我們只要找到一個可以表示“大寫字母”的glob通配符,就能精準找到我們要執行的文件。

翻開ascii碼表,可見大寫字母位于@與[之間:

那么,我們可以利用[@-[]來表示大寫字母:

顯然這一招是管用的。

構造POC,執行任意命令

當然,php生成臨時文件名是隨機的,最后一個字符不一定是大寫字母,不過多嘗試幾次也就行了。

最后,我傳入的code為?>,發送數據包如下:

成功執行任意命令。

責任編輯:趙寧寧 來源: FreeBuf
相關推薦

2020-03-18 15:54:41

開發效率代碼

2013-04-19 10:56:54

2018-04-03 13:10:27

Java對象克隆

2012-11-05 10:43:38

軟件質量軟件開發Facebook

2012-11-06 13:24:51

Amazon軟件質量軟件開發

2012-06-08 10:12:56

軟件質量Google

2020-08-02 08:02:26

Webshell樣本安全

2011-05-19 14:11:29

Oracle

2021-12-07 08:50:40

字母區間字符串

2014-12-16 10:28:49

2012-11-07 09:48:26

2023-01-11 21:02:00

數字人民幣

2013-06-03 15:15:51

2011-02-25 10:25:07

Proftpd

2024-04-01 14:24:05

數字信任人工智能

2024-01-16 16:47:24

數字孿生建筑信息模型

2011-02-25 10:36:12

Proftpd

2009-07-31 14:50:16

電纜回波損耗

2020-09-29 06:43:12

Java

2010-09-26 16:46:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美中文日韩在线v日本 | 免费观看一级黄色录像 | 免费人成在线观看网站 | 国产乱码精品1区2区3区 | 国产成人免费视频网站高清观看视频 | 51ⅴ精品国产91久久久久久 | 成人毛片网 | 精品欧美一区二区在线观看视频 | 日本久草视频 | 99tv成人影院 | 亚洲日本三级 | 视频一区在线 | 日日拍夜夜| 麻豆国产一区二区三区四区 | 欧美老妇交乱视频 | 亚洲欧美中文日韩在线v日本 | 一级在线视频 | av永久 | 久久国产精99精产国高潮 | 国产一级一级毛片 | 精品欧美一区二区三区久久久 | 国产日韩一区二区 | 黄色网址在线免费观看 | 一级a爱片性色毛片免费 | 天天操夜夜拍 | 欧美aaa级| 国产成人精品一区二区三区在线 | 久久精品亚洲精品国产欧美kt∨ | 久久久久久久久久久久久91 | 特级特黄特色的免费大片 | 欧美激情国产日韩精品一区18 | 国产成人叼嘿视频在线观看 | 午夜免费观看 | 欧美日韩一区二区三区在线观看 | 久热伊人 | 精品亚洲一区二区 | 成人免费大片黄在线播放 | 免费一区二区 | 欧美一区二区 | 久久国内精品 | 国产精品一区二区av |