攻防世界「Web」——新手练习
2020-11-22 14:54:47

简单地记录一下自己「攻防世界」练习题目中Web部分的WriteUp。

01 View Source

X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。

打开题目之后,发现的确鼠标右键没有反应。但是,还有个方法,就是F12的终端控制台,能查看网页代码。一道平平无奇的签到题。

02 Robots

X老师上课讲了robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。

去网上搜了一下robots协议,大概了解了一下是个啥玩意儿。

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似”Disallow: *.gif”这样的通配符。

打开题目,发现是空白的页面。因为robots.txt保存在根目录下,尝试着在url中直接输入robots.txt。

这里可以看到不允许网络爬虫获取的页面f1ag_1s_h3re.php,应该就是我们想要的页面。

在url中直接去访问这个页面,然后拿到flag。

03 backup

X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!

打开题目,页面提示index.php的备份文件名。

其实,我也不知道index.php的备份文件名是啥?想着去google上搜一下,结果出来的都是这道题目的WriteUP了。还是自己试着猜猜看吧。

现在URL中输入了 “index.php.backup”,提示 “Not Found”。然后又试了一下 “index.php.bak”,下载了一个文本文件。

img

X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’

打开题目后提示是否知道cookie,然后F12打开控制台选择网络。重新刷新页面后,选择题目页面,能看到在HTTP响应头中存在set-cookie:look-here=cookie.php.

img

在URL中输入cookie.php,得到页面响应和HTTP响应头。

img

05 disabled_button

X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?

网页中的页面,给了标有”flag”字样的按钮,但是无法点击。

右键检查元素后,发现这个按钮有个disabled属性。

img

直接删除这个disabled属性后,页面上的按钮就变为可点击状态。

点击按钮后,就可以获得flag。

https://pic3.zhimg.com/80/v2-ef90790f4d0a9030b482bc5ac3a29a3a_1440w.jpg

06 weak_auth

小宁写了一个登陆验证页面,随手就设了一个密码。

题目给了一个登录界面,看到题目的提示说随手设了一个密码,估计是弱口令。

试着了弱口令admin/password, admin/admin, root/password, root/toor, admin/123456

最后发现是admin/123456。

07 simple_php

小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

img

看到题目是php的代码审计,要对判断条看到题目是php的代码审计,要对判断条件进行绕过,从而输出flag。件进行绕过,从而输出flag。

看到题目是php的代码审计,要对判断条件进行绕过,从而输出flag。针对变量a,看到a既要等于0又要判断为真。看起来是有点矛盾的。

上网查了一下php的弱类型比较的知识之后,发现判断语句还是比较好绕过的。

\$a=’test’,在进行数值比较时,\$a会进行强制类型转换,变成0,从而\$a==0成立,此时\$a也为真。

b=’2000test’,在进行数值比较时,b会进行强制类型转换,变成2000,从而\$b>1234成立,此时\$b不为数字。

img

08 get_post

X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?

题目中提示用GET方式提交一个名为a,值为1的变量,那可以直接在url中提交。

提交完后,显示再用POST方式提交一个名为b,值为2的变量。这里我使用burpsuite进行抓包修改。

img

发包之后,就能直接拿到flag了。

img

09 xff_referer

X老师告诉小宁其实xff和referer是可以伪造的。

首先去查了一下什么是xffreferer

题目提示IP地址必须为123.123.123.123,用burpsuite抓包后,新增一个X-Forwarded-For: 123.123.123.123头部字段。

img

发包后,页面提示必须来自“https://www.google.com”。

再刷新一次页面,用burpsuite在http头部中添加X-Forwarded-For: 123.123.123.123和Referer: https://www.google.com

发包后,获得flag。

img

10 webshell

小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。

img

页面上显示的是php的一句话木马。

用burpsuite发送构造post包。

img

根据返回的结果可以看到flag.txt的路径。

img

再次用burpsuite构造post包,来输出flag.txt的内容。shell=system(‘cat /var/www/html/flag.txt’);

img

11 command_injection

小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

题目中给了一个ping命令的执行窗口,可以输入要ping的地址。

尝试了一下是否存在命令注入,输入payload=’| ls’。

img

存在命令注入,为了查找flag文件的路径,输入payload=”| find / -type f -name “flag*””。

第一个应该就是要找的flag,可以用cat命令来输出内容。

img

12 simple_js

小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

打开题目后,发现弹出一个密码框让输入,发现怎么输入都是错的。

右键查看页面源码,发现有一段JS代码。

仔细阅读完代码后,发现dechiffre函数返回的是将局部变量pass中的ASCII转成字符后拼接成的字符串。

因此无论怎么输入密码,返回的都是pass的内容。

但是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”。

试着用console.log(“\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”)对这串十六进制数转义,得到”55,56,54,79,115,69,114,116,107,49,50”。

用这串新的ASCII码,去替换原来的pass,并修改p += String.fromCharCode(tab2[17]);为p += String.fromCharCode(tab2[10]);这句代码其实是拼接最后一个字符。

用console.log(pass);就可以得到结果为786OsErtk12。

所以flag就是 Cyberpeace{786OsErtk12}.