攻防世界-web2-(详细操作)做题过程

如有不对的地方,还请各位大佬指正。下面开始做题:

进入题目以后就可以直接看到代码:

其中代码函数的作用

strlen() 函数返回字符串的长度

strrev()  反转字符串顺序

<?php
echo strrev("Hello World!");
?>

输出反转字符串 "!dlroW olleH":

substr() 函数返回字符串的一部分。substr(string,start,length)

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

<?php echo substr("Hello world",6); ?>从字符串中返回 "world":

ord() 函数返回字符串中第一个字符的 ASCII 值。

chr() 函数从指定 ASCII 值返回字符。并可以指定ASCII是十进制或是十六进制或是八进制。

 “.” 是字符运算符,作用是把两个字符串连接起来,其使用方法:首先创建一个PHP示例文件;然后定义两个变量;最后通过“$result.$result”方式将两个变量连接起来即可

str_rot13() 函数对字符串执行 ROT13 编码。

ROT13 编码是把每一个字母在字母表中向前移动 13 个字母得到。数字和非字母字符保持不变。

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){ //加密$str
    $_o=strrev($str);  //反转变量$str内字符的顺序
    // echo $_o;             
        
    for($_0=0;$_0<strlen($_o);$_0++){    //按照$_o的长度循环函数,   
       
        $_c=substr($_o,$_0,1);   //从第一个字符(且只有一个字符,长度为1个字符)开始输出$_o
        $__=ord($_c)+1;          //返回$_C第一个字符串的ASCII码并加一
        $_c=chr($__);            //返还$__为ASCII且是十进制
        $_=$_.$_c;               //拼接两个值并赋值$_
    } 
    return str_rot13(strrev(base64_encode($_))); //将$_用base64加密,加密后反转支付,然后每个字母向前移动13位,数字和其他支付不变。
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?> 

逆向输出也就意味着加密顺序的第一步会变最后一步,以此排序,比较重要的点是str_rot13()是将字母向前移动13个字母,由于只有26个字母,所以第二次str_rot13,字母就变回了没有移动前。在 for($_0=0;$_0<strlen($_o);$_0++)循环中:

第一轮:第一步:执行是第一个字符的赋值,第二步:单一的第一个字符转换为十进制的ASCII码加一,第三步:转换ASCII为字符串,第四步:拼接空变量第一个字符并赋值。

第二轮:第一步:执行是第二个字符的赋值,第二步:单一的第二个字符转换为十进制的ASCII码并加一,第三步:转换ASCII为字符串,第四步:拼接含有了第一个字符的变量与第二个字符并赋值。

......

所以我们构建的逆向代码应该就只有对于第二步的加一变成减一,并不需要对for循环中的顺序进行颠倒,带入循环确实不需要颠倒循环里面的加密顺序,但是换一遍代码呢?会不会需要颠倒循环代码里面的顺序?应该不需要吗??? 请大佬指教!!!

言归正传,最后的逆向代码就应该构建成这样:

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$a = base64_decode(strrev(str_rot13($miwen)));


for($i=0;$i<strlen($a);$i++){
	$_c=substr($a,$i,1);
	$d=ord($_c)-1;
	$_c=chr($d); 
	$b=$b.$_c;
	
}
$p= strrev($b);
echo $p;
?> 

 执行下来得到了flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

攻防世界(CTF)中,Web PHP2通常指的是一道涉及PHP安全漏洞的题目。这类题目通常会涉及到常见的PHP漏洞,如文件包含漏洞、SQL注入、命令注入等。以下是一个关于Web PHP2的简要介绍: 1. **题目背景**: - 通常会给出一个简单的Web应用,要求参赛者通过分析代码或通过黑盒测试找到漏洞并利用。 2. **常见漏洞**: - **文件包含漏洞**:通过包含本地或远程文件来执行恶意代码。例如,使用`include`或`require`函数时,未对输入进行严格过滤。 - **SQL注入**:通过构造特殊的SQL语句来绕过认证或获取敏感信息。 - **命令注入**:通过在输入中插入系统命令来执行恶意操作。 3. **解题思路**: - **代码审计**:分析给定的PHP代码,寻找未过滤的输入点。 - **黑盒测试**:通过工具(如Burp Suite)发送各种请求,观察响应,寻找漏洞。 - **利用漏洞**:找到漏洞后,构造特定的请求来执行恶意代码或获取敏感信息。 4. **示例**: ```php <?php $file = $_GET['file']; include($file); ?> ``` 在这个例子中,`$file`参数未经过滤,直接被`include`函数包含。如果攻击者传入一个恶意文件路径,可能会执行任意代码。 5. **防御措施**: - **输入验证**:对所有用户输入进行严格验证和过滤。 - **使用白名单**:只允许特定的输入值。 - **最小权限原则**:确保Web应用运行在最小权限的环境下,减少潜在风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值