• xp_cmdshell 存储过程应用示例(C#),包含 DataReader 转换到 DataSet 过程


        最近非常想找个项目做一下,一方面可以积累些项目经验,另外也可增加点实战知识。。。为年后找工作铺垫一下,毕竟现在没有项目经验自己心里都有点底气不足~

        xp_cmdshell 是黑客们喜欢使用的一个存储过程,当然默认情况下是禁用的(如何启用就不要问我了)。如果有SQL的SA权限,使用这个存储过程可以非常轻易的获取 Windows 系统的管理员权限,比如:xp_cmdshell "net user tstuser /add",就给 Windows 系统增加了一个用户,然后再 net LOCALGROUP administrators tst /add 就把 tst 用户的权限提升为 administrators 了,微软在方便的用户的同时也给系统管理员带来了不少麻烦,这大概不是初衷。

        其实在 windows 2000 以后的 windows 平台上对权限的分配已经是非常严谨了,不是随随便便就可以执行这些高级命令的。。。闲话到此为止!

        闲来无事写的这段代码,其实没有什么实际意义(学习例外),因为在 .net 平台中 ASP.NET 的运行权限是 PowerUser 组,所以当这段代码传到虚拟空间上的时候是不能执行的,不过作为参考学习一下,还是可以看看!

    Code
        /// <summary>
        
    /// 利用 xp_cmdshell 命令返回 dos 命令结果
        
    /// </summary>
        
    /// <param name="command">dos 命令</param>
        
    /// <returns>DataSet 类型</returns>
        DataSet GetCmdShell(string command)
        {
            SqlConnection cn 
    = new SqlConnection(cns);

            DataSet ds 
    = new DataSet();
            DataTable dt 
    = new DataTable();

            
    try
            {
                SqlCommand cmd 
    = new SqlCommand();
                cmd.Connection 
    = cn;
                cmd.CommandText 
    = "xp_cmdshell";
                cmd.CommandType 
    = CommandType.StoredProcedure;

                SqlParameter param 
    = new SqlParameter("@command", SqlDbType.NVarChar, 1000);
                param.Value 
    = command;

                
    //添加 DOS 命令
                cmd.Parameters.Add(param);

                SqlDataReader reader;
                cn.Open();

                reader 
    = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                
    int fieldCount = reader.FieldCount;

                
    //添加表的字段名称和类型
                for (int i = 0; i < fieldCount; i++)
                    dt.Columns.Add(reader.GetName(i), reader.GetFieldType(i));

                
    object[] values = new object[fieldCount];
                
    while (reader.Read())
                {
                    
    //循环添加每一行记录到 DataTable
                    reader.GetValues(values);
                    dt.LoadDataRow(values, 
    true);
                }

                reader.Close();
                cmd.Dispose();
                dt.EndLoadData();
            }
            
    catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            ds.Tables.Add(dt);

            
    return ds;

        }

  • 相关阅读:
    反击黑客之对网站攻击者的IP追踪
    如何使用Nginx对抗DDoS攻击?
    nginx网站攻击防护
    Ora-01536:超出了表空间users的空间限量
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    自己动手写工具:百度图片批量下载器
    自己动手写游戏:坦克撕逼大战
    【大型网站技术实践】初级篇:海量图片的分布式存储设计与实现
  • 原文地址:https://www.cnblogs.com/jarod99/p/1377652.html
Copyright © 2020-2023  润新知