最近几天刚刚接触了ctf,去尝试了一下攻防世界web区的新手篇题目,以下解题过程记录一下自己的学习体会与心得,如果哪里有错可以在评论区告诉我,我及时改正。
1.view_source
1.1获取场景后:
1.2根据题目要求,我们需要查看网页源代码,打开方式一种是鼠标右键打开,一种是按F12键,题目规定无法右键,所以我们按F12打开,如图:
1.3第二种解法:在其他网页打开源代码后把地址换成该网页地址,即view-source:后加上该网页地址,如图:
至此拿到flag,第一题完成
2.robots
题目如下:
2.1获取场景后:
2.2发现什么没有。。。这时候我们去查一下什么叫robots
如图:
2.3可以看出robots协议主要内容就是查看一个站点根目录是否存在robots.txt文件,我们尝试输入:
如图:
2.4发现成功进入后它提示我们flag在f1ag_1s_h3re.php这个文件中,进入后得到flag,如图:
2.5第二种解法:可以用御剑工具来扫描网站后台文件
如图:
2.6输入URL后查询,发现第一个就是关于robots文件,打开操作即可
3.backup
题目如下:
3.1获取场景后:
3.2我们先去网上查查index.php有什么备份文件名,通过度娘知道常见的备份文件后缀名有:“.git”、“.svn”、“.swp”,“.~”、“.bak”、“.bash_history”、“.bkf” 我们尝试在URL后面,依次输入常见的文件备份扩展名。
如图:
3.3发现只有index.php.bak是正确的,用记事本打开,得到flag
3.4第二种解法:仍然使用御剑扫描,如图:
3.5可以直接扫描出来,执行并得到flag
4.cookie
题目如下:
看到就知道很明显要考cookie的知识
4.1获取场景后:
4.2首先,我们先了解一下cookie的概念,Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息,简单来说就是储存在用户本地终端的数据
我们可以按F12查看网页的cookie信息,如图:
4.3我们可以通过网络中查看也可以直接从储存中查看到cookie,cookie中的信息让我们查看cookie.php,我们打开它,如图:
4.4提示我们查看http的头文件,打开头文件后,得到flag,如图:
4.5第二种解法:使用burp抓包实现,如图:
4.6查看到cookie信息为look-here=cookie.php ,再重发器中打开,输入cookie.php,如图:
得到flag,至此第四题完成
5.disabled_button:
题目如下:
5.1获取场景后:
5.2打开后我们发现有关flag的按钮无法点击,这时我们F12看一下该按钮的源代码,如图:
5.3可以看到该按钮不能点击是因为有disabled这个属性,我们直接给他删掉(亲测改成able也可以),毕竟前端的防护形同虚设,这时就可以点击了,拿到flag,如图:
第5题完成
6.weak_auth
题目如下:
6.1获取场景如下:
6.2我们随便输入看一下:
6.3它提示我们登陆账号为admin,我们账号输入admin,密码随机,再看一下结果:
6.4由此,我们想到暴力破解,打开burp,进行暴力破解,如图:
6.5发送给测试器,先清除所有变量,在添加密码为唯一变量,在添加密码字典,进行暴力破解,观察长度不一样的字段,如图:
6.6得到密码为123456,输入后得到flag,如图:
至此,第六题完成
7.simple_php
题目如下:
7.1获取场景后:
7.2我们发现是一串PHP代码,简单阅读一下,show_source将该文件语法高亮显示(即用不同的颜色和文字显示关键字来增加可读性),include()即调用config.php这个文件,之后定义了两个变量a,b并规定以Get的形式提交,如果a==0且a为真(即bool返回值为1),输出flag1,然后判断b如果为数字则直接跳出,如果b>1234则输出flag2。我们首先发现,第一a和b的判断条件是冲突的,第二该页面没有让我们输入a和b的地方,我们一个一个来解决,第一个问题涉及到php弱类型比较的问题,解释如下:
掌握php弱类型比较
php中其中两种比较符号:
==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较
字符串和数字比较使用==时,字符串会先转换为数字类型再比较
var_dump('a' == 0);//true,此时a字符串类型转化成数字,因为a字符串开头中没有找到数字,所以转换为0
var_dump('123a' == 123);//true,这里'123a'会被转换为123
var_dump('a123' == 123);//false,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0。
举例:
var_dump('123a1' == 123);//true
var_dump('1233a' == 123);//flase
所以我们可以将a=0dd,b=123245d,规避掉检测
7.3第二个问题,如何提交,因为该题的变量是以Get方式提交的,所以我们可以直接在URL后添加?a= &b= 提交(如果是post,下面一道例题会讲),如图:
7.4得到flag,至此第六题完成。
8.get_post
题目如下:
8.1看题目可知,本题考查的是http协议中常用的两种请求方法,Get和Post
获取场景如下:
8.2我们知道以Get方式提交的信息会暴露在URL上,所以我们直接在URL上写上?a=1,如图:
8.3题目提示我们接下来要以Post的形式提交一个b变量,但以Post提交的信息我们无法查看,这时我们就需要借助工具HackBar来完成(HackBar之后的SQL注入也会用到),如图:
8.4我们按F12打开HackBar先将该网页的URL加载(load)实行,然后点击下面的post data,并在对应的框中输入b=2,实行,如图:
8.5第二种解法,用burp抓包实现,如图:
8.6将数据包转到重发器加工,并在GET后提交?a=1,如图:
8.7这时我们右键选择变更请求方式,将GET改成POST,输入b=2(?a=1不能丢,要加回来),如图:
至此,拿到flag,第八题完成。
9.xff_referer
题目如下:
9.1我们看下题目描述: “X老师告诉小宁其实xff和referer是可以伪造的“ (az,作为一名菜鸟,我当时看是一脸懵逼的。。。),所以我们去度娘查一下什么是xff和referer,如图:
9.2看了之后,我们知道X-Forwarded-For是一个HTTP请求字段,作用是用来识别Web服务器的客户端原始IP的
而referer是HTTP协议中用来告诉服务器该网页是从哪个页面链接过来的;然后,我们进入题目:
9.3这正好和我们刚看的xff有关,我们只要让xff为123.123.123.123即可,我们可以用burp抓包修改它的参数,或在火狐下个插件:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/01f15f402277798c4e64f66a0f09fe49.png)
9.4如图(以burp展示):
其实也可以用上述提到的HacBar修改,但本人的HacBar过于垃圾,没有这个功能,就先不展示了。。
9.5之后提示我们必须来自https://www.google.com的请求,这正好与referer有关,抓包,修改,如图:
得到flag;
9.6这里有一个小问题,那就是在HTTP添加头字段时要空一格输出,并在输出完成后要回车两次才会生效;
并且这题也可以在HacBar中修改;如图:
至此,第九题完成。
10.webshell
题目如下:
10.1获取场景如下:
10.2webshell其实就是一句话木马,场景中这个是一个非常经典的一句话木马,我们来分析一下,@的作用是隐藏掉执行该代码的错误,eval则是会将字符串看做PHP语句来执行,信息以POST的形式提交,这在xss漏洞经常使用,当该漏洞成功提交后,我们就可以以POST的方式提交一些PHP代码,从而达到我们窃取信息的目的,比如:
10.3利用ls来查看后台所有的文件,我们看到了flag.txt,用cat将它提取出来,用到了Linux指令,如图:
flag就到手了,可见一句话木马是多么好用(觉醒了什么奇怪的属性 Σ( ° △ °|||)
10.4第二种解法:用到了后台管理工具AntSword(蚁剑),打开蚁剑,右键添加数据,输入网址和密码,测试链接,如图:
10.5链接成功后,添加,打开后看到flag.txt,点开得到flag(图形化管理整的是方便啊 o( ̄▽ ̄)d)
至此,第10题完成。
11.command_execution
11.1题目如下:
11.2 获取场景如下:
11.3 题目提示到没有waf(即防火墙)Ψ( ̄∀ ̄)Ψ
我们先输入127.0.0.1,看一下:
11.4可以发现ping成功了,我们在随便数入一些字母
11.5可以看到随便输入什么他都会提交上去,立马想到这很可能是一个SQL漏洞,
但在注入之前我们先补充一点管道符知识:
windows 或linux 下:
command1 && command2 先执行command1,如果为真,再执行command2
command1 | command2 只执行command2
command1 & command2 先执行command2 后执行command1
command1 || command2 先执行command1,如果为假,再执行command2
( | || & && 称为 管道符)
所以我们可以看到 ,我们要借助ping127.0.0.1的正确性来运行我们自己写的代码
如图:
11.6可见,它返回了index.php,我们的猜想是对的,继续我们打开index.php查找flag
11.7我们没有发现flag,但他一定在这些文件中(在home文件里),如果一个一个查,这样效率太低,我们直接输入
127.0.0.1 | find / -name “*.txt”
第一个就是,如图:
11.8然后输入cat /home/flag.txt,得到flag
至此,第11题完成。
12.simple_js
题目如下:
12.1获取场景后:
12.2我们随便输入,进入页面,发现是一片空白,查看一下源代码;
12.3发现是由JavaScript写的,那么很明显这题考的是我们代码审计,我们用vscode打开,如图:
12.4先把十六进制的数改为十进制:(这里我用的是python,别的也可以)
12.5剩下的部分,因为本人还没有系统学习过JavaScript,只能勉强看懂,无法讲清楚全部的细节,实在抱歉 …((/- -)/
这里推荐另一篇博客,讲得非常清楚---------点我点我-------------
简单来说,其实就是tab[2]会把tab[1]覆盖掉,导致tab[1]完全没用,输出永远是FAUX PASSWORD HAHA,所以我们让该函数的值为tab[1]而不是tab[2],看看会输出什么;
!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
var n=String.fromCharCode(55,56,54,79,115,69,114,116,107,49,50);
document.write(n);
</script>
</body>
</html>