web作为CTF中的一类大题目,涉及的面非常广,前面具体也说过一些类别的题目。
https://blog.csdn.net/iamsongyu/article/details/82968532
涉及的知识也多种多样
常用的http抓包改包需要知道的知识有
http响应流程在http协议中已经讲过了
背景 https://blog.csdn.net/iamsongyu/article/details/82774906
详解 https://blog.csdn.net/iamsongyu/article/details/82797208
关键技术 https://blog.csdn.net/iamsongyu/article/details/82797330
Burpsuit是经常使用的工具 使用方法前面也说过
https://blog.csdn.net/iamsongyu/article/details/82989478
web前端
web后端
数据库和服务器
常见web漏洞
我们也在ctf - web简介里说过,这里就粘贴过来
关于练习平台什么的就看看这里吧 https://blog.csdn.net/iamsongyu/article/details/82968532
入门题目:
详细的有关请看我前面发的一些博文
//接下来要发一些当日学习的知识点 习惯使用//注释了.....老毛病
xxe实体漏洞
要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
1,内部实体声明: ex:
完整实例:
]>
&writer;©right;
2,外部实体声明:
完整实例:
]>
&writer;©right;
大概的意思就是根据文档的格式写命令,然后再执行。
1,何为XXE?
答: xxe也就是xml外部实体注入。也就是上文中加粗的那一部分。
2,怎样构建外部实体注入?
方式一:直接通过DTD外部实体声明
XML内容
方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明
XML内容:
DTD文件内容:
方式三:通过DTD外部实体声明引入外部实体声明
好像有点拗口,其实意思就是先写一个外部实体声明,然后引用的是在攻击者服务器上面的外部实体声明
具体看例子,XML内容
dtd文件内容:
3,支持的协议有哪些?
不同程序支持的协议如下图:
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,
SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统
)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获
取网页文本内容,加载指定地址的图片,下载等等。
可能上面的语言对于一些小白白来说难以理解,下面是一些我的理解:
html,php,asp,jsp 具有这些文件后缀的文件通常储存在web服务器(网站服务器)中,而且web服务器都具有独立ip
网站访问大致步骤:
用户在地址栏输入网址 --》 向目标网站发送请求 --》 目标网站接受请求并在服务器端验证请求是否合法,然后返回用户所需要的
页面 --》用户接收页面并在浏览器中显示
【此处的请求默认为www.xxx.com/a.php?image=(地址)】
那么产生SSRF漏洞的环节在哪里呢?目标网站接受请求后在服务器端验证请求是否合法
产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致可以从其他服务器的获取一定
量的数据,例如:
www.xxx.com/a.php?image=http://www.abc.com/1.jpg
<段落>如果我们将http://www.abc.com/1.jpg换为与该服务器相连的内网服务器地址会产生什么效果呢?如果存在该内网地址就会返回1xx 2xx
之类的状态码,不存在就会其他的状态码
终极简析: SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现在这个请求是合法的,然后服务器以他的身份
来访问其他服务器的资源。
方便对象的存储和传输
把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
$a =array('time'=>'fdsg','user' => 5,'pass'=>false);
$c = serialize($a);
print($c);
?>
a:3:{s:4:"time";s:4:"fdsg";s:4:"user";i:5;s:4:"pass";b:0;}
a 代表数组 3代表个数
s表示字符串 4个字符 变量名 四个字符串的数值
i表示数字 b代表布尔
下面的这个例子引用 https://www.cnblogs.com/yuxb/p/6792413.html
1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果;
$arr=array();
$arr['name']='张三';
$arr['age']='22';
$arr['sex']='男';
$arr['phone']='123456789';
$arr['address']='上海市浦东新区';
var_dump($arr);
输出结果:
array(5) {
["name"]=> string(6) "张三"
["age"]=> string(2) "22"
["sex"]=> string(3) "男"
["phone"]=> string(9) "123456789"
["address"]=> string(21) "上海市浦东新区"
}
2.将$arr数组进行序列化赋值给$info字符串,并在浏览器中输出查看结果;
$info=serialize($arr);
var_dump($info);
输出结果:
string(140) "a:5:{s:4:"name";s:6:"张三";s:3:"age";s:2:"22";s:3:"sex";s:3:"男";s:5:"phone";s:9:"123456789";s:7:"address";s:21:"上海市浦东新区";}"