《Web安全程序设计与实践》课件项目5_第1页
《Web安全程序设计与实践》课件项目5_第2页
《Web安全程序设计与实践》课件项目5_第3页
《Web安全程序设计与实践》课件项目5_第4页
《Web安全程序设计与实践》课件项目5_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5更新密码——

二阶注入攻击【项目描述】本项目对数据库二阶SQL注入攻击和防护进行实训。本项目包含三个任务,首先建立一个实现密码更新功能的网站,接下来利用更新密码功能的二阶SQL注入攻击实现对数据库中其它用户账号密码的修改,最后分析了二阶SQL注入攻击的原理并使用转义函数和参数化更新实现二阶注入防护。通过本项目的实训,可以解释和分析二阶SQL注入漏洞产生的原理及危害,能够应用转义处理或者参数化更新实现二阶SQL注入攻击的防护。【知识储备】二阶SQL注入原理一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的。比如万能密码攻击就是直接向数据库提交构造的特殊字符串进行注入攻击。但这种一阶注入攻击容易引起注意,通过添加转义函数或者参数化查询就可以封堵。与一阶注入不同,二阶SQL注入首先将攻击字符串输入保存在数据库中,然后攻击者提交第二次HTTP请求。为处理第二次的HTTP请求,应用程序需要检索存储在数据库中保存的输入并构造SQL语句。由于程序没有对存储在数据库中的内容进行防注入处理,于是发生了SQL注入攻击。更新密码与二阶注入攻击用户注册的特殊账号,会在更新密码的过程中引起二阶注入攻击。其原因在于更新密码密码的过程需要执行数据库记录的更新操作,即更新该账号对应的密码字段。如果数据库更新没有进行转义或者使用参数化,则用户名中的截断符号等则可以破坏正常的SQL更新语句执行,从而引起二阶注入攻击。二阶SQL注入攻击的危害二阶SQL注入也是SQL注入攻击的一种,只是注入需要在二次数据库查询、更新等条件下发生。只要存在注入攻击漏洞,危害性都很大。【任务5-1】建立密码更新功能的网站在本任务,分别创建用户注册的HTML页面和PHP后端页面,以实现用户注册功能。另外将项目3的登录验证页面复制过来并增加了防注入功能,并增加登录成功后的更新密码链接。同时分别创建更新密码功能的HTML页面和PHP后端页面,实现登录用户密码的更新。最后进行用户注册、登录与更新密码功能测试。5-1-1任务实现创建用户注册页面实现注册功能登录验证页面更新密码页面更新密码功能页面5-1-2功能测试验证禁止重复账号注册功能验证正常注册与修改密码功能【任务5-2】二阶注入攻击测试在本任务,利用二阶SQL注入攻击测试修改数据库admin用户的密码,并对攻击原理进行分析。5-2-1测试过程在浏览器输入http://localhost/register/register.html打开注册页面。Username和Password分别输入admin'#(注意:为admin加上英文的单引号和井号)和123456,如图5-5所示。点击Submit按钮,提示注册成功。点击登录超链接,在登录页面的Username和Password分别输入注册时输入的admin'#和123456,点击Submit按钮,提示欢迎访问信息,如图5-6所示。以上过程说明,即使用户名中含有单引号,但是在check_register.php和check_login.php中使用了转义函数,因此不会截断SQL语句形成SQL注入。因为数据库可以识别转义字符,故按照转义规则将用户实际输入的用户名和密码保存到数据库中。从图5-7可以看到数据库存储的用户信息,和用户输入的是一致的。继续点击“修改密码”超链接,打开修改密码页面。在当前密码和新密码分别输入123456和admin,点击Submit,提示密码修改成功。重新检索users表,发现用户admin的密码被修改成了admin,而用户admin'#的密码不变,如图5-8所示。接下来打开登录页面,在Username和Password分别输入admin和admin,发现成功登录,如图5-9所示。5-2-2测试分析注册功能分析在浏览器打开的页面register.html中的Username和Password分别输入admin'#和123456,那么在注册文件check_register.php中的第6行变量$username的值为admin\'#,因此第14行的查询语句为:select*fromuserswhereusername='admin\'#';由于第二个单引号被转义,故第1个和第3个单引号为一对,变量关系没有被破坏,井号位于一对单引号的变量中,不会注释掉后面的SQL语句内容。同理在第26行的插入语句中,井号也不会破坏SQL语句结构。根据以上分析,在check_login.php中,井号也不会破坏SQL语句结构。更新密码功能分析在updatepasswd.php文件中,第12行中变量$username的值为admin'#,第15行更新密码的SQL语句为:$sql="UPDATEusersSETpasscode='$pass'WHEREusername='$username'andpasscode='$curr_pass'";将$username=admin'#,$pass=admin,$curr_pass=123456代入到该语句后,$sql变量的内容变成了:UPDATEusersSETpasscode='admin'WHEREusername='admin'#andpasscode='123456'由于#不在一对单引号中,所以成为SQL语句的注释,故实际执行的SQL语句变成了:UPDATEusersSETpasscode='admin'WHEREusername='admin'因此实现了将admin账号的密码进行更新。【任务5-3】二阶注入攻击防护在本任务,使用PHP转义函数和参数化更新实现对更新密码引起的二阶SQL注入攻击进行防护,并验证防护效果。5-3-1使用PHP转义函数打开updatepasswd.php,将第12行修改为:$username=mysqli_real_escape_string($con,$_SESSION['username']);保存后打开login.html,在Username和Password分别输入admin'#和123456重新登录,然后点击修改密码超链接,在当前密码和新密码分别输入123456和pass,点击Submit按钮,会弹出“密码更改成功”的对话框。打开终端重新检索users表,发现admin'#的密码被修改成了pass,而admin的密码保持不变5-3-2MySQLi参数化更新推荐使用参数化更新来防护二阶注入攻击。使用NotePad++在本项目的网站目录register下新建一个PHP文件updatepasswd_mysqli.php第19行至第23行实现了参数化更新功能。因为新密码、旧密码和用户名三个变量都是字符串,因此第22行的第一个参数是三个s。第25行判断执行结果影响的行数,如果大于0说明影响到数据库记录,说明更新成功。使用NotePad++打开updatepasswd.html,将action="updatepasswd.php"修改为action="updatepasswd_mysqli.php"。保存后打开login.html,在Username和Password分别输入admin'#和pass重新登录,然后点击修改密码超链接,在当前密码和新密码分别输入pass和abc,点击Submit按钮,会弹出“密码更改成功”的对话框。打开终端重新检索users表,发现admin'#的密码被修改成了abc,而admin的密码保持不变。以上防护测试结果说明PHP转义函数和MySQLi参数化更新都可以有效防护更新密码二阶注入攻击。为了防止利用更新密码进行二阶注入攻击,推荐对用户名进行规范化要求,并使用正则表达式检查。比如,规定用户名只能使用小写英文字母、数字和下划线。如果是明文方式保存的密码,也需要同样的处理(使用明文方式的密码安全风险较高,不建议采用)。另外为了保护密码的安全性,还需要对其复杂性做出规定,并使用正则表达式检查。【项目总结】本项目以更新密码实现SQL注入攻击为例,对二阶SQL注入进行漏洞重现、攻击测试和漏洞分析,给出了使用转义或者使用参数化更新的方式以防护二阶SQL注入攻击。防护测试效果表明采用的防护措施是有效的。更新密码引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论