robots协议(robots.txt)

以下是从别的文章复制过来的介绍:

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
————————————————

功能

Robots协议用来告知搜索引擎哪些页面能被抓取,哪些页面不能被抓取;可以屏蔽一些网站中比较大的文件,如:图片,音乐,视频等,节省服务器带宽;可以屏蔽站点的一些死链接。方便搜索引擎抓取网站内容;设置网站地图连接,方便引导蜘蛛爬取页面。

我想会不会有人在网站根目录下写木马,写在robot文件里蒙混过关?

文件写法

User-agent: * 这里的代表的所有的搜索引擎种类,是一个通配符

Disallow: /admin/ 这里定义是禁止爬寻admin目录下面的目录

Disallow: /require/ 这里定义是禁止爬寻require目录下面的目录

Disallow: /ABC/ 这里定义是禁止爬寻ABC目录下面的目录

Disallow: /cgi-bin/*.htm 禁止访问/cgi-bin/目录下的所有以”.htm”为后缀的URL(包含子目录)。

Disallow: /? 禁止访问网站中所有包含问号 (?) 的网址

Disallow: /.jpg$ 禁止抓取网页所有的.jpg格式的图片

Disallow:/ab/adc.html 禁止爬取ab文件夹下面的adc.html文件。

Allow: /cgi-bin/ 这里定义是允许爬寻cgi-bin目录下面的目录

Allow: /tmp 这里定义是允许爬寻tmp的整个目录

Allow: .htm$ 仅允许访问以”.htm”为后缀的URL。

Allow: .gif$ 允许抓取网页和gif格式图片

Sitemap: 网站地图 告诉爬虫这个页面是网站地图
————————————————
sitemap:

Sitemap(即站点地图)就是您网站上各网页的列表。创建并提交Sitemap有助于百度发现并了解您网站上的所有网页。您还可以使用Sitemap提供有关您网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供百度Spider参考。

百度对已提交的数据,不保证一定会抓取及索引所有网址。但是,我们会使用Sitemap中的数据来了解网站的结构等信息,这样可以帮助我们改进抓取策略,并在日后能更好地对网站进行抓取。
————————————————

xpath注入

xpath注入针对xml文件,利用xpath解析器的特性,在URL和表单等地方附上payload(恶意的xpath查询码)。xpath注入的目的是获得权限信息的访问权并且修改权限信息,攻击者通过xpath查询能得到xml文档的完整内容。

xpath攻击特点:
1.xpath是一种标准语言,使用xpath但是没有严格过滤输入的web应用极有可能存在漏洞。
2.xpath几乎可以引用xml文档的所有内容,并且引用没有访问限制。

xpath注入原理:
xpath注入和sql注入原理很像,在查询中闭合语句或者是使用逻辑符号运算绕过等实现恶意查询。数据库有sql语句进行增删改查,当数据使用文件保存,比如xml文件,对xml文件的增删改查使用的是xpath语句。因此他们之间的共性可以大致推断。

在XPath中,XML文档被作为节点树对待,XPath中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。 文档的根节点即是文档结点;对应属性有属性结点,元素有元素结点。

  • element (元素)
  • attribute (属性)
  • text (文本)
  • namespace (命名空间)
  • processing-instruction (处理指令)
  • comment (注释)
  • root (根节点)
xpath规则
通配符

php反序列化学习补充

是时候重新回到学习状态。

继续学习php的魔术方法,很多都是当某个操作失败时(或者调用不存在的东西)触发这些魔术方法,也有某些操作会触发魔术方法,这是默认的,如果没有配置好,攻击者可以利用魔术方法来设计攻击方法。

下面是上一篇关于php的魔术方法:

触发:unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法:

__construct(): //构造函数,当对象new的时候会自动调用

__destruct()://析构函数当对象被销毁时会被自动调用

__wakeup(): //unserialize()时会被自动调用

__invoke(): //当尝试以调用函数的方法调用一个对象时,会被自动调用

__call(): //在对象上下文中调用不可访问的方法时触发

__callStatci(): //在静态上下文中调用不可访问的方法时触发

__get(): //用于从不可访问的属性读取数据

__set(): //用于将数据写入不可访问的属性

__isset(): //在不可访问的属性上调用isset()或empty()触发

__unset(): //在不可访问的属性上使用unset()时触发

__toString(): //把类当作字符串使用时触发

__sleep(): //serialize()函数会检查类中是否存在一个魔术方法__sleep() 如果存在,该方法会被优先调用


对象变量属性:

public(公共的):在本类内部、外部类、子类都可以访问

protect(受保护的):只有本类或子类或父类中可以访问

private(私人的):只有本类内部可以使用

序列化数据显示:

private属性序列化的时候格式是%00类名%00成员名

protect属性序列化的时候格式是%00*%00成员名


从序列化的字符串,可以判断,序列化前对象变量的属性,如下,当变量属性是public时,序列化显示正常:

图 对象以及对象属性序列化前

序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;}
如果对象属性是private,则会变成%00类名%00成员名,注意到%00会被识别为类似c语言的null,序列化之后存在但是看不见,效果如下:
序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;s:9(7+2,2是两个%00):”testage”;} //testage就是类名加成员名。经常在序列化后要编码,因为不编码的话%00会操作不到。
那么,如果属性是protect的话就会是%00*%00,序列化之后如下:
序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;s:9:”testage”;s:2:”29″;s:6:”*sex”:s:3:”man”;} //高亮处S为6是因为两个%00和*也算进去了。

反序列化在很多ctf比赛上有,依稀记得很久之前某次面试面试官让我手撕一个对象序列化之后的字符串,当时要是早点学就好了。反序列化除了利用逻辑漏洞,还可以利用语言漏洞,比如php的漏洞。在某道ctf题目中,需要对_wakeup()进行绕过,具体使用CVE-2016-7124,利用原理是构造payload中,修改变量个数超过正确个数,注意要进行urlencode编码。


PHP原生类学习:

每个魔术方法的原生类不一样,起到的效果不一样。

phar

字符串逃逸

session


HTTP-crlf注入(没卵用)

crlf是分隔符。

HTTP中状态行和首部每一行以crlf(回车/换行)结束,而首部和主体会空隔一行,也就是两个crlf。

crlf注入漏洞产生的原因是,与sql注入类似,没有严格过滤输入的数据,攻击者可以构造恶意payload到请求行或者首部的字段中,其中带有恶意的crlf,之后带回的数据会在http响应头中输出。
在网上,crlf注入攻击又称为HTTP响应拆分漏洞(HTTP Response Splitting)。

CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a)。
在http报文中,%0d%0a出现,将修改后的请求包提交给服务器端,查看服务器端的响应。发现响应首部中多了个Set-Cookie字段。这就证实了该系统存在CRLF注入漏洞。
CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。

%c4%8d%c4%8a就是换行回车的意思,类似于%0d%0a,是URL编码
这个漏洞也就是说攻击者可以控制http响应头,也就是攻击者可以使用自己设置的cookie来绕过验证。

在http请求头部如GET %0a%0d Set-Cookiexxxxx ,如果存在漏洞,响应头会出现Set-Cookie;
如果在http请求头 插入 %0a%0d%0a%0d 也就是两个换行符,相当于让浏览器识别为头部和主体,如果漏洞存在,可以插入XSS的payload。;
浏览器为了防止xss,加入了一个策略,当url中含有xss特征就会过滤掉,这个过滤器用户无法关闭,但是通过crlf漏洞就可以实现关闭过滤器,数据包中 http 头含有X-XSS-Protection 并且值为 0 的时候,浏览器才不会开启 filter。所以可以 %0a X-XSS-Protection:0 (未url编码)

最常见的两种情况是使用输入参数创建 Cookie和 302 跳转 location 处

防御

1、安装waf
2、对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。在将数据传送到http响应头之前,删除所有的换行符。

——9.22补充—–

下面用于手工测试该漏洞的payload

1.%0aSet-cookie:JSPSESSID%3Ddrops

2.url=%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>/

CRLFuzz:https://github.com/dwisiswant0/crlfuzz/releases //该工具用于检测CRLF漏洞


web组件-wordpress-pingback

wordpress中的pingback和trackback用来提醒作者文章被转载。

但是攻击者可能会利用pingback功能去造成资源耗尽。

pingback目录在站点目录的xmlrpc.php文件