SQL注入_insert&delete&update&selete

这篇具有很好参考价值的文章主要介绍了SQL注入_insert&delete&update&selete。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. SQL注入介绍

1.1 sql注入概念

1.1.1 sql注入的实质:数据库将用户输入的数据当作代码执行

1.1.2 sql注入产生的条件

  • 用户能控制输入
  • 原本程序要执行的代码,拼接了用户输入的数据然后进行执行

1.2 sql注入注入点判断

1.2.1 判断是否存在可控变量

  • 抓包判断

SQL注入_insert&delete&update&selete

如图所示,id=1与submit=%E6%9F%A5%E8%AF%A2都是外部传递变量

1.2.2 判断是否存在与数据库交互

  • 功能判断

如搜索栏、登录框、页面展示等与数据库相关的功能存在与数据库交互

1.2.3 判断过滤是否严谨

  • 传递值后添加’,“或其他杂乱无章的字符查看是否存在变化

1.2.4 判断闭合与功能实现

  • 搜索型:1%" and “%1%”=“1 结论true、1%” and “%1%”="2 结论fales等
  • 展示型:1 and 1=1-- - 结论true、1 and 1=2-- - 结论:fales等

二. insert注入

2.1 insert注入场景

2.1.1 insert函数功能简介:insert在sql语句中代表是往表中添加数据的操作

2.1.2 insert函数注入场景:注册功能、留言功能、添加用户功能等

2.2 insert注入

2.1.1 insert注入介绍:insert由于其功能决定并不会对结论进行直接输出,同时其sql语句预编译是insert型,所以无法使用查询注入的方式进行注入。主要注入方式是盲注、以及报错注入(存在数据库报错信息)

2.1.2 insert布尔盲注使用函数

length(str1) #返回str1字符串长度
left(str1,num) #对字符串str1从左开始数起,返回num个字符
substr(str1,2,1) #对字符串str1从左边第2位开始,截取1位 mid(str1,2,1) #与substr用法相同
ascii(str1) #返回字符串ascii值 ord(str1) #与ascii用法相同
like 模糊匹配(可用正则表达式) regexp #与like类似

2.1.3 insert布尔盲注实列

(1)查看功能
SQL注入_insert&delete&update&selete

(2)输入传递值并抓包查看
SQL注入_insert&delete&update&selete**
由数据包可以看到向服务器传递的变量与变量值
根据注册功能可以得出其sql语句是insert

(3)制作payload

正常注册sql语句:insert into  tablename(username,password,sex,phonenum,email,add)  values ('test',123456,'%E7%94%B7','13371689786','%E5%B9%BF%E4%B8%9C%E6%B7%B1%E5%9C%B3')
注入注册sql语句:insert into  tablename(username,password,sex,phonenum,email,add)  values ('test',123456,'%E7%94%B7','13371689786*',(select 1 where 1=1))-- -)*','%E5%B9%BF%E4%B8%9C%E6%B7%B1%E5%9C%B3')

解析:上述语句对比不同的地方为payload,根据数据库语句规则,若注册sql语句后续payload为’,(select 1 where 1=1))-- -时,则程序正常运行。若注册sql语句后续payload为’,(select 1 where 1=2))-- -时,程序不正常运行。根据true与fales来进行布尔盲注

(4)测试payloa
SQL注入_insert&delete&update&selete
SQL注入_insert&delete&update&selete

  • 如上图所示,‘,(select 1 where 1=1))-- -与’,(select 1 where 1=2))-- -存在差异,则代表制作的payload有效。当第七位值为true时,注册成功,当第七位值为fales时,注册失败。
  • 可以根据第七位值true或fales进行布尔盲注(后续会讲)
示例payload:email=1',(if(length(database())=x,(select 1 where 1=1),(select 1 where 1=2)))-- -可以遍历数据库长度

缺点:由于测试其差异性需要创建用户,所以sql注入后存在许多测试用户

特性:insert注册功能&selete账户信息功能组成容易造成二阶注入

三. delete注入

3.1 delete注入场景

3.1.1 delete函数功能简介:delete函数主要作用是删除数据库已存在数据

3.1.2 delete注入场景:删除用户,删除留言

3.2 delete注入

3.2.1 delete注入介绍:delete由于其功能决定并不会对结论进行直接输出,同时其sql语句预编译是delete型,所以无法使用查询注入的方式进行注入。主要注入方式是盲注、以及报错注入(存在数据库报错信息)

3.2.2 delete注入常用函数

length(str1) #返回str1字符串长度
left(str1,num) #对字符串str1从左开始数起,返回num个字符
substr(str1,2,1) #对字符串str1从左边第2位开始,截取1位 mid(str1,2,1) #与substr用法相同
ascii(str1) #返回字符串ascii值 ord(str1) #与ascii用法相同
like 模糊匹配(可用正则表达式) regexp #与like类似

3.2.3 delete布尔盲注实列

(1)查看功能
SQL注入_insert&delete&update&selete

(2)输入传递值并抓包查看
SQL注入_insert&delete&update&selete

(3)构造payload

正常删除sql语句:delete from tablename where id=334

注入删除sql语句:delete from tablename where id=334 and 1=1-- -

解析:根据sql语句当输入payload为 and 1=1-- -时可以正常执行,当注入payload为 and 1=2-- -时不可以正常实现,可根据其true和false来进行布尔盲注(盲注会造成大量的删除功能实现,真实环境容易进局子,切记)

(4)测试payload
SQL注入_insert&delete&update&selete
SQL注入_insert&delete&update&selete

  • 如上图所示, and 1=1-- -与 and 1=2-- -存在差异,则代表制作的payload有效。当 and 1=1-- -时,删除成功,当 and 1=2-- -时,注册失败。
  • 可以根据删除效果判断true和false,可以据此进行布尔盲注(后续会讲)

四. update注入

3.1 update注入场景

3.1.1 update函数功能简介:update函数主要作用是修改数据库已存在数据

3.1.2 update注入场景:修改密码,修改用户信息

3.2 update注入

3.2.1 update注入介绍:update由于其功能决定并不会对结论进行直接输出,同时其sql语句预编译是update型,所以无法使用查询注入的方式进行注入。主要注入方式是盲注、以及报错注入(存在数据库报错信息)

3.2.2 update注入常用函数

length(str1) #返回str1字符串长度
left(str1,num) #对字符串str1从左开始数起,返回num个字符
substr(str1,2,1) #对字符串str1从左边第2位开始,截取1位 mid(str1,2,1) #与substr用法相同
ascii(str1) #返回字符串ascii值 ord(str1) #与ascii用法相同
like 模糊匹配(可用正则表达式) regexp #与like类似

3.2.3 update布尔盲注实列

(1)查看功能
SQL注入_insert&delete&update&selete

(2)输入传递值并抓包查看
SQL注入_insert&delete&update&selete

(3)制作payload

正常修改sql语句:update tablename set sex='test2',phonenum='test3',email='test1' where username='test1'
注入修改sql语句:update tablename set sex='test2',phonenum='test3',email='test1' where username='test1' and 1=1-- -' where username='test1'

解析:根据sql语句当输入payload为’ where username=‘test1’ and 1=1-- -时可以正常执行,当注入payload为’ where username=‘test1’ and 1=2-- -时不可以正常实现,可根据其true和false来进行布尔盲注(此payload需要爆破字段username(可以是id或其他,也可以不填更改所有))

(4)测试payload

SQL注入_insert&delete&update&selete
SQL注入_insert&delete&update&selete

如上图所示,当payload为’ where username=‘test1 ’ and 1=1-- -时,可以将性别修改为test10,当payload为’ where username='test1 ’ and 1=2-- -时,不能将性别修改为test20
可以根据其注册成功和注册失败2种形态进行布尔盲注(后续会讲)

五. selete注入

5.1 selete注入场景

5.1.1 selete函数功能简介:selete函数主要是查询数据库数据,并展示出来

5.1.2 selete注入场景:登录功能,搜索栏,用户信息展示,页面展示,图片展示等

5.2 selete注入

5.2.1 union函数介绍

  • 功能:一条sql语句通过union函数连接可以执行多个查询语句,并使其结果在统一显示表展示
  • 限制:多个sql查询语句的查询字段数需相同(如下例:users表查询主要是查询3个字段(id,username,password),member表查询也需要查询3个字段(id,username,pw))
  • 示例:select id,username,password from users union select id,username,pw
    from member
    SQL注入_insert&delete&update&selete

5.2.2 selete注入介绍:selete因为其具有查询功能,并其能显示查询结果。所以部分selete注入可以通过查询结果进行sql注入。主要注入方式有联合查询注入(存在数据库输出),盲注,报错注入(存在报错信息)

5.2.3 selete注入常用函数

selete #联合查询g'n功能
order by #指定列升序排列
concat() #横向合并
group_concat #纵向合并
limit 0,1 #截取字符串
/**/ #注释中间语句,可替代空格
-- - #注释后续语句
#    #注释后续语句

5.2.4 selete注入实列

(1)查看功能
SQL注入_insert&delete&update&selete

此功能是根据用户userid展示出用户用户名与邮箱
其功能sql语句:select username,mail from users where userid=$id;

(2)查看请求包外部传参
SQL注入_insert&delete&update&selete

上图id与submit都是外部post传参,可能存在注入点

(3)构造测试payload

正常查询sql语句:select username,mail from users where userid=1 limit 0,1
注入查询sql语句:select username,mail from users where userid=1 and 1=1 limit 0,1

(4)测试payload
SQL注入_insert&delete&update&selete
SQL注入_insert&delete&update&selete

解析:上述传入id值为1 and 1=1时,执行正确,传入1 and 1=2时,执行错误。表示外部传递值对其sql语句进行了影响,并可控。可以根据布尔进行sql注入。由于select具有展示功能,所以也可以进行联合查询注入

(5)联合查询注入获取数据库信息

  • 猜解字段数(由于union函数语法需联合的多个查询语句查询字段数相同,所以需要查询预编译sql语句的字段数)

使用order by 1进行查询,order by 后续值代表第多少列进行升序排列。当数字到达不存在的列时由于无法按规定列升序排列,所以会报错。字段数为最后正常执行order by的后续数字(推荐使用二分法)
SQL注入_insert&delete&update&selete

第二行进行升序排列正常执行
SQL注入_insert&delete&update&selete

第三行进行升序排列不能正常运行

即原始select语句字段数为2,union查询sql语句也需要为2

  • 查询数据库相关信息

查询显示位(数据库查询出来的数据需要后端语言(php,java)控制显示出来,并不一定全部数据都可以进行显示。同时需要将原有查询语句参数设置为null值,使其查询不到原有查询语句。否则容易遮挡union后续查询语句)
SQL注入_insert&delete&update&selete

如上可以看到1,2为显示位

查询数据库名 select database(),2-- -
SQL注入_insert&delete&update&selete

可以得数据库名为pikachu

查询用户名:user()

查询数据库版本:version()

  • 查询表

union select table_name,2 from information_schema.tables where table_schema=“pikachu”

解析:就普通的查询information_schema.tables表信息的sql语句。information_schema数据库介绍上篇博客有;本靶场将所有的查询信息都展示。部分真实场景仅仅展示1个。可以使用limit或group_concat()将所有的信息都输出出来
SQL注入_insert&delete&update&selete

查询表字段

union select column_name,2 from information_schema.columns where table_name=“users”

解析:查询users表的字段
SQL注入_insert&delete&update&selete

查询值

union select username,password where users
SQL注入_insert&delete&update&selete文章来源地址https://www.toymoban.com/news/detail-414824.html

到了这里,关于SQL注入_insert&delete&update&selete的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自己动手做数据库系统:解释执行 update 和 delete 对应的 sql 语句

    在上一节我们完成了 select 语句的解释执行,本节我们看看 Update 和 Delete 对应的语句如何解释执行,当然他们的实现原理跟我们前面实现的 select 语句执行大同小异。无论是 update还是 delete 都是对数据表的修改,因此他们的实现方法基本相同。 假设我们要执行如下 sql 语句:

    2024年01月22日
    浏览(39)
  • 金山终端安全系统V9.0 update_software_info_v2.php处SQL注入漏洞复现 [附POC]

    免责声明:请勿利用文章内的相关

    2024年02月03日
    浏览(48)
  • 【postgresql 基础入门】UPSERT语句,INSERT违反约束条件时可以转变为UPDATE语句,UPDATE与INSERT的合体

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户端使用 pgAdmin图形化客户端

    2024年03月12日
    浏览(40)
  • 网络安全-初学SQL注入&基本概念

    SQL语句:解释SQL(Structured Query Language)是一种用于与关系型数据库进行交互的语言。SQL语句用于执行各种数据库操作,例如插入、更新、删除和查询数据。 用户输入与SQL查询的拼接:说明应用程序通常会接受用户的输入,并将其用作构建SQL查询语句的一部分。这种拼接用户

    2024年02月13日
    浏览(29)
  • FieldFill.INSERT与FieldFill.UPDATE使用

    首先在bean对象的class里面对应字段上面加上 或者 如果需要同时指定新增和修改 则添加 然后添加下配置类

    2024年02月16日
    浏览(29)
  • MySQL基础学习: 由delete和insert操作导致的死锁问题

    一、问题复现:表结构 二、死锁测试 (1)开启两个事务 (2)两个事务分别删除两个个不存在的记录 (3)两个事务分别插入该记录 开启事务1 开始事务2 现象描述: (1)两个事务分别执行delete操作 (2)事务1执行insert操作,阻塞 (3)事务2执行insert操作,产生死锁报错 (

    2024年02月03日
    浏览(25)
  • SpringBoot中使用@Insert、@Update实现批量新增、更新

    数据库原始表数据 数据层接口 注意 : @Param(“list”) 引号中和foreach 中 collection 属性值必须写list,否则报错。item属性值写实体类的类名,首字母必须小写 接口测试: 由于在Apifox中是没有对应List的数据类型因此需要我们自己手写body形式 – json例如: 除了使用接口测试工具验证

    2024年02月09日
    浏览(37)
  • 【SQL注入攻击介绍】

    目录 前言 本质和危害  分类 注入一般步骤 注入实战   sql注入一直以来都稳居owasp-top10榜首,近年来更是爆出很多的数据库泄露攻击事件,如最近上海某公安存在数据库泄露事件。今天简单的分析以下sql注入的一些特性和方式:   owasp-top10   一、sql注入的危害包括但不局限

    2024年02月06日
    浏览(35)
  • 【SpringBoot】Mybatis执行insert/update后如何获得主键id

    在业务开发的时候,由于MyBatis框架的insert语句默认是不返回记录的主键值,而是返回插入的记录条数的,但是如果业务层需要得到插入数据的主键时候,可以通过配置的方式来实现获取插入数据的ID功能。 方法1、开启useGeneratedKeys属性方法 方法2、使用selectKey和 order=\\\"AFTER\\\"方式

    2024年02月11日
    浏览(32)
  • 8.postgresql--Update join 和 Delete using

    Update join用于基于另一张表更新表数据,语法如下: using 后面指定表,可以是多个 然后where子句中可以使用using 后面指定表的字段

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包