Portswigger记录
PortSwigger
SQL injection
1.SQL injection vulnerability allowing login bypass
允许绕过登录的 SQL 注入漏洞
根据描述找到注入点,和目标——以administrator登录
接下来涉及功能点的测试
发送Username为administrator',administrator"
等的请求,会发现administrator'
的请求返回了500
猜测可能得检验语句为:
SELECT * FROM users WHERE username = 'aaa' AND password = 'bbb'
尝试通过注释将密码的筛选过滤掉,这样就能在不知道密码的情况下通过检验
SELECT * FROM users WHERE username = 'administrator'-- AND password = 'bbb'
结果发现需要令牌
1 | Invalid CSRF token (session does not contain a CSRF token) |
这边主要是cookie中session不一致的问题? 总之直接在给的网页环境输入administrator’—和随便一个密码即可
2.SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
WHERE 子句中允许检索隐藏数据的 SQL 注入漏洞
本实验在产品类别筛选器中包含一个 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询:
1 SELECT * FROM products WHERE category = 'Gifts' AND released = 1若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示一个或多个未发布的产品。
进入实验环境观察各个类别,能看到点击分类会输入分类名
而根据描述,分类名后还有个released,也就是筛选已经发布的产品
想要通过sql注入显示未发布产品,就是在分类名处进行操作
即category = ''or 1 = 1 --'
如此一来执行的语句为
1 | SELECT * FROM products |
这样就注入成功了,能看到有20个,比原本12个多
3.SQL injection attack, querying the database type and version on Oracle
本实验在产品类别筛选器中包含一个 SQL 注入漏洞。您可以使用 UNION 攻击从注入的查询中检索结果。
若要求解实验室,请显示数据库版本字符串。
注入点和sql2类似,也是在category的位置进行操作
Cross-site scripting
1.Reflected XSS into HTML context with nothing encoded
本实验在搜索功能中包含一个简单的反射式跨站点脚本漏洞。
若要解决实验室问题,请执行调用该函数
alert
的跨站点脚本攻击。
反射XSS
进去给了个搜索框,在搜索框里写入
<script>alert(1)</script>
然后点击搜索,会发现
攻击成功
2.Stored XSS into HTML context with nothing encoded
存储型XSS
通过留言框注入
再次访问这个留有注入内容的博客,就会执行命令了
3.DOM XSS in document.write
sink using source location.search
文档中的 DOM XSS.使用 source location.search 编写接收器
DOM型XSS
进入靶机环境,F12,在输入框输入内容
可以发现每次搜索框的内容在搜索后都进入了img元素
来构造一个payload 123"><script>alert(3)</script>"
(和sql注入的技巧类似),通过">
闭合img元素,然后再拼接输入恶意代码,点击搜索,就会弹出警告框了。
4.DOM XSS in innerHTML
sink using source location.search
用 source location.search in innerHTML sink 中的 DOM XSS。
同样的路子,发现输入的东西被放到了span里
那么根据 HTML 规范,内联元素(如 <span>
)不能包含块级元素或特殊标签(如 <script>
)
那就得换个别的
比如说
1 | // 语法:onload,当页面载入完毕后执行 Javascript 代码,该事件不可取消 |
Cross-site request forgery
1.CSRF vulnerability with no defenses
此实验室的电子邮件更改功能容易受到 CSRF 的攻击。
为了解决实验室问题,请制作一些使用 CSRF 攻击的 HTML 来更改查看者的电子邮件地址并将其上传到您的漏洞利用服务器。
您可以使用以下凭据登录自己的帐户:
wiener:peter
用给的账号密码登录,然后就会跳转到更改邮箱界面,根据描述,此处就是攻击点。
随便输个新的试试
没啥问题
用bp去抓包拦截
用bp自带的功能去生成进行csrf攻击的脚本(这里得用pro版本)
这里生成了一个可以进行csrf攻击的html
Go to exploit server(漏洞利用服务器)
将攻击的内容放入请求的body中,查看漏洞/传递给受害者,回到原本的页面就会发现邮箱被更改了,一次比较简陋的csrf攻击就完成了。
2.CSRF where token validation depends on request method
令牌验证取决于请求方法的 CSRF(意思是令牌验证只在部分请求方法上有效果)
此实验室的电子邮件更改功能容易受到 CSRF 的攻击。它试图阻止 CSRF 攻击,但仅对某些类型的请求应用防御。
若要解决该实验,请使用漏洞利用服务器托管一个 HTML 页面,该页面使用 CSRF 攻击来更改查看者的电子邮件地址。
和第一题的场景类似,但是这次加上了token,
同样的步骤去抓包,可以看到post的参数里多了个csrf,这就是token
根据题目描述,很显然POST请求添加了token验证,直接用POST请求生成攻击脚本时不行的,但是GET请求没有被限制
所以,将请求转换成GET然后生成脚本即可
当然,这里的csrf(token)其实是不需要的,因为GET压根不验证这玩意儿,所以有没有都无所谓
3.CSRF where token validation depends on token being present
CSRF,其中令牌验证取决于令牌的存在
延续上一题的思路,根据题目的意思,其意思就是没token就不验证了。
尝试一下,抓包然后删除csrf(token)去生成攻击脚本
通过。
4.CSRF where token is not tied to user session
令牌与用户会话无关的 CSRF
此实验室的电子邮件更改功能容易受到 CSRF 的攻击。它使用令牌来尝试防止 CSRF 攻击,但它们没有集成到站点的会话处理系统中。
需要做的是从其中一个用户(wiener)的位置修改另一个用户(carlos)的邮箱
接下来就是一段猜测+测试的过程
很显然前面的2个方法是不行的(改变请求方法,删除token),而根据实验的名字,攻击的重点在于令牌与用户会话无关,翻译过来就是只要是个token就行,谁的token没啥所谓。
从这一点出发,我们直接在攻击者这边生成个脚本,然后去获取被攻击者的token,将token值放进脚本即可完成攻击(这边注意不要用bp拦截,因为拦token会刷新,而关闭拦截进行攻击时拿来的token就已经刷新了,直接f12找)。
Clickjacking
Basic clickjacking with CSRF token protection
具有 CSRF 令牌保护的基本点击劫持
本实验包含登录功能和受 CSRF 令牌保护的删除帐户按钮。用户将点击在诱饵网站上显示“点击”一词的元素。
要解决实验问题,请制作一些 HTML 来构建帐户页面并欺骗用户删除其帐户。删除帐户后,实验室将得到解决。
删除账户需要令牌,本实验需要利用Clickjacking让用户删除自己用户(在未知的情况下)
攻击脚本
1 | <style> |
效果
将透明度从0.1调成0,就会导致整个界面只有一个Click,如果用户出于各种原因点击Click,就会删除自己的账户。
2.Clickjacking with form input data prefilled from a URL parameter2
使用从 URL 参数预填充的表单输入数据进行点击劫持
该实验的目标是通过使用 URL 参数预填充表单并诱使用户无意中单击“更新电子邮件”按钮来更改用户的电子邮件地址。
为了解决这个实验,制作一些 HTML 来构建帐户页面,并通过单击“单击我”诱饵来欺骗用户更新他们的电子邮件地址。更改电子邮件地址后,实验室将得到解决。
本实验需要修改邮箱,而修改邮箱显然需要一个新的邮箱地址
URL 参数预填充技术,指的是在GET请求的参数中携带部分数据,在进行此请求后就会将这些数据放入表单中,类似场景比如用户反馈表单会根据账户信息预填充表单,节省用户时间等等。
因此,将上一题的脚本进行修改,加入email参数,用于更改电子邮箱
1 | <style> |
效果如下:
可以看到email处自动填充了参数里的内容
Cross-origin resource sharing
1.CORS vulnerability with basic origin reflection
该网站具有不安全的 CORS 配置,因为它信任所有源。
要解决该实验问题,请制作一些使用 CORS 检索管理员的 API 密钥并将代码上传到漏洞利用服务器的 JavaScript。当您成功提交管理员的 API 密钥时,实验室就解决了。
信任源为*导致的漏洞
需要获得管理员的key,登录账号可以发现自己账号的apikey
bp里翻看一下HTTP历史
能看到apikey的获得是通过/accountDetails
那么想要获得管理员的apikey
1 | <script> |
access log
在里面找到
反编译获得apikey
req.withCredentials = true;
表示请求应该发送凭证(如 Cookies、授权头等),即使是跨域请求
再通过回调函数reqListener
在日志中得到
问题有点多,有点不太明白为什么会是拿到管理员的,获得apikey的操作为什么是有管理员的参与
2.CORS vulnerability with trusted null origin
信任源为null导致的漏洞
利用iframe
(感觉有点瓶颈了