一、文件上传漏洞
1、意义:用户上传的可执行脚本文件(木马、病毒、恶意脚本、webshell等),并通过此脚本获得执行服务器的能力;
2、原因:前端和服务器端过滤不严格,黑白名单设置不完善导致,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型;
3、原理:文件上传检查不严、网站服务器黑名单检查忽略大小写、网站在服务器设置白名单忘记%00截断、文件上传后修改文件名处理不当;
4、危害:网站被控制、服务器沦陷、用服务器的其它网站沦陷、上传者留下后门webshell后门监听;
5、绕过JS验证:禁用chrome浏览器,地址栏输入:chrome://settings/content/javascript,禁用火狐浏览器:地址栏输入:aboutconfig,然后再搜索javascrpitenabled,双击关闭JS功能;
6、mime-type绕过防御:目录设置为不可执行,判断文件类型、用随机数改写;
7、黑名单绕过方式:忽略的扩展名、大小写转换、Windows特性(文件名中自动去掉小数点和空格)、双写后缀;
8、白名单绕过方式:观察是前端判断,还是服务器判断,如为前端,则抓包改包即可,后端时需利用一些其它方式,如将小马写入图片格式中,或其它操作;
9、绕过服务端目录路径:使用%00截断后缀名;
10、文件头:一段位于文件开头承担一定任务的数据,为描述文件的一些属性;
二、远程命令执行
1、原因:服务器没有针对执行函数做过滤,就执行了用户提交的命令;
2、命令执行:一般指操作系统命令,远程代码执行:一般指脚本代码;
3、危害:任意执行系统命令、恶意木马被种植、挂马、钓鱼、敏感信息泄露;
4、系统命令执行函数:system(),passthru(),exec(),shell_exec(),popen(),proc_open()等;
5、代码执行函数:eval(),assert(),preg_replace(),create_function(),array_map()等;
6、防御:过滤特殊字符或替换字符、严格验证输入的类型长度、使用escapeshellar函数处理相关参数、尽量使用自定义函数或函数库实现外部应用或命令的功能。
三、中间件解析漏洞
1、Apache漏洞:2.4之前的版本,在拥有多个后缀名时,以最接近文件名的后缀名为真,如1.php.jpg.txt,结果为1.php;
2、IIS文件名/文件夹解析漏洞,5.x/6.0版本,即有字符分隔时,就会隔断去查内存,有则截断;
3、Nginx空字节代码执行漏洞,0.8.411.4.3/1.5.01.5.7版本,当有%00空字节截断时,依旧会加载空字节后的文件类型。
四、自动化注入(sqlmap)
1、sqlmap支持注入模式:基于布尔的盲注、基于时间的盲注、基于报错的注入、联合查询注入、堆查询注入;
2、sqlmap支持注入数据库类型:MYSQL、Oracle、SQL server、DB2等;
3、直接连接数据库,参数:-d,使用参数“-d”直接连接数据库,该参数后跟一个表示数据库的字符串,如:sqlmap -d “mysql://db_user:db_pw@db_IP:db_port/db_name”。
4、指定目标URL,参数:-u或-url,如:python2 sqlmap.py -u “http://db_IP:db_port/user.php?id=0”
5、sqlmap请求方式:get、post、put等,少见的指定方式使用-method=POST来指定;
6、sqlmap支持的操作系统:linux、windows;
7、MySQL数据库注入步骤:探查是否存在漏洞:sqlmap -u “url”、sqlmap -r “file_load”;
8、数据库数据获取步骤:1、-current -db,获取当前数据库名;2、-D“数据库名” -tables,获取表名;3、-D “数据库名” -T “表名” -columns,获取列名;4、—D“数据库名” —T“表名” —C“列名” -dump,获取字段名;
9、MySQL数据库post注入步骤:1、文件中加载HTTP请求:-r 文件名;2、获取数据库名,–current -db;3、获取该数据库中的表名,-D “数据库名” -tables;4、获取该库中的列名:-D “列名” -T “表名” -columns;5、获取该库中的某个列名的字段内容:-D“列名” -T“表名” -C“列名” -dump;
10、防范post注入最有效的方法是:使用过滤函数;
11、指定数据库,绕过SQLMAP自动检测,sqlmap -u “url” -v2 --dbms “Postgresql”;指定操作系统绕过sqlmap自动检测:sqlmap -u “url” -v 2 --os “windows”;
12、WAF绕过方式一:sqlmap -u {目标url} --threads=10 --identify -waf#、sqlmap -u{目标url} --threads=10 --check -waf#;
13、WAF绕过方式二:使用burpsuite,利用tamper脚本绕过过滤,python sqlmap.py -u {目标url} --dbs --batch --flush -session --tamper=脚本名;
14、文件包含条件:1、使用包含函数引入文件;2、用户能控制该动态变量;3、保证配置文件php.ini中的allow_url_fopen和allow_url_include要为On;
15、文件包含:本地包含、远程包含;
16、PHP封装协议;
17、CDN判断方法:1、nslookup域名解析;2、多地ping查询;3、使用工具直接查询;绕过方法:子域名入手、利用网站漏洞、历史DNS记录、CDN本身入手、MX记录或邮件;
复习
1、子域名搜索:使用搜索语法,在线网站查询、脚本工具、nmap端口扫描等工具;
2、服务器类型、数据库类型、目录结构、扫后台(御剑);
3、sql注入(注入点-注入类型);
4、xxs漏洞:反射、存储、DOM型;
5、xxe(概念、危害、相关协议);
6、文件上传;
7、文件包含(四种:include、require、include_once、require_once);分两类:本地文件包含、远程文件包含;
8、远程命令/代码执行(相关函数);
9、awvs(使用、能够扫描的漏洞);