攻防世界web引导模式 11-20题

先开个坑,也不知道什么时候能写完

一、simple_js

这题很简单,先用burp抓包就可以发现源码,观察源码也不知道在搞啥巴拉巴拉,放到vscode上运行一下,发现无论输入啥这个函数输出都是一样的,那么也就是这个函数其实无意义。

这时候就会发现下面还有一串字符,拿去python输出一下,发现是一串数字,给他转成ascii,就会出现flag

1
2
3
4
5
6
7
8
9
10
print("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30")
flag = "55,56,54,79,115,69,114,116,107,49,50"
flag_1 = flag.split(",")
print(flag_1)
flag2 = ''
for x in flag_1:
flag2 += chr(int(x))
print(flag2)

# Cyberpeace{786OsErtk12}

二、baby_web

这题很简单,先点进去发现转到了1.php的路径,并且提示我们最初的页面

然后用burp进入index.php,就可以发现flag

三、PHP2

这题刚点进去如下,迷迷糊糊用burp抓包一下,也是啥也没有。

没办法直接用dirb扫描目录

也是啥也没扫出来,没办法google一下,发现了有phps的后缀文件,这种文件就是专门用了存php文件的源代码的,但是只有某些特殊情况才会有(记下来)

这样就可以发现源代码了,根据源代码设计id,但是id不能等于admin。根据源代码,我们可以让id = %61dmin,这样%61就会解码为a,但是发现还是不行,后来搜索得到浏览器会自动完成一次解码,所以还需要将%61再编码为%2561,就可以通关了,得到flag

四、ics-06

这题如提示,进入之后只有一个可以进入

那就是报表中心,进入之后发现是日期,但是咋改都没有反应,然后放到burp里面抓包,这时候发现了后面竟然带了一个id=1?似乎有问题,然后直接拿去爆破,先设置1到3000的范围,开始爆破

爆破到2333的时候发现长度明显不一样了,点进去发现flag

五、php_rce

这题最开始做的时候确实摸不到头脑,进去之后是一个thinkphp的页面,并且提示你版本是v5,然后直接拿去Google,并且结合题目名字为phprce,则应该是找漏洞。

找到v5的漏洞,直接用一下看看有没有效果

可以看到命令成功执行,RCE成功

之后就是直接ls / 然后找到flag cat一下就可了,得到flag

六、unserialize3

结合题目名字unserialize(反序列化)可以得知这题应该和序列化与反序列化有关。进入网址,如下,发现是php代码,则直接去Google搜索php反序列化,我参考的是这篇文章

然后根据代码是如果触发了wakeup函数,就会认为是恶意代码,这也就说明了我们需要绕过wakeup函数才可以得到flag。然后后面是?code=,也就说明让我们自己补充后面的代码使得可以绕过wakeup函数。然后通过Google搜索得到wakeup方法的漏洞

若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行。则先补全一下代码,然后输出一下序列化后的数据

则可以改为O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}进行输入,就可以得到flag

七、Web_php_include

这题进入环境是php代码,如下

1
2
3
4
5
6
7
8
9
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>

显然是文件包含漏洞,搜索一下,主要参考下面这篇文章

✔PHP文件包含漏洞全面总结 - Zeker62 - 博客园 (cnblogs.com)

利用php://input写入我们的代码,但是本题过滤掉了php://,这里我们就可以用大写来绕过这个判断,因此输入如下

代码注入成功,并且执行了我们的代码,可以发现flag所在的文件,直接cat一下,就可以发现flag

八、upload1

通过这题熟悉了一些中国蚁剑的用法,感觉还是很nb的。做题过程中主要参考文章如下:

CTF-WEB:经典文件上传漏洞 博客园 (cnblogs.com)

首先进入题目,抓包一下,发现部分源码,可以发现上传的文件后缀必须为jpg和png,其他都是无效的。同时也没有做更多限制,所以这题难度还是比较小的。

直接新建txt文件,写php代码,然后改后缀为jpg,则发现可以上传。这时候抓包一下:

直接在request头里面把1.jpg改为1.php就可以绕过了

然后1.php放的是一句话木马,关于这句话的解释可就大有来头了,new bing如是说:

这句代码是一个 PHP 的一句话木马,它的作用是执行 HTTP POST 方式传递的 ant 参数中的 PHP 代码。它的工作原理是:

  • 首先,使用 eval() 函数,它可以将一个字符串作为 PHP 代码来执行。
  • 然后,使用 $_POST[‘ant’] 获取 HTTP POST 方式传递的 ant 参数的值,这个值是一个字符串,可能包含任意的 PHP 代码。
  • 最后,将 $_POST[‘ant’] 的值作为 eval() 函数的参数,执行其中的 PHP 代码。

这样,攻击者就可以通过向服务器发送 HTTP POST 请求,携带 ant 参数,来远程执行任意的 PHP 代码。这是非常危险的,因为攻击者可以利用这个漏洞来获取服务器的敏感信息,或者对服务器进行破坏或控制。

然后上传成功后就是链接中国蚁剑了,找到他返回的文件名当做url地址,ant为密码,他就自动获得shell了,很简单。

拿到shell!之后就是去上层找到flag.php打开就可发现flag

九、warmup

先打开环境发现就一张图片,没有其他信息,老规矩,先去burp抓包分析,发现提示source.php

然后打开source.php发现源码,可以发现还有另一个hint.php,打开发现提示flag的位置

flag not here, and flag in ffffllllaaaagggg

接下来就继续看source.php源码了

根据源码容易分析出,输入的file参数需要是字符串并且可以通过检测,而且从检测函数容易得到只要:

  • 第一个if语句:输入的为字符串并且在白名单里面

  • 第二个if语句则截取输入在?前的部分检测是否在白名单里面

  • 第三个 if 语句前先对变量url解码,然后和第二个if语句一样进行检验

这样容易看出我们可以构建hint.php?dddd类似的输入来绕过判断进入include,并且结合之前的提示,我做的时候是挨个试,例如

hint.php?../ffffllllaaaagggg hint.php?../…/ffffllllaaaagggg

hint.php?../…/…/ffffllllaaaagggg 最后是hint.php?../…/…/…/…/ffffllllaaaagggg成功出现flag

接下来是为什么hint.php?../…/…/…/…/ffffllllaaaagggg可以起效果

根据php文档,如下,容易看出只要出现…/,include函数就会默认以它开头,而忽略掉hint.php,这就是可以起效果的原因。