目录
十一.爆破
PHP的基本语法
变量与常量
数据类型
流程控制
函数
文件操作
数据库交互
1.substr() 函数
2. intval() 函数
十二.XFF
X-Forwarded-For(简称XFF)
十三.rce1
shell 命令分隔符
isset()函数
preg_match_all()函数
${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提供了丰富的流程控制语句,包括if、switch、while、for等。例如:
$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
)。- 其他类型:布尔值、浮点数等按规则转换(如
true
→1
,3.14
→3
)。
总之,上面php代码的意思是:
用户需找到一个字符串,使其 MD5 哈希值同时满足:
- 第 2、15、18 位字符相同(如均为
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 mexcept:return 0
for i in s:for j in s:for k in s:a = i + j+kmd5= 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知识......累了