题目:https://adworld.xctf.org.cn/challenges/problem-set-index?id=25&rwNmOdr=1678625790128
view_source
题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
打开题目,尝试右击,确实无法使用。
题目描述提示查看网页源代码,鼠标右击无法使用,那么我们就可以通过F12来查看网页源代码。
点击查看器,flag赫然出现
cyberpeace{133490b87a6f9725430bde6d8796cb9e}
除了最简单运用F12,我们还可以用bp抓包查看到
这道题的目的应该是让大家初步认识F12的作用,就不去研究其他师傅的WriteUP了。
get_post
题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
HTTP 方法
最常用的两种方法是:GET 和 POST。
GET 方法
GET 用于从指定资源请求数据。
GET 是最常见的 HTTP 方法之一。
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.php?name1=value1&name2=value2
POST 方法
POST 用于将数据发送到服务器来创建/更新资源。
通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
最直接的区别:
GET请求的参数是放在URL里的,POST请求参数是放在请求body里的;
GET请求的URL传参有长度限制,而POST请求没有长度限制;
GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制;
简单了解HTTP的两种请求方法后,我们打开题目
很直接的把提示告诉了我们,按照GET请求方式,我们在URL后加上需求?a=1
页面回显提示再以POST方式提交一个b=2的变量
首先将HackBar下方Post data点击选用
然后在框内输入需求变量b=2
最后点击Execute提交
成功获取到flag
cyberpeace{398854238609715fb0fa1904f0629213}
这时候我们对网址刷新抓个包就可以看见 POST请求参数是在body中的
如果不适用HackBar,通过bp也可以完成
对网页抓包加上需要变量,再改变请求方式
添加需求变量b=2即可获得flag
两种方式各有各的好,HackBar方便解题省去复杂的步骤;bp相对麻烦,但能更直观的对比GET请求和POST请求的不同。
robots
题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
知识点补充:robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
打开场景,什么东西都没有仅有标签页名robots,那看来就是让我们查看robots.txt文件。
回显结果如上
User-agent: * // 这里的*代表的所有的搜索引擎种类,*是一个通配符
Disallow: f1ag_1s_h3re.php // 这里定义是禁止爬寻f1ag_1s_h3re.php目录
很明显,我们所要的flag就在f1ag_1s_h3re.php文件中,访问f1ag_1s_h3re.php
即可得到flag
cyberpeace{15cfcce7355ef80fa55be8fc8c4d125b}
我们还可以利用dirsearch,扫后台目录
一样可以发现robots.txt文件,之后步骤与上述相同即可获取flag
backup
打开场景入眼就是提示,index.php备份文件名。
直接百度查询index.php备份文件名,得知为index.php.bak
小知识:常见的备份文件后缀名有: .git .svn .swp .svn .~ .bak .bash_history
在URL后加上/index.php.bak回车,跳转一个下载文件
直接打开就直接看见了flag
Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}
除了上网查询index.php备份文件名,我们也可以借助dirsearch扫目录
命令行:python dirsearch.py -u "http://61.147.171.105:53583//" -e php
HTTP状态码200代表请求访问成功
一眼发现bak为备份文件
cookie
打开网页
cookie:指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
直接对网页进行抓包
能看见提示查看cookie.php
在URL后加上/cookie.php访问
再次给了我们提示:查看http响应
对网页再次抓包,这次加上 Response to this request
Do intercept下Response to this request功能可用于对服务端发送过来的信息做修改来欺骗浏览器。
点击Forward可以看见flag:cyberpeace{1e3d7b210e985919e516f9ee380d4cdc}
还可发送到重放模块Repeater
也可以找到flag
解出题目后习惯性看看其他师傅WriteUP,发现甚至可以不需要bp即可解题(tql)
在题目网页右击打开检查(check)
在存储中可以看见Cookie中的内容(学到了)
URL后加上/cookie.php访问
依然对网页进行检查(check),在网络下可以看见http响应头
最后在Date下发现flag。
HTTP响应状态码 200 OK 表明请求已经成功。默认情况下状态码为 200 的响应可以被缓存。
HTTP 响应状态码 404 Not Found 指的是服务器无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。
404 状态码并不能说明请求的资源是临时还是永久丢失。如果服务器知道该资源是永久丢失,那么应该返回 410(Gone)而不是 404。
disabled_button
首先看题目描述提到前端知识,联想到HTML,再提示一个不能按的按钮,结合题目名button很明显是涉及到HTML button标签知识,最后通过disabled提示应该是按钮被禁用了
知识补充
button标签是什么意思:<button> 标签定义一个按钮。
在 button 元素内部,您可以放置内容,比如文本或图像。这是该元素与使用 input 元素创建的按钮之间的不同之处。
打开场景展现内容确实是一个不能点击的按钮
提示也给的很明显,只要能点击flag按钮,应该就能获取到flag。
直接F12对网页进行检查
很明显在body中我们可以看见运用了button标签,但是存在disabled导致button被禁用无法发挥作用,那只要我们编辑文件将disabled=“”删除即可。
现在按钮就可以点击了,点击flag获取flag
cyberpeace{7cf2dcee258bea113e3c011e87850606}
通过form表单代码审计,可以发现在input标签中flag元素名为auth请求方式为post
那我们也可以通过post请求直接获取flag
这道题的作用就是初步了解前端知识。
simple_js
打开场景就是让我们输密码,随手输一个看看
回显假密码还带个haha(有被嘲笑到),网页空白,题目又提及js,那就查看一下网页源代码
js代码这么多,线索应该是在这其中。对代码审计一番发现,首先是定义了很多无用变量,其次回显结果与tab无关。这时候下方的一段代码引起了注意。
String["fromCharCode"](dechiffre("\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"));
\x开头感觉是十六进制,随手写个python脚本跑一下看看
得到这一串数字,盲猜是ASCII编码,再写个python脚本跑一下看看
按照题目描述flag格式尝试提交成功
那么flag为
Cyberpeace{786OsErtk12}
xff_referer
题目描述:X老师告诉小宁其实xff和referer是可以伪造的。根据题目描述,那就是考验xff和referer知识。
知识补充:
XFF
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案中正式提出。
这一HTTP头一般格式如下:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。
Referer
referrer 网站来路;访问者进入网站的任何途径。HTTPReferrer是header的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer,告诉服务器用户从那个页面连接过来的,服务器藉此可以获得一些信息用于处理。
总结就是xff可以用来构造来源ip地址(可伪造),referer可以用来构造来源网址URL
了解了一下基础知识,那我们现在就打开场景看看
映入眼帘的就是IP地址,那根据上面我们所了解的,这应该就是我们要构造的xff的IP地址
使用bp抓包,在头部加上 xff(注意大写字母),然后放行。
X-Forwarded-For:123.123.123.123
网页回显直接告诉我们了referer所要构造的来源URL
那我们在头部再加上referer(注意大写字母),放行
Referer:https://www.google.com
网页回显flag,完成!
weak_auth
题目描述提到了密码,第一反应涉及暴力破解,题目翻译完为“弱身份验证”那应该和弱密码八九不离十了。
打开场景
随便输入一个账号密码看看反应
要求用管理员账号登录,尝试admin账号登录
回显密码错误,说明admin为管理员账号,省的爆破管理员账号了,直接对密码进行爆破
因为是弱密码,想来密码也不会太难,输入账号密码即可获得flag
cyberpeace{3524f45577e157552bfe3b42a3a0e23d}
这道题还存在一个小提示,当我们输入账号密码错误之后,页面也会跳转到一个空白页面,对网页进行检查能发现提示
command_execution
题目https://adworld.xctf.org.cn/challenges/problem-set-index?id=25
题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
根据题目描述,我们可以推测应该是在ping命令拼接了其他命令导致文件信息的泄露。
打开场景
首先要能ping通才能有迹可寻,尝试ping127.0.0.1.
能够ping通并且有回包,那我们再试着拼接语句。
知识补充
windows 或 linux 下:
command1 && command2 先执行 command1,如果为真,再执行 command2
command1 | command2 只执行 command2
command1 & command2 先执行 command2 后执行 command1
command1 || command2 先执行 command1,如果为假,再执行 command2
命令执行漏洞(| || & && 称为 管道符)
那在这里我们使用&、&&、|都可以用来拼接
首先查看有没有文件
127.0.0.1 | ls
有个index.php文件,那接下来直接利用find查找是否存在flag文件
127.0.0.1|find / -name "flag*"
发现txt文件,直接用cat查看
127.0.0.1|cat /home/flag.txt
发现flag
cyberpeace{506e217e083b3339831a12159382c7b2}
总结:
这道题主要是掌握命令拼接的方法,和熟悉Linux命令