WEB漏洞-必懂知识点
**相对重要的:**SQL注入,文件上传,xss跨站,文件包含,反序列化,代码执行,逻辑安全,未授权访问;
CSRF,SSRF,目录遍历,文件读取,文件下载,命令执行,XXE安全
WEB漏洞-SQL注入
数据库类型:access,MySQL,mssql,Oracle,postsql,sqlite,mongdb…
sql注入产生的条件:可控变量,带入数据库查询,没有过滤或者过滤不严谨.
如何判断注入点:
第一种方法:and 1=1页面正常
and 1=2 页面错误 可能存在注入;
原理:数据库中的逻辑运算符 或 or 且 and 非 xor ,通过是否参与了逻辑运算来判断参数是否存在注入点
第二种方法:
直接将id=1改为id=1sadasda,若有处理则为存在注入,若无处理说明不存在注入。
注意哪个参数存在注入,就在哪个参数后面加SQL语句。所以注意用sqlmap注入的时候要注意注入的是哪个参数。
猜解列名数量(字段数):
order by x 错误与正常的正常值 可以猜出查询到的列数,(注意:并不是表中实际有的列名数),是指查询结果中的第x列排序
数据库版本:version()
数据库名:database()
用户:user()
操作系统:@@version_compile_os
在MySQL5.0以上版本中,存在一个自带数据库information_schema,存储有所有数据库名(schemata),列名(columns),表名(tables)。
数据库 中“.”表示下一级,information_schema.tables 记录所有表名信息的表
select table_name from information_schema.tables where table_schema=‘aaa’
mysql注入:
信息收集:操作系统(可能会区分大小写),数据库名,数据库用户(权限高低),数据库版本,其他(网站源码路径)。
数据注入:同数据库情况下,版本低采用暴力查询或结合读取查询,版本高采用information_schema有据查询
MySQL数据库结构:
数据库A->网站A
表名
列名
数据
数据库B->网站B
…
高权限注入:与数据库用户有关,若是高权限用户,可以进行跨库注入
**eg:获取所有数据库名 通过数据库的配置文件查看权限?**id=-1 union select 1,group_concat(schema_name) ,3 from information_schema.schemata
获取指定qqyw数据库下的表名信息
?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘qqyw’
获取指定qqyw数据库下的表名admin下的列名信息
?id=-1 union select 1,group_concat(column_name) ,3 from information_schema.columns where table_schema=‘qqyw’ and table_name=‘admin’
获取指定qqyw下的admin数据
?id=-1 union select 1,u,p,4 from qqyw.admin (黄字部分有几项与order by 得到的结果有关)
文件读写操作:
load_file():读取函数
into outfile或into dumpfile:导出(入)函数 select 1,‘x’,3 into outfile’d:\ss\sss\x.php’ 若没有文件,则会创立,采用\是防止\与n会被转义
一些文件的路径是默认的,可以在网上搜索load_file常见敏感文件路径
非默认路径获取常见方法:
报错显示,遗留文件phpinfo.php,漏洞报错,平台配置文件,爆破等
常见文件写入问题:魔术引号开关
在php.ini里有magic_quotes_gpc可以过滤,或者通过内置函数is int,addslashes等过滤 也可以通过关键字替换str.replace(),WAF过滤
开启之后会对四种字符进行过滤 输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线。这些转义是必须的。
可以用编码或宽字节绕过