数据库不同,字符串连接符也不同,如SQL Server连接符号为“+”,Oracle 连接符为“||”,MySQL连接符为空格。
常见的注入叫法:
POST注入:注入字段在POST数据中;
Cookie注入:注入字段在Cookie数据中:
延时注入:使用数据库延时特性注入;
搜索注入:注入处为搜索的地点;
base64注入:注入字符串需要经过base64加密;
数据库
sqlserver
mysql
支持以下3种注释风格:
#:注释从“#”字符到行尾;
--:注释从“--"序列到行尾。需要注意的是,使用此注释时,后面需要跟上-一个或多个空格;空格、tag都可以:
/**/: 注释从/*序列到后面的*/序列中间的字符。
/*!*/ 感叹号有特殊意义,比如/*5555,username*/的意思是若MySQL版本号高于或者等于5.555语句将会被执行,如果“!”后面不加入版本号,MySQL将会直接执行SQL语句。
函数
load_file()读文件
hex()将字符串转换为十六进制unhex反向
into outfile写文件
md5 返回md5的值
@@datadir读取数据库路径
@@basedirMySQL安装路径
@@version_compile_os操作系统
显错
1.UpdateXml() 。
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
2.extractvalue() :对XML文档进行查询的函数
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位
3.floor
宽字节
长字符截断 在MySQL中的一个设置里有一个sql mode 选项,当sql_ mode 设置为default时,即没有开启STRICT ALL _TABLES选项时(MySQL sql_ mode默认即default), MySQL对插入超长的值只会提示warning,而不是error,这样就可能会导致一些截断问题。
延时注入
oracle
注入工具
sqlmap
防止sql注入
防御数字型注入相对来说是比较简单的,只需要在程序中严格判断数据类型即可。如:使用is numeric()、ctype digit0等函数判断数据类型,即可解决数字型注入。
特殊字符转义
网友评论