攻防世界web2做题思路(php代码审计)

题目来源:攻防世界 (xctf.org.cn)

本题为对题目给出miwen进行解密需要了解的函数有:

strrev:反转字符串
substr(string string, int a, int b);截取字符串,a为开始位置,b为长度
ord:用于返回一个字符的ASCII值
chr:与ord()函数相反,用于返回指定的字符

base64_encode,str_rot13:两种编码方式

题目源码:

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return str_rot13(strrev(base64_encode($_)));
}

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

要得到本题的flag,需要编写解题脚本

1.源码中最后一步为:

str_rot13(strrev(base64_encode($_)))

所以先构造以下语句

$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

$miwen=base64_decode(strrev(str_rot13($miwen)));

进行第一步

2.接着分析源码中for循环中的内容

大概意思是循环的将反转后的flag字符串截取,并让它变为ascii码表的下一位的字符

所以构造循环截取miwen,并把它变为ascii码表上一位字符,最后在翻转字符串,即可得到flag

for ($a=0;$a<strlen($miwen);$a++){

  $m1=substr($miwen,$a,1);

  $m2=ord($m1)-1;

  $m3=chr($m2);

  $jiemi=$jiemi.$m3;

}

$jiemi=strrev($jiemi);

echo $jiemi;

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值