欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

“百度杯”CTF比赛 十月场GetFlag

程序员文章站 2022-04-08 17:57:41
...

 

==========================

个人收获:

1.不要怕,多尝试

2.知道Linux web网站的默认路径 /var/www/html

3.里面有个小疑问为什么flag后面要加;

(因为eval中要执行的代码也必须是完整的PHP代码,PHP是以  ;  作为一个语句的结束符的)找到的答案

 

==========================

 

题目界面

“百度杯”CTF比赛 十月场GetFlag

“百度杯”CTF比赛 十月场GetFlag

然后查看了http请求,扫描了目录和看了源码没有发现什么异常的地方

 

这里要求输入账号密码和验证码

“百度杯”CTF比赛 十月场GetFlag

根据上面的提示,我们利用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")

 

“百度杯”CTF比赛 十月场GetFlag

 

我们把验证码填上,然后账号密码部分我们可以尝试常规的SQL注入试试

账号:admin' or 1=1 #

密码:随便填

“百度杯”CTF比赛 十月场GetFlag

成功登陆

“百度杯”CTF比赛 十月场GetFlag

“百度杯”CTF比赛 十月场GetFlag

三个文件下载过来我们看下内容

其中只有a.php的信息有用,其他2个文件的信息都没用

 

a.php的内容如下

“百度杯”CTF比赛 十月场GetFlag

里面说flag在 web网站的根目录下

然后我又看到了 它的下载连接是这样的

http://63378b741e3841239fb37ca9c46ee684b1815b62385d4334.game.ichunqiu.com/Challenges/file/download.php?f=a.php

我就想到文件包含 ,直接把后面a.php改成flag.php试下

“百度杯”CTF比赛 十月场GetFlag

“百度杯”CTF比赛 十月场GetFlag

然后页面出现这个

“百度杯”CTF比赛 十月场GetFlag

 

到这我就尝试一直加../进行遍历但是一直没结果,就看了下别人的wp 说是要写成这个样子

/var/www/html/Challenges/flag.php

(我记得linux系统里面安装apache网页的默认网页路径就是这样差不多的/var/www/html/然后在根据网址大概就能猜出来)

附一张ubunt 下apache的默认web路径

“百度杯”CTF比赛 十月场GetFlag

同时我们也可以通过网页的HTTP包来看到它的服务器是什么系统

“百度杯”CTF比赛 十月场GetFlag

 

然后下载源代码

“百度杯”CTF比赛 十月场GetFlag

 

 

源码如下:

<?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)

“百度杯”CTF比赛 十月场GetFlag