Weak Session IDs(弱会话)
用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。一个SessionID就对应一个客户端,用户拿到session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就知道你是谁了。
但是 session id 过于简单就会容易被人伪造,根本都不需要知道用户的密码就能登录服务器了。
High
源码分析:
将生成的 cookie 进行了 md5 加密
high级别使用了PHP setcookie()函数,来设置cookie:
setcookie(name,value,expire,path,domain,secure,httponly)
参数 描述
name 必需。规定cookie的名称。
value 必需。规定cookie的值。
expire 可选。规定cookie的有效期。
path 可选。规定cookie的服务器路径。
domain 可选。规定cookie的域名。
secure 可选。规定是否通过安全的HTTPS连接来传输cookie。
httponly 可选。规定是否Cookie仅可通过HTTP协议访问。
MD5加密
MD5概述:
MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。
MD5主要特点:
不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样
(一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个。比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4*10^38,这个数字是有限多个的,而但是世界上可以被用来加密的原文则会有无数的可能性)
MD5的性质:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
虽说MD5有不可逆的特点
但是由于某些MD5破解网站,专门用来查询MD5码,其通过
把常用的密码先MD5处理,并将数据存储起来,然后跟需要查询的MD5结果匹配,这时就有可能通过匹配的MD5得到明文,所以有些简单的MD5码是反查到加密前原文的。
为了让MD5码更加安全,涌现了很多其他方法,如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。
MD5用途:
1.防止被篡改:
1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
2)比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
3)SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.
2.防止直接看到明文:
现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)
3.防止抵赖(数字签名):
这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。
步骤
先抓包
这里使用了md5加密 解密得
然后伪造cookie,用md5加密即可
XSS(DOM)
xss的介绍
XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。
XSS利用的常见用途:
盗取用户cookies、劫持会话、流量劫持、网页挂马、DDOS、提升权限...
DOM型XSS:Stored Cross Site Scripting
全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
Low
源码分析
我们可以发现并没有任何过滤 可以直接尝试注入
可以直接在url处输入default=<script>alert(/xss/)</script>
可以看到,脚本被成功执行
<script>alert(/xss/)</script>语句
<script>
alert('xxx') //弹出字符串xxx
</script>
Medium
查看源码
array_key_exists() 函数
检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
提示:如果指定数组的时候省略了键名,将会生成从 0 开始并以 1 递增的整数键名
array_key_exists(key,array)
参数 | 描述 |
---|---|
key 必需 | 规定键名。 |
array | 必需。规定数组 |
stripos() 函数
查找字符串在另一字符串中第一次出现的位置(不区分大小写)
stripos(string,find,start)
参数 | 描述 |
---|---|
string 必需 | 规定被搜索的字符串。 |
find 必需 | 规定要查找的字符。 |
start 可选 | 规定开始搜索的位置。 |
返回值: | 返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。注释:字符串位置从 0 开始,不是从 1 开始。 |
header() 函数
向客户端发送原始的 HTTP 报头
header(string,replace,http_response_code)
参数 | 描述 |
---|---|
string 必需 | 规定要发送的报头字符串。 |
replace 可选 | 指示该报头是否替换之前的报头,或添加第二个报头。 |
默认是 true(替换)。false(允许相同类型的多个报头)。 | |
http_response_code可选 | 把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用) |
通过源码可以发现 medium过滤了script函数
url中有一个字符为#,该字符后的数据不会发送到服务器端,从而绕过服务端过滤
访问http://dvwa:8085/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert(document.cookie)%3C/script%3E
High
查看服务器端源代码,可以发现default=只允许是French、English、German、Spanish、这几个通过。(采用了白名单过滤)
访问http://dvwa:8085/vulnerabilities/xss_d/?%3C/option%3E%3C/select%3E%3Ciframe%20οnlοad=alert(/xss/)%3E
没有反应
访问url/?default=English#</option></select><iframe οnlοad=alert(/xss/)></option>
XSS(Reflected)
又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。
Low
输入<script>alert(/xss/)</script>测试漏洞,成功弹框
CTFshow
web21
题目:爆破什么的 都是基操
先随便输入账号密码,进行抓包
发现这里认证用来basic加密。用basic解码发现
是刚才输入的用户名和密码,我们进行爆破,发送到Intruder
添加变量
进行爆破 得到密码
登陆得到flag
web22
题目:域名也可以爆破的,试试爆破这个ctf.show的子域名
知识点:子域名爆破,子域名收集是渗透测试中,前期信息收集必不可少的一个阶段。域名是一个站点的入口,如果一个站点难以渗透,可以尝试从它的子域名或者同一台服务器上的另外一个站点作为突破口,从而进行较为隐秘的渗透测试。最原始的子域名查询,就是在 Web 页面中输入域名,检测相关网页是否存在。后来衍射了各种各样的方法,进行子域名的查询。也有诸多工具,可以进行子域名的暴力破解,爆破的原理其实是通过枚举的方式来实现的(爆破域名顾名思义就是枚举的意思)枚举域名的A记录。
方法:爆破网站 爆破ctf.show的子域名,最后结果,vip.ctf.show
web24
可以看到mt_srand()函数即可知道是伪随机数