WEB——爆破wp

前言 :今天做了几道很有意思的web题,题目说是爆破,实际上与爆破y一点没有都关系。。。

爆破一

题目描述:flag就在某六位变量中。

1
2
3
4
5
6
7
8
9
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>

老规矩,不会的函数先百度:

$_REQUEST — HTTP Request 变量(超全局变量)

默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。

按我理解就是,它可以接收到通过get,post,cookie传过来的值。(所以说题目中'hello'的值我们可以通过get或者post的方式传过来)

preg_match()

正则表达式匹配,\w 代表一个数字或字母或下划线;*代表其前面的字符,可以出现多次;\w*表示有多个\w

eval() 

把字符串按照 PHP 代码来计算

$$a

可以理解为$( $a ) ,这是这道题的突破口,题目既然说 flag 在六位变量中,那我们就可以用$GLOBALS(一个包含了全部变量的全局组合数组)来输出全部变量,从中得到flag。
构造payload:

?hello=GLOBALS

此时

$$a=$(GLOBALS)=$GLOBALS

在这里插入图片描述

爆破二

题目描述:flag不在变量中

1
2
3
4
5
6
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>

这次flag不在变量中了,所以上一题的方法就没法用了,这题有两种做法:

方发一:用file_get_contents() 函数 (把整个文件读入一个字符串中)把flag.php的内容读取到hello里,然后输出。

构造payload:

?hello=file_get_contents('flag.php')

方法二:大多数服务器都是Linux,这里需要用到一个Linux的命令cat

cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file

然后构造payload:

1
2
3
4
5
?hello=); echo `cat ./flag.php`;//

`` 中是要执行的命令

//是注释掉后面的部分

之后再查看网页源码就OK了。
在这里插入图片描述

爆破三

题目描述:这个真的是爆破。

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
<?php 
error_reporting(0);
session_start();
require('./flag.php');
if(!isset($_SESSION['nums'])){
$_SESSION['nums'] = 0;
$_SESSION['time'] = time();
$_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){
session_destroy();
}

$value = $_REQUEST['value'];
$str_rand = range('a', 'z');
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
$_SESSION['nums']++;
$_SESSION['whoami'] = $str_rands;
echo $str_rands;
}

if($_SESSION['nums']>=10){
echo $flag;
}

show_source(__FILE__);
?>

这题比前两题的内容都长,但看懂以后,你就会发现比前两题都简单。

先百度一下不会的函数:

1
2
3
4
5
6
7
8
9
10
11
error_reporting(0)		// 关闭错误报告

range('a', 'z') //建立一个包含指定范围单元的数组
(所以这里的$str_rand="abcd...yz")

mt_rand(0,25) //随机返回0-25之间的一个数

substr(string,start,length) //返回字符串的一部分
string //必填,要被分割的字符串
start //必需。规定在字符串的何处开始
length //可选。规定要返回的字符串长度。默认是直到字符串的结尾

这里我们主要要构造value,使它的值与$_SESSION['whoami']相等,并且还满足 substr(md5($value),5,4)==0),由于md5不能对数组进行处理,所以这里用数组绕过。

第一次我们只要输入?value[]=ea,页面就会输出两个随机字母,然后把这两个随
机字母作为value的值再次输入,循环此过程10次,flag就出来了
在这里插入图片描述

文章目录
  1. 1. 爆破一
  2. 2. 爆破二
  3. 3. 爆破三
|