【WEB】Polar靶场 11-15题 详细笔记

目录

十一.爆破

PHP的基本语法

变量与常量

数据类型

流程控制

函数

文件操作

数据库交互

[1.substr() 函数](#1.substr() 函数)

[2. intval() 函数](#2. intval() 函数)

十二.XFF

X-Forwarded-For(简称XFF)

十三.rce1

[shell 命令分隔符](#shell 命令分隔符)

isset()函数

preg_match_all()函数

[{IFS}](#{IFS})

十四.GET-POST

十五.被黑掉的站


十一.爆破

又是php代码,对于我来说根本不会呀,还是先来学点基础的php知识吧


PHP是一种广泛使用的开源服务器端脚本语言,专为Web开发设计,同时也可以作为通用编程语言使用。其语法吸收了C语言、Java和Perl的特点,易于学习且功能强大。PHP的主要特点包括动态页面生成、数据库交互、文件操作等,适用于构建动态交互性网站。

PHP的基本语法

PHP代码通常嵌入在HTML中,使用*<?php ... ?>*标签包裹。以下是一个简单的PHP示例:

复制代码
<!DOCTYPE html>
<html>
<body>
<?php
echo "Hello, World!";
?>
</body>
</html>

在上述代码中,echo用于输出内容到网页。

变量与常量

  • 变量 :以*$*开头,区分大小写。例如:

    name = "PHP"; echo name;

  • 常量 :使用*define()*定义,通常以大写字母命名。例如:

    define("SITE_NAME", "PHP中文网");
    echo SITE_NAME;

数据类型

PHP支持多种数据类型,包括:

  • 标量类型:布尔型、整型、浮点型、字符串。

  • 复合类型:数组、对象。

  • 特殊类型:资源、NULL。

示例:

复制代码
$integer = 10; // 整型
$string = "学习PHP"; // 字符串
$array = array(1, 2, 3); // 数组

流程控制

PHP提供了丰富的流程控制语句,包括ifswitchwhilefor等。例如:

复制代码
$hour = date("H");
if ($hour < 12) {
echo "早上好!";
} else {
echo "下午好!";
}

函数

函数是PHP中实现代码复用的重要工具。定义函数的语法如下:

复制代码
function greet($name) {
return "Hello, " . $name;
}
echo greet("PHP");

文件操作

PHP支持多种文件操作,例如读取、写入、删除文件:

复制代码
// 写入文件
file_put_contents("example.txt", "学习PHP!");

// 读取文件
$content = file_get_contents("example.txt");
echo $content;

// 删除文件
unlink("example.txt");

数据库交互

PHP常用于与数据库交互,尤其是MySQL。以下是一个简单的MySQL连接示例:

复制代码
$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
$conn->close();

感觉跟学过的python和c语言有很多相似之处,但是又有挺大区别的

接下来看看题目

知识点

1.substr() 函数

作用:从字符串中提取子串。

代码中的用法

  • substr($pass, 1, 1):提取密码的第 2 个字符(索引 1)。
  • substr($pass, 14, 1):提取密码的第 15 个字符(索引 14)。

2. intval() 函数

作用:将变量转换为整数类型。

转换规则

  • 数字字符串 :直接转为数字(如 "5"5)。
  • 非数字字符串 :从开头截取数字部分,剩余部分忽略(如 "5apple"5"apple"0)。
  • 其他类型 :布尔值、浮点数等按规则转换(如 true13.143)。

总之,上面php代码的意思是:

用户需找到一个字符串,使其 MD5 哈希值同时满足:

  1. 第 2、15、18 位字符相同(如均为2);
  2. 这三位的数值运算结果(例如(2+2+'2')/2=21)恰好等于第 32 位字符(如1)。

方法一:根据php代码推算出答案

下面是python脚本

复制代码
import string
import hashlib
s=string.ascii_letters+string.digits
def intval(m):
    try:
        m=int(m)
        return m
    except:
        return 0
for i in s:
    for j in s:
        for k in s:
            a = i + j+k
            md5= hashlib.md5(a.encode('utf-8')).hexdigest()
            if md5[1]==md5[14]==md5[17]:
                if intval(md5[1])!=0:
                    if (intval(md5[1])+intval(md5[14])+intval(md5[17]))/intval(md5[1])==intval(md5[31]):
                        print(a,end=' ')

这个脚本我写的是3位数的(1位数的不存在,2位数的看下面的php脚本)

所以答案有:

aDp a6e b7l ejt hc2 jGd ktD o07 pjd ubv vMJ v8O wuB wyG xjF AKh DCj D36 GT7 H3D Jik JKh KtR K2e LfJ Lqj Nzc Oie OiU R7V ScB SSM SVi UYg WwF 1zg 4cQ 422 6xU 6Vh 7vE


php脚本

复制代码
<?php
$s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
for ($a = 0; $a < 62; $a++) {
	for($b = 0;$b < 62;$b++){
		$f = $s[$a].$s[$b];
		$pass = md5($f);
		if (substr($pass, 1, 1) === substr($pass, 14, 1) && substr($pass, 14, 1) === substr($pass, 17, 1)) {
			if ((intval(substr($pass, 1, 1)) + intval(substr($pass, 14, 1)) + substr($pass, 17, 1)) / substr($pass, 1, 1) === intval(substr($pass, 31, 1))) {
				echo $f,"\n";
				error_reporting(0);
			}
		}
	}       
}
?>

答案有: 3j ZE

方法二:

就是用爆破(题目名)的方式

方法三:(最简单)

根据题目得知当pass满足条件后会

include('flag.php');

将指定路径下的flag.php文件的内容插入并执行到当前代码的位置

那么可以直接访问/flag.php试试(我觉得这算一个小bug吧,一般来说是访问不了的)

复制代码
flag{8277e0910d750195b448797616e091ad}

十二.XFF

这道题挺简单的

X-Forwarded-For(简称XFF

是一个HTTP 请求头字段,主要用于记录客户端的原始 IP 地址,尤其在客户端与服务器之间存在代理(如反向代理、负载均衡器)时发挥作用。

因此,只需要伪造个XXF就行了

简单拿下

复制代码
flag{847ac5dd4057b1ece411cc42a8dca4b7}

十三.rce1

又是php

复制代码
就过滤了个空格,能拿到flag算我输
IP :
 
<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/ /", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

先讲知识点

shell 命令分隔符

|----------|-------------------------|
| 符号 | 作用 |
| ; | 按顺序依次执行各个命令。 |
| && | 前一个成功才执行下一个。 |
| || | 前一个失败才执行下一个。 |
| & | 前一个在后台执行,同时可执行其他命令。 |
| | | 前一个的输出作为后一个的输入。 |

isset()函数

作用 :用于检测变量是否已设置且值不为 null

本题作用 :检查$_GET超级全局数组中是否存在键名为ip的元素。

preg_match_all()函数

作用 :PHP 中的正则表达式匹配函数,用于在字符串中全局搜索所有匹配项

本题作用:检查输入是否包含空格,若不包含则继续执行后续代码

${IFS}

  • IFS (Internal Field Separator)是 Bash 中的内置变量,表示内部字段分隔符,默认包含空格、制表符和换行符。
  • **${IFS}**会被替换为 IFS 变量的当前值。

所以这段代码实现了一个 ping 工具网页接口:检查用户输入的 IP 是否存在且不含空格,若通过则执行 ping 命令并返回结果,否则提示错误。

所以先输入127.0.0.1;ls 看看 (其实只输入**;ls**也行)

欧克,看来是有用的,接下来查看fllllaaag.php文件

输入**;cat${IFS}fllllaaag.php**

发现啥都没有,其实在这呢

复制代码
flag{a3949821f7627a7fd30ab0722ff9b318}

十四.GET-POST

这题也非常简单

先用GET请求传 ?id=1

再用POST请求传 jljcxy=flag

简简单单

复制代码
flag{a52b7cac3af0b081349001c92d79cc0a}

十五.被黑掉的站

老规矩,先用dirsearch目录扫描

扫出来两个,分别访问看看

这么看来应该是用/index.php.bak中的密码对/shell.php进行爆破,废话不多说开爆

小技巧:/index.php.bak这里可以按ctrl+u变成下面这样

复制代码
flag{8e539a7a46fea05dea18b9b9f9ff6a63}

Day5:

原本打算每天做5道题如何写一篇笔记的,前面两天太懒了,题目做了但是笔记懒得写了。。哎,实在是太懒了

不行,本人在此立下flag,每天必须写一篇笔记,做不到的话3天不碰手机

今天写了五道题,打了一个非常简单的靶机,学会了用hydra工具爆破,还学会了一些php知识......累了

相关推荐
xuhaoyu_cpp_java6 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
Cloud_Shy6189 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊10 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风10 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
伊布拉西莫14 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习
AOwhisky15 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
niuniuyi~16 小时前
QT学习笔记
笔记·qt·学习
咸甜适中16 小时前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
xuhaoyu_cpp_java16 小时前
项目学习(三)代码生成器
java·经验分享·笔记·学习
my_daling17 小时前
松下伺服驱动器参数保存流程(已在松下A5上验证)
笔记