前言:之前一直没有接触过web这方面的题,这次利用暑假时光好好学习,web真的是很有趣,虽然有的题很简单,但可以学习到很多知识,话不多说,做题。

view_source

XCTF(攻防世界)—新手web题Write Up_字符串

用老版火狐浏览器,直接查看源码即可。

XCTF(攻防世界)—新手web题Write Up_字符串_02

get_post

XCTF(攻防世界)—新手web题Write Up_ico_03

XCTF(攻防世界)—新手web题Write Up_php_04

利用火狐进行传参,即可得出flag。

robots

XCTF(攻防世界)—新手web题Write Up_ico_05

做这道题之前,了解一下robots协议,爬虫协议,robots.txt搜索引擎中访问网站的时候要查看的第一个文件,如果有这个文件,robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

了解robots协议后,做题就好做了,直接访问robots.txt文件。

XCTF(攻防世界)—新手web题Write Up_ico_06

给了一个PHP文件名,访问一下即可得出flag

XCTF(攻防世界)—新手web题Write Up_web题_07

backup

XCTF(攻防世界)—新手web题Write Up_web题_08

XCTF(攻防世界)—新手web题Write Up_web题_09

不知道,百度百科一下

XCTF(攻防世界)—新手web题Write Up_字符串_10

那加上后缀名即​​http://111.198.29.45:47771/index.php.bak​​再访问一下,即可得出flag。

cookie

XCTF(攻防世界)—新手web题Write Up_txt文件_11

用burp抓一下包看看XCTF(攻防世界)—新手web题Write Up_ico_12

添加后缀名XCTF(攻防世界)—新手web题Write Up_ico_13

查看HTTP响应,即可得出flag

XCTF(攻防世界)—新手web题Write Up_php_14

disabled_button

XCTF(攻防世界)—新手web题Write Up_php_15

XCTF(攻防世界)—新手web题Write Up_ico_16

根据提示,将disabled删除即可点出flag

webshell

XCTF(攻防世界)—新手web题Write Up_字符串_17

XCTF(攻防世界)—新手web题Write Up_web题_18

一句话,用菜刀进行连接

XCTF(攻防世界)—新手web题Write Up_txt文件_19

连接成功,即可得出flag

XCTF(攻防世界)—新手web题Write Up_字符串_20

simple_php

XCTF(攻防世界)—新手web题Write Up_web题_21

<?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;
}
?>

is_numeric() 函数用于检测变量是否为数字或数字字符串。

代码很好理解,传入对应的参数即可得出flag

http://111.198.29.45:52319/?a=a

即可得出XCTF(攻防世界)—新手web题Write Up_web题_22

http://111.198.29.45:52319/?b=1236b

即可得出XCTF(攻防世界)—新手web题Write Up_web题_23

拼接一下,即可得出flag

command_execution(命令执行)

XCTF(攻防世界)—新手web题Write Up_php_24

做题之前,要先了解一下ping功能,waf等。

​ping命令的使用方法及功能​

WAF主要防护的是来自对网站源站的动态数据攻击,可防护的攻击类型包括SQL注入、XSS攻击、CSRF攻击、恶意爬虫、扫描器、远程文件包含等攻击,相当于防火墙。

​命令执行详解​

常见的命令执行

command1 & command2 :先执行command2后执行command1
command1 && command2 :先执行command1后执行command2
command1 | command2 :只执行command2
command1 || command2 :command1执行失败,再执行command2(若command1执行成功,就不再执行command2)

除此之外,我们还要了解一些常用的Linux命令。​​常用 Linux 命令​

了解之后,我们便开始做题。

首先ping一下本地即​​127.0.0.1​

XCTF(攻防世界)—新手web题Write Up_web题_25

ping通本地后,发现传输三个数据包,接下来就用到我们学到的Linux基本命令

查看一下,三个数据包中是否有flag.txt

输入命令​​127.0.0.1 & find / -name flag.txt​

XCTF(攻防世界)—新手web题Write Up_txt文件_26

果然有,再输入命令​​127.0.0.1 | cat /home/flag.txt​​查看flag.txt文件,即可得出flag。

这里得了解一下cat命令,用来查看文件内容

XCTF(攻防世界)—新手web题Write Up_ico_27

XCTF(攻防世界)—新手web题Write Up_web题_28

weak_auth( 弱身份验证 )

XCTF(攻防世界)—新手web题Write Up_ico_29

XCTF(攻防世界)—新手web题Write Up_txt文件_30

试试最常用的​​admin 123456​​组合,竟然爆出了flag,真的是弱口令,不过查了其他方法,用爆破的方法也可以做出了,这里记录一下爆破过程。

先在GitHub上下载弱口令字典,用burpsuite进行爆破

XCTF(攻防世界)—新手web题Write Up_web题_31

用admin作为账号,试试登陆XCTF(攻防世界)—新手web题Write Up_字符串_32

看来账号就是admin,那么就只爆破密码就可以了

密码随便输入一个,抓一下包

XCTF(攻防世界)—新手web题Write Up_ico_33

XCTF(攻防世界)—新手web题Write Up_字符串_34

将密码设置为变量

载入字典

XCTF(攻防世界)—新手web题Write Up_txt文件_35

XCTF(攻防世界)—新手web题Write Up_php_36

发现到​​123456​​时,长度不同,所以密码即为​​123456​​,登陆一下即可得出flag

xff_referer

XCTF(攻防世界)—新手web题Write Up_字符串_37

XCTF(攻防世界)—新手web题Write Up_php_38

在此之前,我们需要了解下

xff——伪造IP地址来源
格式为:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
referer——伪造来源浏览器

​伪造XFF头绕过服务器IP过滤​

了解之后,便能够做题了

XCTF(攻防世界)—新手web题Write Up_php_39

抓包,根据提示修改xff

XCTF(攻防世界)—新手web题Write Up_ico_40

此时页面显示​​必须来自https://www.google.com​

根据提示,伪造来源服务器,即可得出flag

XCTF(攻防世界)—新手web题Write Up_字符串_41

simple_js

XCTF(攻防世界)—新手web题Write Up_字符串_42

打开之后,直接查看源代码,发现一串JS代码

 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) );

要做这道题就得看懂JS代码表达的意思,首先来了解代码中出现的一些方法

split() 方法用于把一个字符串分割成字符串数组。
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
prompt()方法用于显示可提示用户进行输入的对话框。

XCTF(攻防世界)—新手web题Write Up_字符串_43

了解之后,便可以观察代码了XCTF(攻防世界)—新手web题Write Up_txt文件_44

这一部分代码分为两个循环,但是仔细观察的话,第一个循环是将前五个Unicode 值,然后返回一个字符串,写一个简单的python脚本验证下

XCTF(攻防世界)—新手web题Write Up_字符串_45

后一个循环功能是一样的,只不过是把后面的Unicode 值,返回成字符串。

XCTF(攻防世界)—新手web题Write Up_web题_46

返回的pass为XCTF(攻防世界)—新手web题Write Up_ico_47

即不管我们输入什么,最终显示都是这个,所以这个是假的密码,那么真正的密码应该就是

XCTF(攻防世界)—新手web题Write Up_web题_48

十六进制转化为文本字符

XCTF(攻防世界)—新手web题Write Up_php_49

再用简单的python跑一下,即可得出flag

XCTF(攻防世界)—新手web题Write Up_php_50

题虽然不是太难,但是可以学习到很多知识,接下来得快点学习python以写脚本用,方便做题。