2021年第四季度11月CTF 30题WP

Track-JARVIS   ·   发表于 2021-12-08 23:37:32   ·   CTF&WP专版

套娃

  1. 进入发现是一张图片,上面写着图片?,猜测可能藏了东西

  2. 右键另存为图片,拖进kali虚拟机,使用binwalk检测一下

  3. 果然还藏了个7-zip,重命名图片,后缀改为.7z,打开获得flag

睿智题目

  1. 进入发现一直循环弹两个窗,题如其名,确实睿智

  2. 打开burp,重新访问页面抓包,没什么发现

  3. 查看响应包,发现一段HTML编码过的数据,复制解码获得flag

给你一雪球

  1. 进入发现是一个小萝莉给你丢个了雪球,雪球上是一个二维码,黑白颜色不明显,并且仔细观察会发现右半部分的二维码被进行过反色处理

  2. 右键另存为,使用Photoshop打开,图像->调整->色阶,调整到90-120

  3. 框选二维码右半部分,图像->调整->反相,得到原二维码,扫描获得flag

PHP

  1. 进入发现是一段代码

  2. 审计后不难发现,第一层,a[]=1&b[]=2,第二层,key={“key”:0}

  3. payload: ?a[]=1&b[]=2&key={"key":0}

给我我最喜欢的数字

  1. 进来发现一张图和一个框,测试发现没啥用,F12发现有一个txt文件

  2. 访问发现是index.php的源码

  3. 此时针对于该php代码进行分析,这里需要绕过两个if语句,第一个是检测POST传入的参数必须是存在,第二传入的POST必须为包括数字(1-9)组成的数字,同时要输出flag。strpos检测num中的#testaasafd必须返回true。那么逐步尝试发送可以使用%00进行截断,可以使用burp抓包修改也可以使用hackbar进行传值

  4. Payload:num=1%00#testaasafd

Morse

  1. 打开题目发现提示,flag就在这,flag格式zKaQ{xxxx},F12发现一段摩斯密码

  2. 复制解码,在线解码:https://www.bejson.com/enc/morse/

  3. 解出一段疑似MD5加密的值,先提交看看,题目也提示了格式,zKaQ{xxxx},提交发现flag正确

代码审计

  1. 进来发现两段相同的md5值,测试没发现什么有用的信息,试试目录扫描

  2. 发现flag.php,访问没东西,下载index.php.bak,打开是index.php源码

  3. strstr($_SERVER['REQUEST_URI'], '?');//截取?后面的值,所以这里我们可以用kekeyy绕过第一个过滤;然后在用数组绕过第二个过滤,因为md5()函数无法处理数组

  4. Payload:?kekeyy1[]=a&kekeyy2[]=b

login

  1. 进来发现让登录,SQL注入发现无果,随便敲个账号密码提示不是管理员,admin,admin提示密码错误

  2. 爆破也无果,F12发现一段base64编码

  3. 解码为zKaQZkAq,尝试登录,提示IP禁止访问

  4. head添加X-Forwarded-For: 127.0.0.1,登录得到flag

local

  1. 打开题目提示仅限本地访问!

  2. head添加x-forwarded-for: 127.0.0.1,无果,head添加Client-Ip: 127.0.0.1 再次访问,得到flag

justarar

  1. 打开题目发现让我们下载附件,下载下来是一个rar,根据提示,密码四位数字,用ARCHPR爆破压缩包密码得到密码2016

  2. 最后得到一张图片,查看hex,在里面找到flag,去掉空格提交,flag正确

JSFUCK

  1. 进来发现一段提示和一个输入框,输入框测试无果,试试目录扫描

  2. 发现index.php.bak文件,下载下来发现一段JSFUCK编码

  3. 解码以后发现又是一个新的编码,之前index.php.bak文件中提示key为ZKAQ,试试AES解密,得到flag

JSFUCK2

  1. 进来发现一句话,要我点他,这辈子没见过这么嚣张的人,点他!

  2. 点完发现下载了一个压缩包,打开发现是一堆JSFUCK密文,尝试解密。

  3. 看着头大,算了,直接甩F12,console执行一下看看

  4. OK,成功拿到flag

隐匿的真相

  1. 打开发现也是要下载附件,我们下载下来发现是一个Word文档

  2. 进来直接Ctrl + A全选,找个地方粘贴出来,就可以拿到flag了

head

  1. 题目是head,猜测应该在head可以找到有用信息,burp抓包,未发现有用信息

  2. F12->Network,刷新页面,在响应包中找到flag,也可以用burp抓响应包

hctf_2018_warmup

  1. 访问页面查看源码发现注释里面的内容访问它

  2. 访问发现源码

  3. 发现hint.php 打开看到提示,flag在ffffllllaaaagggg

  4. 分析一下源码

    1. <?php
    2. highlight_file(__FILE__);
    3. class emmm
    4. {
    5. public static function checkFile(&$page)
    6. {//白名单列表
    7. $whitelist =
    8. ["source"=>"source.php","hint"=>"hint.php"];
    9. //isset()判断变量是否声明 is_string()判断变量是否是字符串
    10. if (! isset($page) || !is_string($page))
    11. //如果变量声明且为字符串才不会判别为真
    12. {
    13. echo "you can't see it";
    14. return false;
    15. }//不返回值
    16. if (in_array($page, $whitelist)) {
    17. return true;
    18. }//白名单判断,是hint或source返回真
    19. /*
    20. mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
    21. mb_strpos (haystack ,needle )
    22. haystack:要被检查的字符串。
    23. needle:要搜索的字符串
    24. */
    25. //?截断 截取page变量从开头到?
    26. $_page = mb_substr(
    27. $page,
    28. 0,
    29. mb_strpos($page . '?', '?')
    30. );
    31. if (in_array($_page, $whitelist)) {
    32. return true;
    33. }//白名单检查
    34. $_page = urldecode($page);//url解码
    35. $_page = mb_substr(
    36. $_page,
    37. 0,
    38. mb_strpos($_page . '?', '?')
    39. );//二次截断
    40. if (in_array($_page, $whitelist)) {
    41. return true;
    42. }//第三次白名单检查
    43. echo "you can't see it";
    44. return false;
    45. }
    46. }
    47. if (! empty($_REQUEST['file'])
    48. && is_string($_REQUEST['file'])
    49. && emmm::checkFile($_REQUEST['file'])
    50. ) {
    51. include $_REQUEST['file'];
    52. exit;
    53. } else {
    54. echo "<br><img src=\"5bdb0d93dc794.jpg\" />";
    55. }
    56. ?>
  5. 需要满足经过两次?截断后仍能通过白名单检查,并且include正确路径,才输出flag。

    构建payload: source.php?file=hint.php?../../../../../../../../ffffllllaaaagggg

    解释一下这段payload,checkfile检测传入的file的值,将file赋给page变量,首先白名单检测hint.php在白名单内返回真。

    然后?截断在第一次截断的时候将file中的hint.php?../../../../../../../../ffffllllaaaagggg截断为hint.php并顺利通过第二次白名单检测。

    接着是一次url解码,将page变量进行一次url解码。

    注意

    mb_strpos($_page . '?', '?')

    这段代码,“$_page . ‘?’,”,中的那个.是一个连接符,相当于在__page变量后加上一个?。于是这次同样截断剩下hint.php再次顺利通过白名单检测。最后满足3个if条件执行include语句。在包含的时候会把hint.php?/当成一层目录,然后构造../../向上遍历找到flag。

    因为白名单有两个字符串所以把file里面的hint换成source也是一样能拿到flag。

    source.php?file=source.php?../../../../../../../../ffffllllaaaagggg可以达到相同的效果。

你被黑了!

  1. 进来发现是一张图,网站标题显示:你被黑啦!

  2. 检查源码无果,扫一下目录,发现有一个webshell.php,访问看看

  3. 发现是个是个表单,随便输入提示

  4. 使用burp爆破,密码是:a123456789,拿到flag。

与佛论禅

  1. 进来发现是一段文字,我们暂时忽略劲夫是怎么奖励自己的,我们只抓住重点,那段奇奇怪怪的文字

  2. 题目是与佛论禅,那我们去解密一下,在线网站:https://www.keyfc.net/bbs/tools/tudoucode.aspx

  3. 解密以后成功拿到flag。是不是很简单?

Filter

  1. 进来后发现一个超链接,点击发现url产生变化,猜测是文件包含

  2. 目录扫描没什么收获,尝试使用PHP伪协议读取一下index.php。

    Payload:?file=php://filter/read=convert.base64-encode/resource=index.php

  3. 获得index.php经过base64编码以后的源码,解码以后在注释中找到flag。

exec

  1. 进来查看网页源码发现提示source传参,传参以后出现图片,里面是源码

  2. 源码:

    1. <?php
    2. $ip = isset($_POST['ip'])?$_POST['ip']:die();
    3. if(!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i',$ip)){
    4. die("ip 格式错误!");
    5. }
    6. echo strlen($ip);
    7. if(strlen($ip)<7||strlen($ip)>21){
    8. die("ip 长度错误!");
    9. }
    10. // Determine OS and execute the ping command.
    11. if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
    12. // Windows
    13. $cmd = shell_exec( 'ping ' .$ip );
    14. }else {
    15. // *nix
    16. $cmd = shell_exec( 'ping -c 1 ' .$ip );
    17. }
    18. // Feedback for the end user
    19. echo "<pre>{$cmd}</pre>";
  3. 无字符过滤,post传参,对IP格式检测,还有限制长度,先查看一下根目录 ip=127.0.0.1;ls /

  4. 发现有个ffffllllaaaagggg文件,直接读取肯定是不行的超过长度了,但我们可以使用通配符ip=127.0.0.1;cat /f*

exec2

  1. 进来发现源码

  1. $pat1 = "/[^0-9a-zA-Z \/\*]/";
  2. if (preg_match($pat1, $cmd)>0){
  3. die();
  4. }
  5. $pat2 = "/^[a-zA-Z]+ [0-9a-zA-Z\/\*]+$/";
  6. if (preg_match($pat2, $cmd)==0){
  7. die();
  8. }

不能有0-9a-zA-Z /*之外的字符

字符串以a-zA-Z开头

中间有空格

0-9a-zA-Z/*结尾

构造payload,查看目录

  1. Payload:?action=cmd&cmd=ls /

  2. 发现有一个flag文件,cat读取一下,拿到flag

ex~

  1. 进来发现一段emo文字~,看着好像没什么思路,看一下网页源码发现,这个链接二字居然是超链接

  2. 点击出现一段源码,审计发现可以用数组绕过

  3. Payload:?v1[]=1&v2[]=2&v3[]=

ereg

  1. 进来啥也没有,查看网页源码发现?source提示

  2. 传参出现源码

  3. 审计发现可以采用科学计数法加截断进行绕过,传参password=1e7%00*-*,解析后的1e8%00*-*字符串长度小于8,且1e8>9999999

  4. Payload:?password=1e7%00*-*

低头

  1. 进来是要求解密一段密文

  2. 题目是低头,那咱们低头,看到的是啥?键盘,好的,flag出来了

鸡你太美

  1. 进来题目提示了flag的格式,以及要我们下载附件,下载以后是一个压缩包,解压是两张图片

  2. 发现第一张能打开,而第二张无法打开,很明显我们需要在第二张下手,查看hex发现,第二张少了GIF头

  3. 那我们把GIF8给他补上去

  4. 再次打开,发现图片里有一段文字,根据题目提示的flag格式,提交flag。

color

  1. 进来提示flag就在当前页面,F12查看源码,发现一个隐藏的图片

  2. 我们把display: none;去掉,图片出来了,右键保存到本地,使用StegSolve打开,换色,得到flag

相机

  1. 进来发现一张图片,检查页面没什么收获。

  2. 保存到本地,右键属性,详细信息,在照相机一栏找到flag

302

  1. 打开题目,有个超链接告诉你flag就在这里,点击却是跳转到了404.php,仔细观察其实会发现原本应该访问的是flag.html,说明被重定向了

  2. burp抓包,一个一个包放过去,在其中一个包的head中找到了flag

Filter2

  1. 进来发现有个超链接,点击发现url的变化应该是文件包含,并且页面提示flag在flag.php

  2. 使用伪协议读取一下flag.php,?file=php://filter/read=convert.base64-encode/resource=flag.php,然后base64解码,发现flag是一串摩斯密码,再次解码,得到一段MD5密文,根据题目提示的flag格式提交就行了

内有乾坤

  1. 进来发现是一张图

  2. 其实这是一段摩斯密码,短的是.长的是-空的是/,得到.-/.-../.--./..../.-/.-../.-/-...

  3. 解码以后根据flag格式提交flag即可

回转

  1. 进来是一段密文,base64解码无果
  2. 再试试rot13,在线工具:http://www.mxcz.net/tools/rot13.aspx
  3. 得到一段新的密文RmxhZ0lTdGFud2VpZ3VhbnpoaQ==
  4. 再次尝试base64解码,根据题目flag格式,提交flag即可

打赏我,让我更有动力~

0 条回复   |  直到 2021-12-8 | 3788 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.