目录
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
由于服务端不安全、不完整的过滤,导致不应该非法的数据被带入,比如单双引号等导致前面语句闭合,后面就可以随意写恶意语句。
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全。
?id=1 and 1=1(确保and前后条件都为真)
?id=1 '(加单双引号)
数据库函数(布尔盲注/时间盲注)sleep((3),0) 若为真则暂停3
length()函数判断
传过来的数据使用单双引号包裹起来,所以需要进行单双引号闭合。
案例sqli-labs第一关:在源码中可以看出id没有任何过滤,使用单引号闭合
传过来的数据没有使用单双引号包裹,查询时就无需在id传输的数据上单双引号
案例sqli-labs第二关:源码中可以看出传入的数据id没有使用单双引号包裹,且无任何过滤,我们使用updatexml进行报错注入输出root
true/false,传入的数据放入字符串中,不依赖时间,可以直接判断传入的数据真或假,传入数据为真时有显示,数据为假时不显示
案例sqli-labs第八关:当数据为真时有输出显示
当数据为假时没有显示
只能依靠时间判断真假,真假显示一个结果
案例sqli-labs第九关:当数据正确时暂停3秒,若数据不正确则不暂停
会将错误信息输出到屏幕上,对的不会显示数据,所以我们需要依靠mysql_error()函数报出我们需要的数据
案例sqli-labs第五关:使用各种报错注入函数进行报错注入
ST_LongFromGeoHash (mysql>=5.7.x)、使用方法与ST_LatFromGeoHash()相同(不加concat函数仅能识别系统的命令,不能使用select查询语句)
GTID (MysQL >= 5.6.X-显错<=200)
floor (8.x>mysql>5.0)、全版本支持
ST_Pointfromgeohash((select语句),1) (mysql>=5.7) 或:ST_Pointfromgeohash(系统参数,1)(两个参数都要写)
updatexml : 接受三个参数(1,concat('~',(select查询语句),'~'),1)/ updatexml函数最多容纳32位,超过32位以后数据就无法显示。
extractvalue : extractvalue函数接收两个字符串参数,一个属xml标记片段和xpath表达式xpath expr ,第一个参数就是为了上传一个xml文档,第二个参数就是用xpath路径法查找路径,而extractvalue报错注入就是通过再函数中写如不符合语法格式的xpath达到报错的目的,并且通过拼接sql注入语句从而通过报错查询并显示我们想要查询的内容;
会报错、使用union一次查询多个select语句
同时执行多条语句的注入