嗨玩手游网

渗透测试基础入门:文件上传漏洞之文件名过滤绕过

昨天安仔跟大家分享了文件上传漏洞中的前端JS绕过,今天继续分享文件名过滤绕过。

绕过原理:

JS验证代码通过黑名单的方式来判断允许上传文件的类型,这个时候攻击者就可以通过上传黑名单之外的文件类型来绕过验证上传文件。

黑名单策略:在黑名单中的所有类型禁止上传,不在黑名单里面的可以上传;白名单策略:只允许在白名单里面的文件类型上传,不在白名单中的一律不允许上传。

一般来说的绕过姿势(方法)有上传后缀为Php、php5等文件来绕过。

下面是今天的靶场代码:

<from action="" enctype="multipart/form-data" method="post" name="uploadfile">上传文件:<input type="file" name="upfile"/><br>

<input type="submit" value="上传"/></form>

<?php

if(is_uploaded_file($_FLIES['upfile']['tmp_name'])){

$upfile=$_FILES["upfile"]; //获取数组中的值

$name=$upfile["name"]; //上传文件的文件名

$type=substr($name,strrpos($name,'.')+1); //上传文件的类型

$size=$upfile["size"]; //上传文件的大小

$tmp_name=$upfile["tmp_name"];

if($type=="php"){

echo "<script>alert('不可以上传PHP文件哦!')</script>";

die();

}else{

$error=$upfile["error"]; //上传后系统返回的值

echo "上传文件信息";

echo "<br>图片预览</br>";

echo "<img src=".$destination.">";

}}}

?>

在这段代码中,if($type=="php")进行判断文件的类型是否为php。如果是php,则不允许上传,所以我们要通过大小写(如pHp、Php)或者php3,phtml等后缀进行绕过文件名过滤。

大家可以结合昨天的推送黑客实践基础课:文件上传漏洞的绕过技巧,自己搭建一下试试,如果你在过程中有什么疑问,或遇到其他一些网络安全的问题,可以私信安仔,安仔会尽快回复的,最后祝大家天天都有新进步!

欢迎大家点击关注我的头条号,0基础掌握更多黑客秘籍

私信回复‘’资料‘’领取更多文章和学习资料,加入专属的安全学习圈一起进步

安界贯彻人才培养理念,结合专业研发团队,打造课程内容体系,推进实训平台发展,通过一站式成长计划、推荐就业以及陪护指导的师带徒服务,为学员的继续学习和职业发展保驾护航,真正实现和完善网络安全精英的教练场平台;

想实现进高企、就高职、拿高薪,微信关注“安界网”,发送“福利”,获取更多安全福利课程。

即使低学历也可实现职业发展中的第一个“弯道超车”!赶紧私信我!等你来!

一个人也能做开放世界游戏?独立开发者复盘

对于大多数人来说,开放世界似乎是大团队或者3A工作室才能做的品类,比如《塞尔达传说:荒野之息》、《上古卷轴5天际》、《GTA 5》、《荒野大镖客2》等都是顶级大作。

不过,这不意味着开放世界就是中小团队的禁区,比如海外独立开发者Adam Robinson-Yu就在2019年发布了一款开放世界游戏《A Short Hike》,而且只用了数月的时间研发,在此前的GDC演讲中,他对整个项目做了详细复盘,其中一些做法可能是对同行非常有用的。

以下是GameLook听译的演讲内容:

我是Adam Robinson-Yu,做了一款游戏叫做《A Short Hike》,首先感谢项目研发过程中所有帮过我的人,还有帮忙测试的人,感谢你们的贡献。

它一款远足旅行主题的游戏,你扮演一只访问海岛的鸟,你要在岛上爬山、探索、收集物品、找到其他远足者。

这是岛屿的整个地图,它是开放世界的,但并不是那么大的世界。

这次复盘中,我主要会谈到做游戏的目的,我是怎么开始做研发的、如何在截止日期前完成,还有在研发时学到的关卡设计经验、写作经验以及营销方面的心得等,基本上是整个项目的复盘。

一个原创故事

我想首先有必要说说自己是怎么走到游戏研发这一步的,我觉得做一款游戏最难的部分就是,是否决定要开始研发。

2017年的时候我做了一个令人质疑的决定,那就是放弃软件工程师的工作并搬回到多伦多,我想要全职研发一款简短的独立游戏。在此之前,我做过的所有游戏都是非常小的免费Itch.io游戏,但我觉得这是我自己做一款大游戏的机会。

一年之后,我想做一款野心很大的游戏,它是大型RPG、有很多的角色、地点和战斗机制,然而我对整个目标并不清楚,以至于一年之后我还有很多东西不确定。我发现这款游戏可能需要做很多年,于是觉得很有压力、很沮丧,可能永远都做不完,然而,这个项目却是我志在必得的,因为它是我的第一次尝试。

但在2018年11月的时候,我决定给自己一个短暂的休息,给自己买了份圣诞礼物,然后为一个小游戏做创意原型,用Unity完成研发,然后把自己认为有趣的东西都放进去。

随后,我还在社交媒体公布了自己的创意原型想法。

当时,这对我来说是一个很艰难的选择。由于个人的原因,我非常想做RPG项目,而且投入了一年多的时间,我觉得它给我打开了很多扇门,因此并不确定把它搁置去做一款远足主题小游戏的决定是否正确。

游戏研发是充满很多不确定性的,你很难知道一个项目该不该尝试,如果我只需要把项目做下去就能完成我的RPG大作呢?

但在2018年,我还在玩另外两款比较小的游戏,分别是《The Haunted Island》以及《Minit》,它们让我知道了一款短时间的游戏也可以成功。

所以我决定开始做远足旅行的小游戏,这对我来说是个很好的决定。我觉得做小项目有很多的益处,尤其是当你刚刚开始的时候。如果游戏不成功,你的风险更小;它不一定需要巨大的成功才能让你投入的时间值得,小的目标更容易实现;而且你可以更快地发布游戏,可以帮你学习很多东西,还可能带来一些收入。

确定游戏美术风格

我在《A Short Hike》项目中很早就开始做的一件事,就是确定游戏的美术风格。我是个没有名气的独立开发者,能够依赖的只有Twitter这样的社交媒体来吸引人们对我的游戏产生兴趣,所以我觉得画风很重要,因为你只有很短的时间来获得人们注意力。

对于独立开发者或者很小的团队来说,做出这样的画风很难让人们在游戏里投入时间。所以我考虑了自己在美术方面的局限性,比如我不会做很好看的手绘,建模也没做过多少,只能根据已有的技能试着把游戏做得有趣一些。

我在编程方面的经验更多,所以我把这个小世界渲染成了像素风。我觉得像素风很酷,它可以让我把游戏做的更大一些,可以避免做很多建模的工作,能用更短的时间做更多内容,虽然不够完美,但可以让玩家发挥足够的想象力寻找细节,同时能够知道我想要表达的东西。

为了在Unity里实现这种效果,世界着色器就是这个小小的RenderTexture,然后Unity里的另一个摄像头会看着这个Texture,用Point 滤镜模式把它放大。

我是通过GBCamera插件学到这个技巧的,如果对这个工具有兴趣可以关注一下。

很早的时候,我就在选择色彩,并且用它们来表达我想要的游戏氛围,我的做法很简单,那就是找加拿大秋季的照片,直接从这些照片找样本颜色,这些样本对我确定游戏调色板很有帮助。

但是,要在游戏里做得真实,它们有时候在不同的光照条件下会显得扭曲,所以我自己写了一个定制化的着色器,几乎可以让我控制每一个物体的阴影看起来是什么样子。总的来说,我的目标是让游戏里的颜色和阴影看起来是连贯自然的。

这是我做自定义光照的大致过程,最左侧是默认的ramp,然后做成了梯子一样的形状,最后的结果是把所有的阴影都更靠近白色,这样它们与真实颜色就会更接近。

而且,使用这种颜色风格,可以让我很快做出UV,通过把UV拆到调色板上,我在纹理上节省了大量时间。

而且这种方法实验起来也非常方便。

我想使用后期效果,为我的游戏增加更多的视觉表现力,你可以在Unity的标准免费资源库得到大量免费资源,还可以在不换掉大量的资源的情况下改变游戏的感觉和视觉效果。

如果没有任何特效,这是《A Short Hike》看起来的画面,这样远处的物体噪点比较多,让人很难注意到前面发生的事情。

所以,我首先做的就是给游戏增加一层雾,让玩家可以专注于画面前方发生的事情。

随后,我使用了边缘探测(edge detection)特效来选择背景的轮廓,这带来了很戏剧性的效果,这其实是偶然的,因为当时在尝试不同的滤镜。

如果你仔细看左侧,就会发现我最后加了颜色校正之后的差别,所以我增加了蓝色的阴影,让它看起来更真实。

如果你是小团队或者单枪匹马的开发者,这里或许有些东西是你可以考虑的:

发挥你的长处,尝试能够用到的工具,考虑美术风格对你的研发流程以及游戏大小的影响,你的局限性最后有可能会让你的游戏看起来很独特。

从创意原型到项目

上面大多数的工作都是在2018年12月完成的,考虑到我要做的是个小项目,我认为可以在三个月内把游戏做完发出来。

当我做创意原型的时候就做了份策划文档,把研发大致分为三个阶段,用三个月分别做alpha测试、beta测试和发行准备。

我觉得对我来说非常有效的是,我在脑海里有一个非常灵活度的目标,我把项目的核心目标定的很紧凑,完全可以在三个月的截止日期内完成。但是,还有很多功能是我想加入的,所以把它们当成了拓展目标。

理想情况下,即使扩展目标没有做出来,游戏本身也可以是好玩有趣的。

实际上大多数的拓展目标都没有在最初Humble商店发布的时候增加,但随后Steam版本做到了游戏里。

我还追踪自己的进度,使用简版的Scrum过程,每周都会检查进度,让我知道哪些事情是有很多时间可以做的,以及如何提前规划。当你自己工作的时候,做这样的规划并不容易,但我发现用这种方式追踪进度很有用。

另外,我给整个项目还设置了一个外部截止日期,以帮助我完成这个项目,我认为这种方式可以让你专注于完成某些事情,而不是把一件事做到完美。

走捷径

我很想在游戏里做尽可能多的东西,所以必须走一些捷径,比如之前提到的艺术风格让我节约了大量的美术资源创作时间。

但我还重新使用了以前项目当中使用过的知识、工具和资源。比如我使用了Yarn做对话系统,此前我在一个RPG小项目上也用过,还有很多工具与流程是之前试过的,所以用起来很快。

我还使用了Incontrol插件来支持手柄,它几乎可以一次性的自动支持大多数的手柄。

我用Cinemachine来快速建立动态摄像头系统,它让我在游戏里的不同区域创造了很多的虚拟摄像头。真实摄像头则可以跟随角色移动在不同区域之间变化。

我知道学习新工具是有代价的,但如果你对它们足够熟悉之后,长期来看是有益的,你可以在未来的项目中重新使用。

我还有自己的资源脚本,并且可以用于不同的游戏,只需要把他们放到每个游戏的资源库即可。

我还重新使用了之前RPG和其他游戏的资源。

游戏世界大多数是用Unity的默认地形工具完成的,在Unity里直接使用地形工具,让创意原型和关卡设计变的更容易。

Triplanar Shader也是很有用的,它可以自动给地形着色,这样你旋转时候不用重新渲染每一个表面。

我的地形着色器还使用了Unity默认的绘画工具,因此增加海滩和其他地形很容易。我不得不检查混合的代码以使用适合这个风格的形状,但这是必须做的改变。

另外,我还做了自定义工具,其实很简单,就是把角色快速移动到一个位置,然后在摄像头下预览或者以摄像头角度预览。

后来我还在游戏里给河流以及瀑布网格做了工具,这样就可以不用在每次改变地形的时候都要来回改动,这个工具节约了我大量时间,而且创作过程也很有趣。

做这些工具需要很多的时间,所以我的建议是,只在你的项目需要的时候才去做。

还有一个需要强调的是,当你创作了大量的资源之后,出现bug是不可避免的,我不知道这个情况是不是bug,但对于我来说,增加更多内容,比费尽心思去解决这个bug更重要。这些小bug是很多玩家注意不到的,而且你是个独立开发者或者小团队,有一些小问题是玩家可以原谅的。

接下来我想总结自己是怎么按时完成研发的,我把游戏研发分为不同的里程碑,并且不断更新每个里程碑完成的时间。你还要在规划目标的时候把不确定性考虑在内,可以使用之前的知识、工具和资源,在工作流程需要的时候创造一些工具,还有,你不需要要解决每一个bug。

接下来我想要说的是在关卡设计方面的心得

我想要做一款游戏,迷路是游戏的一部分。我觉得能在任何时候走向任何方向,给游戏增加了神奇的感觉,任何没有经过的路,都可能充满新东西,我想给玩家一种永远都有新东西可以发现的感觉。

所以在创作小岛的时候,我直接用Unity雕出了不同的区域,找到不同的气候加进去,这个过程让我得到了很多灵感,所以最后我头脑风暴了很多想法,给每个区域增加了很多的活动和事件,还用一些时间考虑岛屿的主线是什么。

最主要的路线从这个小屋开始,主角可以从这里进入小镇,在这个地方你可以学到如何玩游戏,并向你介绍这个世界。但这里是有障碍的,看起来无法通过。不过,最终你可以收集金币和羽毛,能让你在峭壁上攀爬,通过之后,你就到了山的左边,到达高处的会合地点。

这时候,你是无法到达山巅的,因为需要收集7根金色羽毛,通过这个设计,玩家们无法快速通关,有了更多的时间去探索游戏世界。

我知道有很多的捷径可以走,主要是保证游戏的自由度。但我觉得对满意度较高的玩家而言,你可能会想要做一些游戏里意想不到的事情。不过,控制游戏节奏也还是很有帮助的,因为它可以让我把游戏体验做的更好。

在测试中,有玩家觉得一直探索和遇见其他人会很枯燥,他们看到山上的NPC都不会与他们交流,只是一路跑过去。这让我对游戏的节奏开始思考,在很长一段时间内我都在不断设计新的角色和区域,以保持玩家们的兴趣。

制定一个计划可以帮你很好的控制节奏,但事情并不总是会如你想象的那样顺利。

比如在测试中,很多玩家并没有像我想象的那样进入快节奏,相反,它们直接跳进了海里。可能很多人想要试试游戏里是否让他们游泳?如果你允许游泳,有部分人会很开心。

但还有些玩家不这样做,他们一直绕着岛屿走,这种情况很普遍,虽然不是所有人都这样,可我在测试中看到了很多次。

不少玩家会迷失在山脉的背面,他们会错过游戏重要的新手教程部分。

让这种情况更糟的是,最初测试的版本中,山的背面没有太多东西可以探索。

为了解决这个问题,我最后在山背部增加了一个洞穴,我觉得人们走了很长时间之后,一个洞穴会引起他们的好奇心,他们就会穿过洞穴,而这会把他们直接引导到新手教程部分。

所以,让玩家按照规划的方式去玩,有一些要注意的地方。

首先是提供一些温和的指引,我不想要让玩家觉得是被迫做某些事。给玩家提供指引的方式有很多种,这些节奏帮助他们遵循我的计划推动游戏进度。如果指引是很自然的东西,比如山上的洞穴或是很酷的地标,这会让玩家有兴趣主动探索。

还有些方式是比较直接的指引方式,比如金币、小路等等,还有些信号是可以帮助迷路的玩家走回主要区域的,如果你没有迷路则不用关注它们。由于游戏的目标是到达山顶,通过爬上每一个斜坡,玩家们总会找到如何过去的方法。

另一个方式是用门,在玩家们获得足够的知识或者经验之前,隔断一部分区域。

但我在游戏里不会使用那样的门,而是尝试比较自然的门,在远足旅行当中,无法攀爬的悬崖就是一扇门。这种设计方式很自然,还会让玩家觉得或许有更多方式解决问题,比如集齐足够的羽毛或者得到跳跃能力之后才能通过。

还有一个让玩家按计划推进的方式是用无声的重复。比如在游戏一开始,你可以发现一个玩具铲子,在随后的游戏里,你可以换成真正的铲子,在岛屿上挖东西。从技术层面来说,这是个可选物品,但玩家错过后,会觉得错过很多东西。

最初的时候,我设计这个玩具铲子是准备让一部分留意的玩家拿起来,然后他们可以换成真正的铲子。但很多玩家因为各种原因都选择了避开这个铲子,有的人看到了山间的路直接走过去,有的人看到悬崖想要攀爬,完全打乱了我的计划。

所以,我决定在游戏世界里不止放一个玩具铲子,而是5个,都在区域开始的地方。只要玩家拿了一个铲子,其余四个都会自动消失。所以,如果玩家没有自己拿起铲子,他们也会在别的地方注意到,你是没有办法忽略的。

这些设计解决了问题,而且是不错的做法。但我也做了新手教学信息,你在游戏最后要爬到山顶,所以必须学会如何到达,比如学会二级跳。如果玩家没有攀爬过悬崖,就会看到一个信号,只因他们去爬山,如果已经自己学会了攀爬,就不会看到这些东西。

最后一个就是重视玩家,也就是当他们在玩游戏的时候,你要给他们的脑海灌注一些东西。

比如攀爬,游戏一开始是很难让玩家学习攀爬的,我觉得这并不是那么直观,因为大多数的游戏里你都可以跳跃,但并不是看到的每一面墙都能爬。而且攀爬是需要上下文的,你需要推着墙然后按住某个键,这些都不是偶然发生的,即使是用明显的标志放在对话里,玩家们也有可能会跳过对话,看不到你给的指引。

我最后做的是在游戏里增加了一个爬山者俱乐部,比如你收集羽毛的时候需要问他们如何攀爬,即便是错过了任务,也可以路过的时候看其他角色如何攀爬,最终学会这个能力。

我还想说一些与游戏最终区域相关的一些问题,这或许是最难设计的区域。我想让这个区域变成一个迷宫,比其他区域更难一些。

当玩家到达这个区域之后,他们的羽毛不会恢复,所以,一旦冻僵了之后,你就需要到更暖和的地方获得羽毛恢复的效果才能再回来。这样,玩家们就无法使用他们收集的羽毛一路爬到山顶,而是要做好计划,在哪个地方停留积攒羽毛数量,设计好登顶的方法。

这个区域最初设计的比最终版小很多,而且玩起来也更具迷惑性。实际上我不得不重做了这个区域,很难,因为这是最后做的,必须为其他地方留出空间。

最后一点就是,我给山顶增加了一个清晰的路线,所以到这里的时候,玩家们可以清楚地看到如何登顶,但却没有足够的羽毛去实现目标,他们需要时不时回来积攒羽毛,精神做好登顶的计划,而不是直接走上去。

我实际上还增加了更多的羽毛。测试的时候,登顶的难度更大,虽然增加更多羽毛会打乱游戏节奏、更难的游戏会卡住玩家进度,但我觉得这么做可以带来更有趣的体验。

我还想说的一个部分是协作。最开始做这个项目的时候,我没想到要写这么多东西,但最后还是写了很多,对我来说这很难,因为写作本身就不容易,至少我是这样。

以前做RPG游戏的时候,写作是比较难的地方,因为你要设计故事、对话。所以在做《A Short Hike》的时候,我决定让写作变得更容易一些。我设计了一些简短的弹出对话,而不是冗长的剧情,就像是给好朋友发短信那样。

我做研发的时候,没有打算把故事写的很深刻,而且觉得剧情不是游戏的主要部分,有时候是我的合作伙伴在检查我写的对话。

游戏发行

游戏研发之后,我们来说说发行方面的事情。

《A Short Hike》最初是在Humble发布的,令人意外的是玩家反馈非常好,我不知道有多少人玩过这个版本,但它的评价不错。

所以,我决定在Steam版本发布之前做一个重大更新,一部分原因是我还有很多东西想加进去,还有一部分原因是我希望对玩家更慷慨一些。这个阶段我给游戏增加最多的是一些小游戏,比如钓鱼、竞速。

我宣传游戏的方式就是通过Twitter发布一些有趣的动图,向玩家展示一些有趣和重要的信息。这对我很重要,因为人们会给我反馈,有一些玩家喜欢的动图我还放在了宣传片里。

游戏发布之前,我还做了一个媒体包,发送给可能对我游戏感兴趣的游戏记者,还找到了在Twitter上喜欢游戏的人,虽然并不是所有人都在发布当天报道了我的游戏,但一些人提及对我而言就是很大的成功了。

我并不觉得《A Short Hike》是一款所有人都能接受的游戏,它的节奏较慢,没有真正的解谜。所以我在展示游戏的时候非常谨慎地选择用词,以免给玩家带来过高的期望值。比如名字里就有short,描述是“有关山上远足旅行的一个小型探索游戏”。

在游戏的一开始,我还设计了一个画面,写的是远离城市去远足,这就给玩家带来一种感觉,游戏体验是令人放松的。

最终在2019年7月30日,游戏登录了Steam商店,我从一开始就没有过高的期望,但最终的表现还是超出了我的预期。

从数据来看,发布首周外部流量最大的来源是Twitter,而在Steam发布首周,大多数的流量都来自于Steam平台,所以我觉得Twitter带来的热度有很大的帮助,以上就是我今天分享的内容。

更具沉浸感更便捷!《上古卷轴5》对话改善MOD发布

MOD制作者“GOsteW”和“lilebonymace”近日发布了一个《上古卷轴5:天际》的有趣MOD,这个MOD加入了一些对话选项,改善了原作中的各种对话,使之更具沉浸感,也更简单便捷。MOD制作者公布了一段简短的视频,展示了这个MOD的效果,一起来看看吧!

MOD制作者表示,所有的回应都是通过使用游戏的原始语音文件来发声的。此外,这个MOD也带来了一些便捷,比如它增加了一个对话选项来跳过《天际》中的对于婚姻如何运作的解释,它还增加了一个对话选项来结束与波伊西亚邪教分子的对话,等等。

目前,MOD制作者已经改进了与Revelers、Aela、Brunwulf、Maul、Tonilia、Brynjolf、Boethiah和Maramal的对话。小编我不知道MOD制作者是否还会改进更多的对话,但我觉得这是有可能的。

《上古卷轴5:天际》原版游戏“对话改善”MOD下载,《上古卷轴5:天际重制版》“对话改善”MOD下载。

更多攻略
游戏推荐
更多+