很久之前就想总结一篇SQL注入及其更深一层的渗透方面的笔记了,奈何一是下不了决心,二是(好吧,还是下不了决心)
今天无意之间翻找出自己之前学习做的笔记,决定重新整理、学习、分享,若其中有什么错误,还希望您们能够及时提出来。(本文主要以MySQL,后期还要学习MSSQL、Oracle)
一问?何为SQL注入所谓SQL注入,就是用户在Web表单等能与数据库交互的地方构造特殊的SQL命令,欺骗服务器执行,泄露数据库的信息,甚至getshell。
二问?种类如何划分 (1)以注入点分类
数字型注入
字符型注入
搜索型注入
宽字节注入
Base64变形注入
GET注入
POST注入
Cookie注入
XFF注入
User_Agent注入
联合注入
报错注入
时间盲注
布尔盲注
堆注入
由于篇幅问题(主要是懒╰(‵□′)╯)在这里,就不详细介绍每一种注入的详情了,可直接针对某一种百度,会出现很多优秀的讲解和实战文章的。
三问?涵盖哪些常用函数 (1)字符串截取函数
mid(string,start[,length])
left(string,length)
substr(string,start,length)
substring(string,start,length)
ascii()
ord()
hex()
unhex()
concat(str1,str2,str3,…):将多个字符串连接成一个字符串(中间任何一个参数为null,返回值就会为null)
concat_ws(separater,str1,str2,..):和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符
group_concat():将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
floor()
extractvalue()
updatexml()
exp()
polygon()
multipoint()
GeometryCollection()
multilinestring()
multipolygon()
linestring()
报错注入函数常用的有前面5种。
if(a,b,c):条件a为真,则b被执行,否则c被执行
sleep():休眠时间
benchmark():benchmark(count,expr)函数的执行结果就是将expr表达式执行count次数。
注:对于盲注,还需结合前面介绍的函数(尤其是字符串截取函数)。此外,盲注的手工量比较大,可以结合burpsuite使用。
四问?怎么花式绕墙 (1)手工绕过
(1.1) 绕过空格
注释符/**/、括号、加号、%20、%09、%0a、%0b、%0c、%0d、%a0、%00
(1.2)绕过引号
使用十六进制
(1.3)绕过逗号
(使用from、offest、join)
例如,对于limit绕过可以使用offset来绕过:
select * from users limit 0,1
等价于下面这条SQL语句
select * from users limit 1 offset 0
又比如:
select substr(database() from 1 for 1)
(1.4)绕过=
使用like、rlike、regexp或者使用>、<
(1.5)绕过“>”、”<”
使用greatest()、least()、between()
(贴一下在别人那儿学到的一个技巧,如下图)
(1.6)绕过union、select、where
(2)sqlmap工具
sqlmap参数tamper自带了一些常见的绕过脚本: