view source
提示:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
根据提示我们可以试着查看一下源代码,却发现点击鼠标右键无效。 那么我们可以尝试其他查看网页源代码的方法。
查看网页源代码有下列五种方法: 1.鼠标右击然后直接查看源代码 2.快捷键 Ctrl+U查看源代码 3.在地址栏上加上view-soure 如:view-soure:https://www.baidu.com 4.火狐浏览器—更多工具—页面源代码 5.F12查看页面源代码
flag就在页面源代码里 注意:由于在攻防世界上每个人获取的靶机不同,所以得到的flag也不同哦,正确的flag需要自己动手查找。
robots
提示:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
我们可以先大概了解一下robots协议 Robots协议 简介:俗称君子协议,也叫robots.txt是一种存放于网站根目录下的ASCII编码的文本文件。 robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个网络蜘蛛(网络搜索引擎的漫游器)访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。 如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。 robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。
了解完robots协议后,根据提示我们先查看一下网页的robots.txt文件,看看里面有什么内容
直接在网址后面加上 /robots.txt 即可 注意:每个人的网址不同,下面是我的 http://111.210.241.224:53698/robots.txt 我们发现 f1ag_1s_h3re.php 意思是flag可能在这个文件中 但是robots里的文件不可自己爬取。不过我们可以手动打开。 直接在网址后面加上 /f1ag_1s_h3re.php 即可得到flag http://111.210.241.224:53698/f1ag_1s_h3re.php
backup
提示:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
先了解一下备份文件
常见备份文件后缀有:.bak 本题可以使用工具:御剑 御剑下载链接: 链接:https://pan.baidu.com/s/1s78p9lAzuIWq-SwOmOT4NA 提取码:mxnb
不使用扫描工具)
本题访问http://11.10.10.175:45589/index.php.bak后会下载一个文件,当成txt打开,flag就在里面啦
cookie
提示:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’ 先了解一下cookie的有关知识: Cookie是保存在客户端(我们自己的本地电脑)的纯文本文件。比如txt文件。当我们使用自己的电脑通过浏览器进行访问网页的时候,服务器就会生成一个证书并返回给我的浏览器并写入我们的本地电脑。这个证书就是cookie。一般来说cookie都是服务器端写入客户端的纯文本文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理。 使用burpsuite抓包: 需用到的工具:brupsuite 抓包: 然后我们在网址加上 /cookie.php 回车 再次抓包并action 发送到repeater然后go最后在response里查找flag
不使用burpsuite抓包: 1.在浏览器按下F12键打开开发者工具,刷新后,在存储一栏,可看到名为look-here的cookie的值为cookie.php(鼠标右键—检查) 2.在网址后面加上 /cookie.php ,提示查看http响应包(response),在网络一栏,可看到访问cookie.php的数据包 (响应头) 3.点击查看数据包,在消息头内可发现flag
disabled_button
提示:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
打开页面,发现按钮无法点击。 方法一: F12查看源码 发现input标签有个disable属性 disabled 属性规定应该禁用 input 元素。 被禁用的 input 元素既不可用,也不可点击。可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等)。然后,就需要通过 JavaScript 来删除 disabled 值,将 input 元素的值切换为可用。 删除源码中的disable属性,按钮即可点击,然后得到Flag。
按动按钮即可得到flag 快捷键 FN+F12(检查/开发者选项) 检查—编辑HTML(E)删掉 disable="" —检查/刷新即可 按下按钮可以得到flag
方法二: 审计from表单代码,使用hackbar,用post方式传递auth=flag,然后点击execute即可按动按钮,同样可以获得flag
hackbar下载:火狐浏览器—右上角三条杠—扩展和主题—寻找更多附加组件 —搜索hackbar—添加到firefox—右键检查即可看到hackbar
weak auth
提示:小宁写了一个登陆验证页面,随手就设了一个密码。 了解弱口令爆破,掌握爆破方法 1.随便输入下用户名和密码,提示要用admin用户登入,然后跳转到了check.php,查看下源代码提示要用字典。 要用admin 加上随便一个密码 登录 然后抓包 暴力破解 2.用burpsuite截下登录的数据包,把数据包发送到intruder爆破 3.设置爆破点为password 4.加载字典(load…) 5.开始攻击,查看响应包列表,发现密码为123456时,响应包的长度和别的不一样. 6.点进去查看响应包,获得flag 注:字典可以去百度下载(简单的弱口令字典就可以了) 不使用字典也可以(直接尝试0~99999999999)暴力破解,只不过要比较久 如果不会使用burp暴力破解的话可以去b站、csdn等搜教程(这里就不过多描述了)
simple php
提示:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 原理: 步骤: 简单审计下代码,发现需要以get的方式传入两个参数a和b。 php 类 型 比 较 表 https://www.php.net/manual/zh/types.comparisons.php 简单说: a参数的要求 a必须等于0且a为真 b参数的要求 b不能为数字且b大于1234 这道题的核心问题是理解PHP语言的弱类型 构造命令:http://111.198.29.45:45627/?a=00a&&b=12345s 或者:http://111.198.29.45:45627/index.php?a=’0’&b=12345s 访问即可得到flag
注:有些文字我直接使用图片的形式(不知道为什么打上去会乱码,本人菜鸡小白第一次写,不懂这是为啥会乱码,所以只能在word上写,然后放截图了,以后会改进。需要复制的话可以将图片在QQ上发送给自己,然后右击图片提取文件。)
get_post
提示:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗? 工具:firefox及其插件hackbar(在检查/开发者选项中打开) 知识补充: ? 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 { GET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据 } <用 GET 给后端传参的方法是:在?后跟变量名字,不同的变量之间用&隔开> 在 url 后添加/?a=1 即可发送 get 利用 hackbar 进行 POST 传参:复制 get 的 url,选择 postdata,填入 b=2,选择 execute。即 可发送 POST 请求 解题方法: 1.get传递直接在网址上构造传递a=1(构造?a=1)或者hackbar 2.Post传递勾选hackbar上的post data,用post方式传递b=2,点击excute 可获得flag
xff_referer
提示:X老师告诉小宁其实xff和referer是可以伪造的。 知识点: X-Forwarded-For(XFF)是用来识别通过均衡HTTP代理或负载方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案中正式提出。 HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。 X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
解题过程: 1.打开firefox和burp,使用burp对firefox进行代理拦截,在请求头添加X-Forwarded-For: 123.123.123.123,然后放包 2. 接着继续在请求头内添加Referer: https://www.google.com,可获得flag 看到这句话就知道应该是要使用 burp 抓包修改 ip 地址, 在请求中加入 X-Forwarded-For:123.123.123.123 得到响应,发现还要来自谷歌,想到 referer 添加 Referer: https://www.google.com,点击发送得到响应,从而得到最终 flag。 Flag:cyberpeace{b1acd0a82ad805f457be1baf9f9f9973}
Webshell(文件上传)
提示:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。(一句话木马) 打开题目链接(一句话木马) 知识点: webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。 顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作命令。webshell主要用于网站和服务器管理,由于其便利性和功能强大,被特别修改后的webshell也被部分人当作网站后门工具使用。
工具: firefox、hackbar、antsword/中国菜刀(两个类似) 方法一: 中国菜刀下载链接: 链接:https://pan.baidu.com/s/10lwD45TvXLOZ0GELD9XgkQ 提取码:mxnb antsword(蚁剑) 这个文件比较大,百度网盘需要开会员才可以上传大文件 有需要可以自行去csdn搜 antsword(蚁剑)下载安装 教程很多哦。 下面给出我用蚁剑的做题过程(中国菜刀类似) 1.直接提示给了php一句话,可以用菜刀或蚁剑连接,此处用蚁剑链接: 2.连接后在网站目录下发现了flag.txt文件,查看文件可获得flag 方法二: 可以使用hackbar,使用post方式传递shell=system(‘cat flag.txt’); 获得flag 1.访问http://111.200.241.244:59144/ 2.根据提示访问http://111.200.241.244:59144/index.php (此时已将一句话木马上传至服务器。可直接利用) 3.shell=phpinfo(); 4.shell=system(ls); 方法三: 盲猜flag.txt直接访问之
方法四: 使用hackbar或其他工具提交post数据: shell=system(“grep -r cyberpeace ./”); 或者 shell=system("find ./ -name flag -exec cat {} ;|grep 'cyberpeace 原本burp请求方法为get
command_execution(命令执行)
提示:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗 知识点: | 的作用为将前一个命令的结果传递给后一个命令作为输入 &&的作用是前一条命令执行成功时,才执行后一条命令
掌握命令拼接的方法 1.打开浏览器,在文本框内输入127.0.0.1 | find / -name “flag.txt” (将 | 替换成 & 或 && 都可以),查找flag所在位置,如图所示。 2.在文本框内输入 127.0.0.1 | cat /home/flag.txt 可得到flag 掌握有关命令执行的知识 windows 或 linux 下: command1 && command2 先执行 command1,如果为真,再执行 command2 command1 | command2 只执行 command2 command1 & command2 先执行 command2 后执行 command1 command1 || command2 先执行 command1,如果为假,再执行 command2 命令执行漏洞(| || & && 称为 管道符) 到上一级目录看看有啥 127.0.0.1 && ls …/ 127.0.0.1&&ls 获取当前目录 寻找“.txt”文件,输入命令 127.0.0.1 &&find / -name “*.txt”,发现了flag文件 Flag:cyberpeace{d4354cb3d5e6bf6829a449a64358fc93}
simple_js(代码审计)
提示:小宁发现了一个网页,但却一直输不对密码。 (Flag格式为 Cyberpeace{xxxxxxxxx} ) 查看源代码(代码审计) avascript的代码审计
方法一: 1.打开页面,查看源代码,可以发现js代码,如图所示。 2.进行代码审计,发现不论输入什么都会跳到假密码,真密码位于 fromCharCode 。 3. 先将字符串用python处理一下,得到数组[55,56,54,79,115,69,114,116,107,49,50],exp如下。 s="\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" print (s) 5.将得到的数字分别进行ascii处理,可得到字符串786OsErtk12,exp如下。 a = [55,56,54,79,115,69,114,116,107,49,50] c = “” for i in a: b = chr(i) c = c + b print? 阅读代码,逐步整理。 function dechiffre(pass_enc) { var pass = “70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65”; var tab = pass_enc.split(’,’); var tab2 = pass.split(’,’); var i, j, k, l = 0, m, n, o, p = “”; i = 0; j = tab.length; k = j + (l) + (n = 0); n = tab2.length; for (i = (o = 0); i < (k = j = n); i++) { o = tab[i - l]; p += String.fromCharCode((o = tab2[i])); if (i == 5) break; } for (i = (o = 0); i < (k = j = n); i++) { o = tab[i - l]; if (i > 5 && i < k - 1) p += String.fromCharCode((o = tab2[i])); } p += String.fromCharCode(tab2[17]); pass = p; return pass; } 去除无用变量得到: function dechiffre() { var pass = “70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65”; var tab2 = pass.split(’,’); var i, n, p = “”; n = tab2.length; for (i = 0; i < n; i++) { p += String.fromCharCode(tab2[i]); if (i == 5) break; } for (i = 0; i < n; i++) { if (i > 5 && i < n - 1) p += String.fromCharCode(tab2[i]); } p += String.fromCharCode(tab2[17]); return p; } 末尾并入循环得到: function dechiffre() { var pass = “70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65”; var tab2 = pass.split(’,’); var i; var p = “”; for (i = 0; i < tab2.length; i++) { p += String.fromCharCode(tab2[i]); } return p; } 就逻辑上可见它只是将内容为逗号分隔的数字的字符串转成相应编码的字符串。 将代码修改,用下方的可疑字符串代替函数中的常量,得到的整个网页代码是:
JS 保存为以HTML后缀的文件再用浏览器打开即可见结果。 1.按照页面回显结果和源码判断,不论输入任何密码,中都会跳转到错误密码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/604b652ab54a450e9a3ad25900539010.png) 这个字符串便是flag,通过提示 的flag格式我们知道 flag为:flag{786OsErtk12}
方法二: 查看网页源码 发现这段JS代码表示完全无论我们输入的什么内容,结果都是一样的,所以判断这段代码无用。 有用的是: String"fromCharCode"; 写python脚本进行转码即可: string = “\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” s = string.split(",") c = “” for i in s: i = chr(int(i)) c = c+i print? 786OsErtk12 split() 方法用于把一个字符串分割成字符串数组。 提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。 注意: split() 方法不改变原始字符串。 代码的功能是把一串用逗号分隔的数字按ASCII转成字符串 本段代码为16进制 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\x 规范flag格式,可得到Cyberpeace{786OsErtk12}
方法三: 方法四: Flag:Cyberpeace{786OsErtk12}
@总结
我是菜鸡小白,第一次写文章,如有不足之处,还请多多指教。
|