【XCTF 攻防世界】WEB 高手进阶区 web2

题目链接:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5326&page=2

打开场景,看到PHP代码

下面还有贴心注释

额,这题为啥不出在密码学里面。。。

<?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
*/
?>

那就写脚本呗

先用php写得出来最后三次加密得到的结果:

c='~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg'

然后再用python写下脚本

def decode(c):
	m=''
	for i in c:
		a=chr(ord(i)-1)
		m+=a

	print(m[::-1])
		
c='~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg'

decode(c)

得到flag

顺便解释一下php代码中的几个函数

strrev — 反转字符串

substr — 返回字符串的子串
substr ( string $string , int $start [, int $length ] ) : string
返回字符串 string 由 start 和 length 参数指定的子字符串。
string
输入字符串。必须至少有一个字符。
start
如果 start 是非负数,返回的字符串将从 string 的 start 位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。
如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。
如果 string 的长度小于 start,将返回 FALSE。
length
如果提供了正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符(取决于 string 的长度)。
如果提供了负数的 length,那么 string 末尾处的 length 个字符将会被省略(若 start 是负数则从字符串尾部算起)。如果 start 不在这段文本中,那么将返回 FALSE。
如果提供了值为 0,FALSE 或 NULL 的 length,那么将返回一个空字符串。
如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值