20179311《网络攻防实践》第十一周作业(代码片段)

徐鹏格 徐鹏格     2022-11-15     614

关键词:

一研究缓冲区溢出的原理

sql作为一种解释型语言,在运行时是由一个运行时组件解释语言代码并执行其中包含的指令的语言。基于这种执行方式,产生了一系列叫做代码注入(code injection)的漏洞 。它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。程序员在web开发时,没有过滤敏感字符,绑定变量,导致攻击者可以通过sql灵活多变的语法,构造精心巧妙的语句,不择手段,达成目的,或者通过系统报错,返回对自己有用的信息。
Statement不能防止SQL注入, PreparedStatement能够防止SQL注入..预编译语句java.sql.PreparedStatement ,扩展自 Statement,不但具有 Statement 的所有能力而且具有更强大的功能。不同的是,PreparedStatement 是在创建语句对象的同时给出要执行的sql语句。这样,sql语句就会被系统进行预编译,执行的速度会有所增加,尤其是在执行大语句的时候,效果更加理想。而且PreparedStatement中绑定的sql语句是可以带参数的。

二研究SQL注入点的发现与注入技术

构建注入环境

1.创建一张试验用的数据表:

 CREATE TABLE users (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(64) NOT NULL,
  password varchar(64) NOT NULL,
  email varchar(64) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY username (username)
  );

添加一条记录用于测试:
   INSERT INTO users (username,password,email)  VALUES(‘tarena‘,md5(‘admin‘),‘[email protected]‘);  

2.接下来,贴上登录界面的源代码:

<html>
<head>
<title>Sql注入演示</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body >
<form action="validate.php" method="post">
  <fieldset >
    <legend>Sql注入演示</legend>
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="username"></td>
      </tr>
      <tr>
        <td>密&nbsp;&nbsp;码:</td>
        <td><input type="text" name="password"></td>
      </tr>
      <tr>
        <td><input type="submit" value="提交"></td>
        <td><input type="reset" value="重置"></td>
      </tr>
    </table>
  </fieldset>
</form>
</body>
</html>

当用户点击提交按钮的时候,将会把表单数据提交给validate.php页面,validate.php页面用来判断用户输入的用户名和密码有没有都符合要求(这一步至关重要,也往往是SQL漏洞所在)。

3.验证模块代码如下:

<html>
<head>
<title>登录验证</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<?php
       [email protected]_connect("localhost",‘root‘,‘‘) or die("数据库连接失败!");;
       mysql_select_db("injection",$conn) or die("您要选择的数据库不存在");
       $name=$_POST[‘username‘];
       $pwd=$_POST[‘password‘];
       $sql="select * from users where username=‘$name‘ and password=‘$pwd‘";
       $query=mysql_query($sql);
       $arr=mysql_fetch_array($query);
       if(is_array($arr))
              header("Location:manager.php");
       else
              echo "您的用户名或密码输入有误,<a href=\"Login.php\">请重新登录!</a>";
       
?>
</body>
</html>

代码分析:如果,用户名和密码都匹配成功的话,将跳转到管理员操作界面(manager.php),不成功,则给出友好提示信息。

演示注入手法

  填好正确的用户名(tarena)和密码(admin)后,点击提交,将会返回给我们“欢迎管理员”的界面。

  因为根据我们提交的用户名和密码被合成到SQL查询语句当中之后是这样的:

  select * from users where username=‘tarena‘ and password=md5(‘admin‘)

  很明显,用户名和密码都和我们之前给出的一样,肯定能够成功登陆。但是,如果我们输入一个错误的用户名或密码呢?很明显,肯定登入不了吧。恩,正常情况下是如此,但是对于有SQL注入漏洞的网站来说,只要构造个特殊的“字符串”,照样能够成功登录。
  比如:在用户名输入框中输入:’or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:

      select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)

  语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:

   select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)

  等价于

      select * from users where username=‘‘ or 1=1

  
因为1=1永远都是成立的,即where子句总是为真,将该sql进一步简化之后,等价如下select语句:

      select * from users

  没错,该sql语句的作用是检索users表中的所有字段。 果不其然,我们利用万能语句(’or 1=1#)能够登录!

缓冲区溢出的防范方法

/步骤
1
首先在编写程序过程中,程序员有责任和义务养成安全编程的思想,应该熟悉那些可能会产生漏洞或需慎用的函数,清楚那些在编程中要小心使用的函数(特别是在使用C语言时),例如:gets()、strcpy()等等。在软件测试阶段,要专门对程序中的每个缓冲区作边界检查和溢出检测。但是,由于程序编写者的经验不足和测试工作不够全面、充分,目前还不可能完全避免缓冲区溢出漏洞,因此这些漏洞在已经使用以及正在开发的软件中还是有存在的可能,还需要在使用软件时,对它做实时的监测。
2
其次是使用安全语言编写程序,应使用Java等安全的语言编写程序,因为Java在对缓冲区进行操作时,有相应的边界检查,所以可以有效地防止缓冲区溢出漏洞的产生。但是,Java也并非绝对安全,Java的解释器是用C语言编写的,而C并不是一种安全的语言,所以Java解释器还是可能存在缓冲区溢出漏洞并受到攻击。
3
最后可以通过改进编译器,它的主要思想是在编译器中增加边界检查以及保护堆栈的功能,使得含有漏洞的程序和代码段无法通过编译。针对gcc编译器的很多补丁就提供了这些功能,比如说Stackguard等等。

2017-2018-220179209《网络攻防》第十一周作业(代码片段)

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究MYSQL与DB2对比账号管理方式MySQL账号管理的方式与Oracle类似,由MySQL自己管理,账号存储在MySQL数据库的user表中,其账号的组成是有ip地址+用户名组成,而DB2没有自己的... 查看详情

20179311《网络攻防实践》第七周作业

1.Windows操作系统的基本结构分为运行于处理器特权模式的操作系统内核,以及运行在处理器非特权模式的用户空间代码。采用宏内核模式来进行构架,这使得任意的内核模块或设备驱动程序都可能破坏其他内核模块数据,这种宏... 查看详情

2017-2018-220179302《网络攻防》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓... 查看详情

20212911陈金翔-2022-3网络攻防实践第十一次(第十三周)作业

1.实践内容(1)web浏览器渗透攻击任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。实验步骤:①选择使用Metasploit中的MS06-014渗透攻击模块②选择PAYLOAD为任意远程Shell连... 查看详情

2017-2018-220179305《网络攻防技术》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓... 查看详情

网络攻防实践第十周作业(代码片段)

 网络攻防实践作业html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,c 查看详情

2017-2018-220179215《网络攻防实践》第十周作业(代码片段)

2017-2018-220179215《网络攻防实践》第十周作业缓冲区溢出漏洞实践缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞... 查看详情

2017-2018-220179205《网络攻防技术与实践》第十周作业缓冲区溢出攻防研究(代码片段)

《网络攻防技术与实践》第十周作业缓冲区溢出攻防研究一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一... 查看详情

2017-2018-120179206《网络攻防实践》第一周作业

...是一种相互平等交流的关系。为什么这样说,因为这是由网络攻防实践这门可得特殊性来决定的,网络攻防是门实践课,需要大量的联练习和摸索,同时大部分学生对这一领域不熟悉,需要学习Linux在内的很多新东西,在中间会... 查看详情

2017-2018-220179216《网络攻防与实践》第十周作业

缓冲区溢出漏洞实验一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回... 查看详情

第十一周作业

20162310林臻《程序设计与数据结构》第十一周学习总结教材学习内容总结图的遍历教材学习中的问题和解决过程问题1:如何进行深度优先遍历问题1解决方案:这部分答案书本中并没有详细的解答,但是娄老师给的PPT详细说明了... 查看详情

2017-2018-120179205《网络攻防实践》第一周作业

a.你对师生关系的理解,希望是哪种关系?良好的师生关系表现为:民主平等(人格平等,朋友式的友好帮助关系,教师对学生一视同仁)尊师爱生(学生尊敬教师,尊重教师的劳动和人格尊严,虚心接受教师的指导;教师热爱... 查看详情

20212911陈金翔-2022-3网络攻防实践第八次(第十周)作业

1.实践内容1.1加壳与脱壳加壳是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序... 查看详情

第十一周学习进度(补)

 第十一周所花时间20h代码行5500行博客量5篇了解到的知识点主要是大作业(掌上作业)的页面编辑,也在网上的一些例子里学会了网页设计。  查看详情

数据库第十一周作业

查看详情

第十一周作业(代码片段)

缓冲区溢出攻击原理一、缓冲区溢出攻击原理缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,... 查看详情

2017-2018-220179207《网络攻防技术》第十周作业(代码片段)

缓冲区溢出攻防研究Linux缓冲区溢出原理缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器... 查看详情

第十一周编程总结(代码片段)

这个作业属于的课程c语言程序设计Ⅱ这个作业的要求在哪里https://pintia.cn/problem-sets/1125184673725857792我在这个课程的目标是学会基础实用编程这个作业在哪个具体方面帮助我实现目标 参考文献c语言程序设计2-1宏定义“#define... 查看详情