mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理。

concat函数是mysql的字符串连接函数,定义如下:

先来验证下concat函数的功能:

select concat('m','y','s','q','l')  

验证结果:如定义所示,concat将字符串连接起来了

如果把SQL语句放在concat中,SQL语句会被执行么?

select concat((select last_name from users limit 0,1))

验证结果:concat中的sql语句可以被执行(这点对后面的sql注入非常重要

select concat(0x7e,(select user()) ,0x7e)

验证结果:16进制也能被自动转义(0x7e是 ~符号)

其次是updatexml函数,网上找的关于该函数的介绍:

函数功能验证:

select updatexml(0,concat(0x7e,(select user()) ,0x7e)  ,0)

验证结果:concat执行sql注入语句,再利用updatexml的报错信息返回sql语句执行结果。这里你可能会问,难道不能直接用updatexml执行sql语句么?我试了一下,并不能,原因可能是updatexml第二个参数必须是字符串吧,所以才需要借助返回值为字符串的concat函数。

接下来是实操:下面是一个网站的登录请求,如果用户名错误,会返回Unknown user,如果密码错误会返回Invalid password.

尝试输入单引号,返回数据库的报错,并且得知表名为admins,说明存在sql注入:

先用concat来注入,发现还是返回Unknown user,没有得到其他有用的信息:

再结合updatexml,在报错信息中返回了数据库用户root@localhost,看到这里,咱们应该更深入的理解了updatexml和concat注入的原理了吧:利用concat执行sql注入语句,再利用updatexml的报错信息将sql语句的执行结果返回

这里还有一个疑问:用concat+updatexml注入的时候,大家都会加上16进制的连接符(这里是0x7e,用其他16进制符号也可以的),为什么呢?如果不加呢?

不加的话返回内容可能会被吃掉部分,据说这是updatexml这个函数的特性。。。,如下:

接下来看下admins表中有哪些字段:

最后根据id依次查询admins表中的用户名和密码

针对这个登录页面,其实有更好的sql注入方法,那就是万能密码^_^,使用万能密码不需要知道用户名和密码也能登录,如下:

那updatexml还留着干嘛呢?万能密码登录进去后不一定是admin权限,使用updatexml能拿到更多数据库信息~

除了select,还可以利用updatexml完成insert,update和delete注入,原理和select相同。如下:

insert into guestbook(comment_id,comment,name) values (2,'0livia' or updatexml(1,concat(0x7e,(version())),0) or'','Nervo')
delete from guestbook where comment_id=2 or updatexml(2,concat(0x7e,(database())),0)

  

一点点感悟:

1. 还是之前说过的:一定要对输入进行过滤,一定要拦截和处理数据库的异常和报错!!!

2. concat和updatexml的组合方式只是一种思路,对于其他类型的数据库,只要找到与这两个函数功能类似的函数就可以了!

如需转载,请注明出处,这是对他人劳动成果的尊重~

Web安全测试学习笔记-SQL注入-利用concat和updatexml函数的更多相关文章

  1. Web安全测试学习笔记-DVWA-SQL注入-2

    接上一篇SQL注入的学习笔记,上一篇我通过报错信息得知后台数据库是MySQL(这个信息非常重要~),然后通过SQL注入拿到了用户表的所有行,其实我们还可以通过MySQL的特性来拿更多的信息. 1. 获 ...

  2. Web安全测试学习笔记-DVWA-SQL注入-1

    SQL注入的定义网上很多,作为一个初学者,我对SQL注入的理解是这样的:网站应用一般都有后台数据库(不论是关系型还是非关系型),用户在网站上的绝大部分操作,最终都会跟数据库交互(也就是执行一串SQL语 ...

  3. Web安全学习笔记 SQL注入上

    Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...

  4. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

  5. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  6. web安全测试&渗透测试之sql注入~~

    渗透测试概念: 详见百度百科 http://baike.baidu.com/link?url=T3avJhH3_MunEIk9fPzEX5hcSv2IqQlhAfokBzAG4M1CztQrSbwsR ...

  7. Web安全测试学习笔记 - DVWA+PHP环境搭建

    DVWA(Damn Vulnerable Web Application),是一个用PHP编写的,作为Web安全测试练习平台的合法环境(毕竟咱不能为了练习就随便找个网站去攻击...),也就是俗称的靶场 ...

  8. Web渗透测试入门之SQL注入(上篇)

    题记: 本来今天想把白天刷的攻防世界Web进阶的做个总结,结果估计服务器抽疯环境老报错,然后想了下今天用到了SQL注入,文件上传等等,写写心得.相信很多朋友都一直想学好渗透,然后看到各种入门视频,入门 ...

  9. Web安全测试学习笔记-DVWA-盲注(使用sqlmap)

    之前的sql注入页面(https://www.cnblogs.com/sallyzhang/p/11843291.html),返回了查询结果和错误信息.而下面的页面,返回信息只有存在和不存在两种情况, ...

随机推荐

  1. VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别

    VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机: VMnet1:这是VMware用于虚拟Host-Only网络下的虚拟交换机: VMnet8:这是VMware用于虚拟NAT网络下的虚拟交 ...

  2. PHP中抽象类和接口的区别

    抽象类 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口. 使用 abstract 关键字定义抽象类. 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至 ...

  3. Maven 项目在 Eclipse 的创建配置

    第1步 New 菜单 Other.. -> Maven -> Maven Project ,然后单击 Next .如下图所示 第2步 在New Maven Project向导中,选择Cre ...

  4. adb 获取平台号

    获取 Android 的 PLATFORM_VERSION :adb shell getprop ro.build.version.release获取 Android 的 APP_PACKAGE 和 ...

  5. Centos6、Centos7防火墙基本操作整理

    Centos7: 查看防火墙状态: firewall-cmd --state 开启防火墙: systemctl start firewalld.service 关闭防火墙(重启失效): systemc ...

  6. Mongdb可视化工具Studio 3T的使用

    一.官网地址 https://studio3t.com/ 二.下载和安装 点击DOWNLOAD即可下载 按照自己电脑系统进行选择,然后填写邮箱和选择行业,第一次登录如果不提交不会下载,下载完成是一个z ...

  7. CodeForces - 519D(思维+前缀和)

    题意 https://vjudge.net/problem/CodeForces-519D 给定每个小写字母一个数值,给定一个只包含小写字母的字符串 s,求 s 的子串 t 个数,使 t满足: 首位字 ...

  8. SpringMVC 自定义参数解析器.

    一.简述 有没有想过像 @RequestParam.@RequestBody 这些注解的工作原理呢?为什么 form 表单.application/json 的参数能够直接封装进 Bean 对象中呢? ...

  9. Spring Cloud进阶之路 | 一:服务注册与发现(nacos)

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12068846.html 1.版本 最新稳定版本为1.1.4,也可以从发版说明.博客 ...

  10. Java基础语法05-面向对象-封装-包-构造器-初始化

    封装 面向对象三大特性:封装.继承.多态 封装的好处 1.调用者:方便使用/简化使用 2.设计者:安全,可控 隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用,从而提高系统的可扩展性.可维护性 ...