union的特性注入--buuctf babysqli

前言

可以利用union特性注入的ctf题其实后端代码要求与往常代码不一样,一般的注入方法并不能对后端造成攻击,要攻破SQL数据库要利用好union的特性。

union的特性

union(联合的特性),看一个例子
select * from tb_user where username='admin' union select 1, 'admin','mochu7'
union在保证字段数相同的情况下联合查询一个不存在的数据时会就会构造一个虚拟的数据到一个临时表中。
在这里插入图片描述

例题buuctf–babysql

在这里插入图片描述字符型注入,输入admin出现了 no user,说明用户名不通过;输入其他的用户名出现了 no pass说明用户名通过了,密码不对。用python跑一下过滤的关键字,发现
在这里插入图片描述
按理数一般使用admin' #即可登录成功,但是没有显示出来,出来了nopass。看来一般的注入不行,找提示发现post的数据发送给了search.php查看源码。
在这里插入图片描述base32和base64解密之后得到select * from user where username = '$name',果然与往常的语句不一样。并没有选择password来比对。可能时union特性注入。
要用union,就要先查字段发现是3个字段,之后确认name的位置:确认name的位置要修改union前半部分让它变成错误的用户名不能是admin,要改成其他的。所有关于union的注入我们都是希望通过union后半部分得到结果,所以前半部分必须是一个不存在的用户名。
payload1:a' union select 'admin',2,3 #,worry user
payload2:a' union select 1,'admin',3 #,worry pass
从结果来看第二个字段才是我们要找的admin所处字段。

所以可以构造payload,然后再post即可
name=1' union select 0,'admin','81dc9bdb52d04dc20036dbd8313ed055'%23&pw=1234

查看源码

在这里插入图片描述
在这里插入图片描述看到源码会发现首先并没有对name和password同时比较,先比较一个然后把password进行md5加密之后再与表中的password进行比较,可以说是比较隐秘了。
MD5加密数字会返回NULL值,所以这个MD5加密比较其实还可以通过传参数组来绕过构造payload:name=a' union select 1,admin,NULL #&pw[]=2

整体注入就是利用了union的特性然后构造一个虚拟身份来进行伪造真实身份,从而绕过审核机制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值