反射(Reflection)可以在运行时获
得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等反正说白了就是通过反射能够获取一个未知类的类型。下面通过代码来讲解

2、命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行

这部分就实现了读取文件的数据到文本框中,其中Encoding.Default.GetString这个方法只能,读取文本文件。不能读取Word,所谓文本文件就是可以用记事本打开的。

2:通过反射建立工厂

public static T Instance<T>(string assembly, string type)        {            if (string.IsNullOrEmpty throw new ArgumentException("type:参数不能为空!");            //1、获取有效的程序集            Assembly mAssembly = string.IsNullOrEmpty ? Assembly.GetCallingAssembly() : Assembly.Load;            var t =  mAssembly.CreateInstance;             return t;        }
  • 参数assembly 指的是程序dll的路径如果本地传空
  • 参数type 指的是指定类的路径

调用:var assembly = Instance<DogInfo>(“”,
“AenericApp.Entity.DogInfo”);即可

当然orm也是运用很多反射大家自己可以学习以上就是一个简单介绍

分析代码

同理,文件的写入,我们在3中写好内容之后,点击2,弹出文件保存对话框SaveFiledialog,然后选择好路径之后,点击写入,就将我们在3中写好的内容,保存在指定的路径了。

1:反射的基本用法

public class ReflectionTest {                /// <summary>        /// 反射名称        /// </summary>        public string ReflectionName { get; set; }        public string GetName()        {            return "张三";        }    }

           Type type = typeof(ReflectionTest);            string name = type.Name;//获取当前成员的名称            string fullName = type.FullName;//获取类的全部名称不包括程序集            string nameSpace = type.Namespace;//获取该类的命名空间            var assembly = type.Assembly;//获取该类的程序集名            var module = type.Module;//获取该类型的模块名                        var memberInfos = type.GetMembers();//得到所有公共成员

在控制台打印结果如下图:

图片 1

           //获取当前执行代码的程序集            Assembly assem = Assembly.GetExecutingAssembly();            Console.WriteLine(assem.FullName);            var types = assem.GetTypes();//程序集下所有的类            Console.WriteLine("程序集包含的类型:");            foreach (var item in types) {                Console.WriteLine("类" + item.Name);            }

打印结果

图片 2

DVWA

图片 3

 1  <?php 2  3 if( isset( $_POST[ 'Submit' ]  ) ) {     4     // Get input 5     $target = $_REQUEST[ 'ip' ];       //low级别中没有进行任何过滤 直接把get的值输出    6  7     // Determine OS and execute the ping command. 8     if( stristr( php_uname, 'Windows NT' ) ) { 9         // Windows10         $cmd = shell_exec( 'ping  ' . $target );11     }12     else {13         // *nix14         $cmd = shell_exec( 'ping  -c 4 ' . $target );15     }16 17     // Feedback for the end user18     echo "<pre>{$cmd}</pre>";19 }20 21 ?>
   private void txtReadPath_Click(object sender, EventArgs e)        {            //打开文件对话框            using (OpenFileDialog openFileDialog = new OpenFileDialog            {                if (openFileDialog.ShowDialog() == DialogResult.OK)                {                    //显示文件的全路径                    txtReadPath.Text = openFileDialog.FileName;                }            }        }        /// <summary>        /// 读取文件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnNewRead_Click(object sender, EventArgs e)        {            //创建文件流(读文件的时候,FileMode选择Open)            using (FileStream fileRead = new FileStream(txtReadPath.Text,FileMode.Open))            {              //创建btpe数组                byte [] fileByte=new byte[fileRead.Length];                //把文件数据读取到数组中                fileRead.Read(fileByte, 0, fileByte.Length);                //现在将数据转化为string格式的数据,好显示在txt控件中,通过下面的方法把byte数组转化为string字符串              txtContent.Text= Encoding.Default.GetString;            }        }

1、各种框架、插件等位置都有可能出现命令执行,升级到新版本,多打补丁

现在实现功能:

 1 <?php 2  3 if( isset( $_POST[ 'Submit' ]  ) ) { 4     // Get input 5     $target = $_REQUEST[ 'ip' ]; 6  7     // Set blacklist 8     $substitutions = array( 9         '&&' => '',          //对输入的 && 和 ; 进行过滤10         ';'  => '',11     );12 13     // Remove any of the charactars in the array (blacklist).14     $target = str_replace( array_keys( $substitutions ), $substitutions, $target );15 16     // Determine OS and execute the ping command.17     if( stristr( php_uname, 'Windows NT' ) ) {18         // Windows19         $cmd = shell_exec( 'ping  ' . $target );20     }21     else {22         // *nix23         $cmd = shell_exec( 'ping  -c 4 ' . $target );24     }25 26     // Feedback for the end user27     echo "<pre>{$cmd}</pre>";28 }29 30 ?> 

文件读写:需要实现的功能是:点击1,弹出文件打开对话框OpenFiledialog,选择要读取的文件,点击确定之后,把文件的路径显示在1上,然后点击读取,把文件的内容显示在3上面;

3、少用框架/CMS

 Encoding.Default.GetString这个方法还有个问题,会乱码:

解决方法:
txtContent.Text = Encoding.GetEncoding.GetString; 
修正之后:


好了,下面开始文件的写入功能实现:






步骤:我们先在文本框中输入内容,然后点击第二个文本框,弹出保存对话框,我们选择路径,输入要保存的名字。然后点击保存。
所有的代码如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace FileReadDemo{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }                private void txtReadPath_Click(object sender, EventArgs e)        {            //打开文件对话框            using (OpenFileDialog openFileDialog = new OpenFileDialog            {                if (openFileDialog.ShowDialog() == DialogResult.OK)                {                    //显示文件的全路径                    txtReadPath.Text = openFileDialog.FileName;                }            }        }        /// <summary>        /// 读取文件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnNewRead_Click(object sender, EventArgs e)        {            //创建文件流(读文件的时候,FileMode选择Open)            using (FileStream fileRead = new FileStream(txtReadPath.Text,FileMode.Open))            {              //创建btpe数组                byte [] fileByte=new byte[fileRead.Length];                //把文件数据读取到数组中                fileRead.Read(fileByte, 0, fileByte.Length);                //现在将数据转化为string格式的数据,好显示在txt控件中,通过下面的方法把byte数组转化为string字符串              //txtContent.Text= Encoding.Default.GetString;   //这个方法会乱码、                txtContent.Text = Encoding.GetEncoding("utf-8").GetString;            }        }        /// <summary>        /// 文件写入        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void textWritePath_Click(object sender, EventArgs e)        {            //创建文件保存对话框            using (SaveFileDialog saveFileDialog = new SaveFileDialog            {                if (saveFileDialog.ShowDialog() == DialogResult.OK)                {                    //全路径                    textWritePath. Text = saveFileDialog.FileName;                }            }        }                    private void btnWrite_Click(object sender, EventArgs e)        {            //将内容写入到指定的路径文件中            using (FileStream fileWrite = new FileStream(textWritePath.Text.Trim(),FileMode.Create))            {                             //Write方法,需要传入Byte数组,这个时候,就有个问题了,我们在文本控件中,输入的内容是字符串的,不过同理,字串串也可以转化为byte数组                byte [] fileWriteByte=Encoding.GetEncoding("utf-8").GetBytes(txtContent.Text.Trim;                fileWrite.Write(fileWriteByte, 0, fileWriteByte.Length);            }        }                }}

发表评论

电子邮件地址不会被公开。 必填项已用*标注