欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CTF-Web10(涉及PHP代码解密)

程序员文章站 2022-04-22 12:15:22
10.NSCTF web200 那么如此看来,这题是一道关于PHP审计的题目。首先观察代码,我们先把其中的一些重要的函数提出来一个一个解释一下:(1) strrev:strrev是一个将字符串进行翻转的函数。(2)substr:substr是一个取字符串子串的函数,其用法为strsub(str, start, length),第一个参数为字符串,第二个参数为起始位置,第三个参数为子......

10.NSCTF web200

CTF-Web10(涉及PHP代码解密)

CTF-Web10(涉及PHP代码解密)



那么如此看来,这题是一道关于PHP审计的题目。

首先观察代码,我们先把其中的一些重要的函数提出来一个一个解释一下:

(1) strrev:

strrev是一个将字符串进行翻转的函数。

(2) substr:

substr是一个取字符串子串的函数,其用法为strsub(str, start, length),第一个参数为字符串,第二个参数为起始位置,第三个参数为子串长度,返回的结果就是str字符串从start这个位置开始的长度为length的子串。

(3) ord:

ord函数的参数为字符串,此函数将返回字符串第一个字符的Acsii码。

(4) chr:

chr函数的参数为整型,此函数将从指定的ASCII值返回字符。

(5) ".":

这其实不能算个函数,“.”在字符串中相当于我们Java中的“+”,用于连接字符串。

(6) base64_encode:

如名,对字符串参数进行base64编码,与之对应的解码函数为base64_decode。

(7) strlen:

strlen() 函数返回字符串的长度,中文字符串的处理使用 mb_strlen() 函数

(8) str_rot13:

如名,对字符串参数进行ROT13编码,ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得。

解释完这些函数我们再来看这段代码,相信有点编程基础的同学都能看出来这段代码做了什么:首先是将原文进行反转,然后再将反转后的字符串的每一个字符值+1,接下来再进行base64编码、反转和ROT13编码,得到我们的密文。想要得到原文,因为所有的操作都是可逆的,我们只需要将这些步骤反着来一遍即可:

a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws
=》rot13解码:
n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf
=>reverse:
fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n
=》base64解码:
~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg

如果使用代码的话:

<?php
 $_code = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";  
    $_code = str_rot13($_code);  
    $_code = strrev($_code);  
    $_code = base64_decode($_code);  
    echo $_code;  
?>

继续解密:

<?php  
$_o="~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg";  
$_="";  
for($_0=0;$_0<strlen($_o);$_0++){  
    $_c=substr($_o,$_0,1);  
    $__=ord($_c)-1;  
    $_c=chr($__);  
    $_=$_.$_c;  
}  
$_=strrev($_);  
echo $_;  
?> 

CTF-Web10(涉及PHP代码解密)

这里在提供一个python脚本:

#__author__ = 'Cser408'
import sys,base64
from string import maketrans
def rot13(data):
	intable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
	outtable = 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
	table = maketrans(intable,outtable)
	return data.translate(table)
if __name__ == '__main__':
	data = sys.argv[1]
	data = rot13(data)
	data = data[::-1]
	data = base64.b64decode(data)
	result=''
	for i in data:
		result += chr(ord(i)-1)
	result = result[::-1]
	print result

CTF-Web10(涉及PHP代码解密)


本文地址:https://blog.csdn.net/weixin_39934520/article/details/108239026

相关标签: CTF-Web php解密