CTFSHOW-Web入门-文件上传
web151 前端校验访问网站,出现如下页面:
右键检查发现,当我们点击 button 提交的时候,会触发下框中的匿名函数,并且从该前端代码可以得知,这里只允许上传PNG后缀的图片。
但是由于文件合法性校验发生在前端页面,故而这里我们可以进行绕过。
方法一:直接右键检查修改源码:
然后上传即可。
方法二:使用Burpsuite进行抓包:
先将PHP木马文件修改为以 .png 结尾的文件,接着使用BP抓取登陆的数据包,将文件名修改即可:
使用中国菜刀或者蚁剑连接即可,为了方便我这里直接使用HackerBar进行传参利用:
web152 前端+后端MIME校验界面与上一关一致,这里就不再截图。
直接上传一个PHP文件提示:
查看前端源码,发现这里也进行了前端的校验:
直接修改前端源码之后,进行上传发现无法成功。
于是这里使用BP抓取上传的数据库,接着发到重发器进行测试:
先直接上传PHP后缀的文件,页面返回:
通过前端代码发现,这里只要是状态码不等于0的,则都是上传失败的数据包。
经过测试发现,这里进行了MIME检测,通过修改请求头中的 Content-Type 字段, ...
MongoDB增删改查学习记录
NoSQLNoSQL,指的是非关系型的数据库。而我们平时说的关系型数据库,就是SQL,NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储;比如大数据。
而我们MongoDB就是属于非关系型的数据库。
什么是MongoDBMongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB将数据存储为一个文档,数据结构由键值对组成,类似于JSON格式,字段值可以包含其他文档、数组以及文档数组。
nosql 与 sql 的区别:
SQL术语/概念
MongoDB术语/概念
解释/说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
table joins
表连接/ ...
Mysql 增删改查学习记录
mysql数据库的基本操作1.如何登录到本地数据库
12345# 语法mysql -uuserName -pPassword或mysql -uuserName -p# 当不指定登录的主机时,默认登录的主机地址为localhost
2.如何登录到远程数据库
1mysql -uUserName -p -h IP或domain
3.如何查看当前数据库软件下有什么数据库
1show databases; # 命令
4.如何选择数据库
1use 库名;
5.如何查看当前数据库下有哪些表
1show tables;
6.如何查询表的所有数据
1select * from 表名;
7.如何查询指定字段名下的数据
1select 字段名1,字段名2 from 表名;
8.如何退出数据库的登录
123exit或quit
9.如何在数据库服务器中创建自己的数据库
1create database 库名;
10.如何在某个数据库下创建一个表
12345其语法格式为:create table 库名.表名(字段名1 字段类型,字段名2 字段类型,字段名3 字段类型);举例命令为:crea ...
Docker 学习记录
Docker 的安装查看系统信息目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 查看自己的内核:
uname -r 命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型 等)。
12[root@ls-rK8rbuXz ~]# uname -r3.10.0-1160.62.1.el7.x86_64
查看版本信息:
12345678910111213141516[root@ls-rK8rbuXz ~]# cat /etc/os-releaseNAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME= ...
CTF中PHP原生类的妙用
前言前段时间,朋友发我了一道题,代码基本的意思都能看懂。
源码如下:
这里可以看到,对象实例化的类名和参数,我们都是可控的。那么我们只需要找到 PHP原生类 中可以执行命令或者列出目录以及读取文件的类型。基本上就可以实现利用了。
但是由于当时知识量欠缺,于是进行了 Google 搜索,最终使用了PHP的 Directorylterator 内置类列出目录,使用 SplFileObject 类读取 FLAG 文件的内容。
最终将本题解出。
之前一直没有了解过相关的PHP内置类,今天想着对PHP原生类做一个总结,故而该篇文章就应运而生。
PHP原生类读取目录/文件列出目录文件类Directorylterator这里介绍两个PHP的原生类:
Directorylterator (PHP5, PHP7, PHP8)
Filesystemlterator (PHP 5 >= 5.3.0, PHP 7, PHP 8)
两类的关系可以从PHP官方文档中看出:
其实就是个继承关系,FilesystemIterator 继承父类 Directorylterator。
以 ...
CTFSHOW-Web入门-命令执行
web29 过滤FLAG访问网站,源码如下:
123456789101112<?phperror_reporting(0);if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__);}?>
通过代码审计发现,这里过滤了关键字 flag,使用了i修饰符表示不区分大小写的匹配 flag 关键字。
先试用如下 PAYLOAD 获取FLAG文件的所在位置,一般CTF比赛的FLAG都在系统的根目录下,或者网站的根目录下:
1?c=system("ls");
而这里就在网站根目录下名为 flag.php,对于过滤了 flag 关键字,我们可以使用如下方法绕过:
12345678?c=system("nl fla?.ph ...
CTFSHOW-Web入门-暴力破解
web21 基于Basic的爆破
暴破什么的,都是基操
访问网站,出现如下页面:
这里则是 HTTP 的 Basic 认证。我们输入用户名 admin 密码 随便输入 然后使用 BP 进行抓包。
在发往服务器的请求中,添加了属性 Authorization 其值为 Basic YWRtaW46YWRtaW4xMjM= 其中 Basic 后方的为 Base64 编码。
我们使用 BP 自带的 Decode 模块进行解码,观察其特征:
发现是 用户名:密码 的形式,知道该形式之后我们将其发送至暴破模块 Intrude
选择 默认的 Sniper 狙击手模式,然后在选择PAYLOAD的时候,加载题目给的字典(注意:对于新版本的BP,字典不能是中文,需要修改为英文)。
加载题目给出的字典,接着添加前缀 admin: 之后添加 Encode 模块为 Base64 编码即可。
在设置PAYLOAD的底部找到 Payload Encoding 默认会自动对 特殊字符进行URL编码,这里我们将前面取消勾选即可。让其不对 = 进行URL编码。
最后点击 Start attack 即可, ...
CTFSHOW-Web入门-信息收集
web01
Hint: 开发注释未及时删除
访问靶机网站出现页面:
右键查看源代码得到FLAG。
web02
Hint: js前台拦截 === 无效操作
访问靶机页面,提示无法查看源代码,此时可以通过对URL加入 view-source: 进行查看。
或者按 F12也可。
web03
Hint: 没思路的时候抓个包看看,可能会有意外收获
web04
Hint: 总有人把后台地址写入robots,帮黑阔大佬们引路。
根据题目的提示,我们直接访问 robots.txt 文件。
robots.txt 文件是爬虫协议文件,该文件中定义了允许哪些爬虫爬取哪些目录,以及禁止爬取哪些目录。
发现文件 flagishere.txt,直接访问:
web05
Hint: phps源码泄露有时候能帮上忙
phps文件就是php的源代码文件,通常用于提供给用户(访问者)直接通过Web浏览器查看php代码的内容。
由于首页文件是 index.php,这里我们直接尝试访问泄露的源码文件 index.phps。
web06
Hint: 解压源码到当前 ...
PHP 学习记录
PHP前置基础变量变量的简介
变量是一个可以改变的量
变量可以理解为是一个房间(仓库),而房间(仓库)是用于存放东西的,而变量也是。
变量的命名规范
必须以 $ 开始,后面跟英文字母
变量名的名称严格区分大小写
变量名不能以数字开头,但是可以包含数字
变量名可以是中文,但是不推荐这样使用
变量的名字要有意义,比如 $name , $age , $addr
要按照公司的命名规范去来。
变量的命名规则
我们在定义变量的时候,尽量做到见名知意
尽量使用驼峰命名法
小驼峰命名法: 变量名的第二个单词大写,其余小写,例如: $myName (推荐)
大驼峰命名法: 变量名的每个单词的首字母大写,其余小写,例如: $MyName
在声明变量的时候,等号两边加上空格,例如 $name = 'x1ong';
单双引号的区别
双引号可以解析变量,但是单引号不行。
12345<?php $name = 'x1ong';echo '$name'; // $name;echo "$name"; // ...