攻防世界web新手区
这篇文章仅仅记录我自己的学习的过程
1.view_source
题目描述:
打开链接后如下
此时按照题目右键查看源码失败,方法总比困难多
1.F12大法,调用查看器获得flag
2.view-source协议(用于查看源码跟右键的一个道理)
知道点:查看源码的方式F12,view-soure协议等方式
2. get_post
题目描述:
打开链接后,提示:以GET的方式提交a
构造payload: http://220.249.52.133:53132/?a=1(具体的url根据题目来),返回以下的页面
按要求构造payload:
执行得到flag:cyberpeace{faa1acfef1febffbaf4dbcbf169403ac}
知识点:Get和Post请求的使用
3.robots
题目描述:
打开链接是一个空页面,第一步当然是查看源码,其中提示flag不在这里,回来审题robots协议
robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。
百度了解什么是robots协议后我们会知道根目录下存在一个robots.txt文件,直接访问即可,会得到
再次访问图中的页面就能够得到flag:cyberpeace{21b297367f476a342adb7e0082d7ff4b}
当然还有更直接的方式就是直接爆破目录也可以实现,还有大佬直接盲猜robots.txt也可以得到想要的
知识点:robots协议
4.backup
题目描述:
打开链接
盲猜文件备份的后缀名.bak,.zip,.rar等等,当然还可以用工具对目录进行爆破得到一个名为index.php.bak的文件利用记事本进行查找flag:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}
知识点:备份文件的后缀名,以及相关工具的使用
5.COOKIE
题目描述:
页面提示
又到F12大法的时候,在网络的选项那边可以查看cookie的值(当然也可以bp抓包查看)
访问cookie.php页面
有是F12大法,在网络那里查看response(响应头)
知识点:cookie和其他消息头的查看
当然还有其他的查看方法,但是我个人觉得还F12方式比较方便
6.disabled_button
题目描述:
页面:
是真的不能按,第一步先查看源码,发现可疑的参数
了解html的会知道disabled参数导致了按钮的失效,修改(删除该参数)按钮就会恢复,得到flag:cyberpeace{d9cc22d739c5fd4c41d7bced867217e1}
知识点:HTML相关的知识
7.weak_auth
题目描述:
页面:
题目提示弱口令,当然给出一个登陆页面也一个考虑SQL注入,但是题目有提示,弱口令开始凭经验盲猜admin,123456,居然登陆成功得到flag:cyberpeace{9a95f35cd6b1ec21ab7b2ea7b3f8e748}
正确的应该使用bp爆破比较合理,利用爆破模块加载密码字典对其进行爆破得到用户名和密码
知识点:常见弱口令,bp爆破模块的使用
8.command_execution
题目描述:
看到页面提示,脑袋里就出现127.0.0.1
调用系统命令来执行ping,但是由于不知道对方的系统是Linux还是windows,开始尝试,Linux中有个符号==;,可以用来连接两个命令,而在Windows中则不行:
dir命令可以用于列出当前目录下的文件(文件夹),windows和Linux都可以
构造payload:127.0.0.1;dir / 意思是列出根目录下的文件或文件夹,用来测试系统
结果发现十分熟悉的东西
这不就是Linux的目录嘛,再次构造payload:127.0.0.1; find / -name “flag.*”
访问该文件payload:127.0.0.1;cat /home/flag.txt==
得到flag:cyberpeace{711a32698cf0c04b2a3143e1e542e5c3}
补充一下相关的其他知识:
掌握有关命令执行的知识windows或linux下:
command1 && command2 先执行command1,如果为真,再执行command2
command1 | command2 将command1的结果作为输入给command2
command1 & command2 先执行command2后执行command1
command1 || command2 先执行command1,如果为假,再执行command2
命令执行漏洞(| || & && 称为管道符)
由上面可以知道==&&==也可以实现命令执行
知识点:Linux和Windows的操作命令
9.simple_php
题目描述:
页面
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];//get得到a的参数值
$b=@$_GET['b'];//同上
if($a==0 and $a){//判断$a弱等于0同时又不为整数0
echo $flag1;
}
if(is_numeric($b)){//判断$b是不是数字或者数字字符串
exit();
}
if($b>1234){//$b的值弱大于1234
echo $flag2;
}
?>
好家伙,简单的PHP审计题目,有PHP相关知识的话,很容易就会构造出payload:http://220.249.52.133:51701/?a=aaa&b=12345a如果不知道的话,可以参考PHP松散比较表,总得来说当遇到整数和字符串比较的时候会将字符串转换,若以非数字开头的话,就强制转换为0,若是数字开头的话,就转换为数字直到遇到第一个非数字.
知识点:PHP松散比较
参考链接:https://www.php.net/manual/zh/types.comparisons.php
10.xff_referer
题目描述:
页面:
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案中正式提出。
当今多数缓存服务器的用户为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网。有些情况下,这些代理服务器是透明代理,用户甚至不知道自己正在使用代理上网。
如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址,而非连接发起的原始IP地址,这样的代理服务器实际上充当了匿名服务提供者的角色,如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此,XFF的有效使用应该保证代理服务器是可信的,比如可以通过创建可信服务器白名单的方式。
这一HTTP头一般格式如下:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
在BP中添加X-Forwarded-For字段,发送
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
在bp里添加Referer字段,发送,得到flag:cyberpeace{2586078f451a54c6d5cd8c28258763e0}
知识点:http头的相关字段作用
11.Webshell
题目描述:
页面:
一句话木马,密码是shell,中国蚁剑直接连接后台在后台目录查找flag,会发现一个flag.txt的文件,打开即可
知识点:一句话木马和后台管理工具的是使用
12.simple_js
题目描述:
页面:
两个页面,没啥用,查看源码,
<script type="text/javascript">
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;
}
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"));//这个是重点
h = window.prompt('Enter password');
alert( dechiffre(h) );
</script>
一大串的代码,而最终其实只和上面注释的内容有关,一开始我也怀疑过这一串16进制的东西,可是觉得没有那么简单,于是就开始阅读js代码,无奈知识不够,而且代码很烦,参考大佬的wp,上面的代码整理后如下:
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;
}
补充一下String.fromCharCode()函数用法:
就逻辑上可见它只是将内容为逗号分隔的数字的字符串转成相应编码的字符串。将代码修改,用可疑字符串代替函数中的常量pass,得到的整个网页代码,在保存为网页打开得到flag
如果要硬解该题目也是可以,直接将可疑字符串用python输入,转换为列表得到是10进制的数字,然后用chr()函数还原为字符串也可以得到flag
知识点:js代码的阅读
*如有不足之处,请告知,转载请表明出处