目录
MD5的学习
[BJDCTF 2020]easy_md5
[LitCTF 2023]Follow me and hack me
[LitCTF 2023]Ping
[SWPUCTF 2021 新生赛]easyupload3.0
[NSSCTF 2022 Spring Recruit]babyphp
MD5的学习
md5()函数:
md5($a):返回a字符串的散列值
md5($a,TRUE):返回a字符串散列值的16进制转ascii码值
md5函数的语法:
可参考:PHP md5()函数详解,PHP计算MD5,md5()绕过,md5()漏洞原理剖析-CSDN博客
[BJDCTF 2020]easy_md5
1.查看源码什么都没有,尝试之后也不是sql,抓包之后看到响应头hint
2.响应头是有关md5加密的,输入的密码会被md5加密,需要绕过,参考wp,得到ffifdyop可以绕过md5的加密,原因:ffifdyop加密之后的这一串,经过十六进制的转换,可以变为
’or’6乱码,然后实现绕过
3.传入后得到以下页面
4.查看源代码,很明显是一个php弱比较以及md5函数的绕过
5.这里我使用数组绕过,数组绕过之后,跳转到如下页面
6.代码依旧是md5函数的绕过,只是传参方式是post,利用数组绕过,得到flag
[LitCTF 2023]Follow me and hack me
1.根据提示传参,得到flag
[LitCTF 2023]Ping
1.提示输入IP地址,输入127.0.0.1,发现有回显
2.输入ping的命令执行,发现提示只能输入ip
3.查看源代码,发现存在过滤,是前端过滤,我们直接禁用JS即可
4.禁用js之后,再运用命令,发现有回显
5.查看根目录,发现flag
6.使用cat命令查看flag
[SWPUCTF 2021 新生赛]easyupload3.0
1.根据提示,需要上传一个图片
2.上传成功之后,经过尝试,发现是.htaccess解析文件,新建一个文件夹,在里面输入SetHandler application/x-httpd-php,它会让后面传入的jpg文件中的php语句都可以执行
3.接着就上传jpg木马文件
4.使用蚁剑连接,得到flag
[NSSCTF 2022 Spring Recruit]babyphp
1.进入页面,发现是php代码
翻译代码为:
<?php
highlight_file(__FILE__);
include_once('flag.php'); //这行代码将包含(或导入)flag.php 文件。这意味着 flag.php 文件中定义的任何变量或函数都可以在当前文件中使用。
if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])){ //这是一个 if 语句,它包含三个条件:1.isset($_POST['a']):检查是否有一个名为 a 的 POST 请求参数。2.!preg_match('/[0-9]/',$_POST['a']):使用正则表达式检查 $_POST['a'] 是否不包含任何数字。3.intval($_POST['a']):将 $_POST['a'] 转换为整数,并检查其是否为真(即非零)。if(isset($_POST['b1'])&&$_POST['b2']){ //检查是否有一个名为 b1 的 POST 请求参数,并且 b2 参数也存在.if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])){ 、、这是一个嵌套 if 语句,它检查 b1 和 b2 的值是否不同,但它们的 MD5 哈希值是否相同。 if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){ 、、又一个嵌套 if 语句,这次它检查 c1 和 c2 的值是否不同,但它们都是字符串,并且它们的 MD5 哈希值相同。echo $flag; //如果这些条件都满足,代码将输出 $flag 变量的值,该变量从 flag.php 文件中导入}else{echo "yee"; //如果第四个if中的条件不满足,它将输出 "yee"。}}else{echo "nop"; //如果第四个if中的条件不满足,它将输出 "nop"。}}else{echo "go on"; //如果第二个if的两个条件都满足,代码将执行 if 语句块中的代码。否则,它将输出 "go on"。}
}else{echo "let's get some php";
}
2.这个题主要让a,b,c都满足条件就能得到flag,其中a涉及正则表达式,就使用数组绕过,b使用数组进行md5函数的绕过,c必须是字符串,就不能用数组绕过,需要用md5的字符串绕过