Web题目分类:
1.源码获取,扫描,弱密码爆破,js绕过
2.Php代码审计,弱类型比较
3.文件上传,文件包含
4.序列化与反序列化
5.Sql注入
6.Xss跨站脚本攻击
Web的基础知识
1.了解HTTP协议:
HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口。
1.请求方式:
大致由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
HTTP请求消息Response:
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文
Robots协议:
也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
在网站根目录下放一个robots.txt文本文件,有时候它会声明此网站不可以被git。
实战:攻防世界:robots
查看源代码,说的信息也没有用,不过这道题是关于robots协议的,因此
我们直接查看网站根目录下的robots.txt文件;
得到一个flag的隐藏文件,接着继续访问flag文件;得到flag:
我觉得这道题的解法主要是想到robots协议要想到它在网站根目录下的文件。
Cookie:
Cookie 可以翻译为“小甜品,小饼干” , Cookie就是服务器暂存房子啊你的电脑里的资料(.txt文件),通过在Http传输中的状态好让服务器用来辨认你的计算机。当你在浏览器网站的时候,Web服务器送一小小资料放在你的计算机上,Cookie会帮你在网站上所打的文字或是一些选择都记录下来。
当下次你再访问同一个网站,Web服务器会先看看有没有它上次访问Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
属性值:
一个Cookie包含以下信息:
1)Cookie名称,Cookie名称必须使用只能用在URL中的字符,一般用字母及数字,不能包含特殊字符,如有特殊字符想要转码。如js操作cookie的时候可以使用escape()对名称转码。
2)Cookie值,Cookie值同理Cookie的名称,可以进行转码和加密。
3)Expires,过期日期,一个GMT格式的时间,当过了这个日期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失。
4)Path,一个路径,在这个路径下面的页面才可以访问该Cookie,一般设为“/”,以表示同一个站点的所有页面都可以访问这个Cookie。
5)Domain,子域,指定在该子域下才可以访问Cookie,例如要让Cookie在a.test.com下可以访问,但在b.test.com下不能访问,则可将domain设置成a.test.com。
6)Secure,安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问,如果设置了Secure(没有值),则只有当使用https协议连接时cookie才可以被页面访问。
7)HttpOnly,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息。
实战:攻防世界:cookie
这道题关于cookie文件题;题目提示了信息!打开题目发现没有啥有用信息
发现数据包含cookie文件,即在浏览器再打开,然后在抓包看看cookie文件里面是否含有flag:
Session(对象):
服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据为用户服务。
Session用于保存每个用户的专用信息,每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右)。
第二章源码获取,扫描,弱密码爆破
1.源码获取,git
由于现在当前大量开发人员使用git进行版本控制,对站点自动部署。
如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,还原重建工程源代码。Git信息泄露的危害很大,渗透测试人员、攻击者,可直接从源码获取敏感配置信息(如:邮箱,数据库),也可以进一步审计代码,挖掘文件传、SQL注射等安全漏洞。命令: python2 GitHack.py -u http://www.hoolai.com/.git/
2.扫描
有些网站的隐藏的文件,
页面并不是能够发现,所以需要我们利用一些扫描工具进行扫描,得到隐藏的页面,得到关键的信息。
常用的扫描软件:御剑,dirserach御剑在window下运用,而dirsearch需要在linux下进行扫描。
Dirsearch扫描命令格式:./dirsearch –u 目标网址 –e例如:./dirsearch –u htttps://www.baidu.com –e
3.弱密码爆破:
在有些网站的登陆界面中,我们希望拿到它的管理员权限,但是我们并不知它的密码,但是知道的是它的密码的类型并不复杂,我们可以对密码进行弱密码爆破。
原理:穷举爆破
工具:burpsuit
成功与否:密码本是否强大,掌握的信息是否足够。
实战:攻防世界:weak_auth
根据题意,应该是让我们找出密码:
找密码我们直接用burpsuite抓包然后进行爆破,一般密码为六位数的数字
第三节:php代码审计
这部分内容,是以后漏洞挖掘的基础,学习PHP的各种函数以及漏洞,绕过函数的检验,得到flag。
需要资料:php中文手册
1.Extract变量覆盖:
2.Php弱类型比较:
3.二次url编码绕过:
4.哈希绕过:
5.正则绕过:
1.Extract变量覆盖:
int extract( array &$array[, int $flags = EXTR_OVERWRITE[, string $prefix = NULL]] )
本函数用来将变量从数组中导入到当前的符号表中。
检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。它有4个参数,默认会将变量覆盖。
当这个变量是用get方式从用户的输入获取时,就会出现变量覆盖的漏洞。
例如:题目:bugKuctf extract变量覆盖:
2.Php弱类型比较
php中有两种比较的符号 == 与 ===
题目:攻防世界 simple_php:
3.二次url编码绕过:
URL编码只是简单的在特殊字符传输时各个字节前加上%,对应的url编码,我们可以看url编码表
https://baike.baidu.com/item/URL编码/3703727?fr=aladdin
进行url编码的原因:
https://www.cnblogs.com/jerrysion/p/5522673.html
在服务器接受我们的url请求时,会自动的对我们传输的url进行url decode(解码),所以在某些题目我们需要进行的是对有些字符进行url的二次编码
例如:bugkuctf:urldecode 二次编码绕过:
4.哈希绕过
哈希指的是一系列的加密函数,例如:MD5加密,sha-1等等,他们有共同的特点儿:
1.不可逆
2.输出值固定
3.抗强碰撞:也就是无法找到两个数具有同一个加密结果
绕过方法:1.哈希无法对数组加密,会返回false
2.哈希函数如果是加密后为0e,在弱类型比较时,php会认为两个值是相等的。
题目:南邮ctf: md5 collision:
5.正则匹配绕过:
正则匹配:匹配的是字串和目标串的匹配关系,运用匹配,可是实现对目标串的有目的的筛选。
Php中的函数:
Eregi:不区分大小写的正则表达式匹配
Ereg:区分大小写的正则表达式匹配
特殊符号的匹配:
第四节:文件上传,文件包含
题目类型:
1.本地js检验
2.黑名单检验
3.白名单
4.内容检验
5.竞争上传
1.本地js校验:
有少量的题目在进行上传校验时,是以弹窗的形式出现报错的,那么它极有可能进行的是本地的js的校验,绕过方法之一是将它的本地的js给关闭了,不让它进行检验,那么就有可能成功上传。
禁止本地js的火狐插件:
2.黑名单检验:
在文件上传时,检验的方式很有可能是对某些文件类型进行了限制,例如不允许上传的类型有
Php,asp,jsp,txt,xml等等,但是,这种黑名单的检验往往是最薄弱的,总有你想象不到的文件类型在上传,而且被正确的解析。
绕过:总有一些文件名称是可以上传的,例如PHP版本众多,可以尝试php5,php6,php7,phps,等等。
3.白名单:
大多数的上传的检验方式一般都是白名单,也就是只允许某些文件类型的上传,例如只允许上传jpg文件。
绕过方法:1.最简单的方法是更改后缀名称,这并不会妨碍服务器对上传的php文件的解析,但是,一般这种只需要更改后缀名称的题目是不太可能的。
2.%00截断。适用于某些php的版本与情形,它存在00截断漏洞。也就是当服务器读取文件名称时,读取到0x00,它会默认为是文件名的终止,但实际上后面还有内容。
注意:这里的%00截断并不是直接对文件名称后直接加入%00,而是在它的十六进制展开后进行0x00截断
4.内容校验:
大多数时不仅仅是对文件的名称进行检验,而且对文件的内容也会进行检验,一旦发现不是图片的内容,就会显示报错,导致上传其他文件失败。
绕过的方法:在文件内容里面直接加入GIF89a,即可。
测试:
5.竞争上传:
有些网站的上传机制是只要是不符合它的上传的类型的文件,服务器就会以一个极快的速度将它删除,但是有一个本质的缺陷是确实是上传成功的,我们可以用一直上传的思路,一直飞快的上传,一边疯狂的请求,最终,总有几个来不及删除就会被我们访问到。
工具:burpsuit
文件包含
1.本地包含
2.远程文件包含
相关函数:
Include()
Include_once()
require()
Rquire_once()