之前参加过信息安全铁人三项赛和全国大学生Web安全测试,现在总结下知识点和收获。
常见的分类
常见的web漏洞,诸如SQL注入、XSS、文件包含、代码执行、上传等漏洞
密码学:包括古典加密技术、现代加密技术
MISC安全杂项:流量包分析
隐写术: 图片隐写
常用工具
Burpsuite,HTTP抓包,截包,伪装用的
firefox_firebug
firefox_modifyheaders,修改HTTP头用的
御剑,主要用来对Web系统的后台进行扫描,他自带一些对PHP、ASP、JSP等项目的后台目录进行扫描的字典(其实就是系统后台文件可能有哪些路径,把可能情况都列举出来,放在一个文件里,然后逐个尝试进行HTTP请求)
Sqlmap,sql暴力破解用的
中国菜刀,找出后台敏感文件用的,能获取后台的文件目录
CTF中的web安全方面
1. 直接查看源码
程序员可能把信息写在注释里,这是最简单的。
2. 查看、修改或者添加HTTP请求头响应头
需要对HTTP协议的请求头、响应头的字段有了解;如何截包修改并发送;还有HTTP状态码
3. 302跳转的中转网页有信息
也需要截包工具,我用的是burpsuite
4. 查看开发者工具的控制台
开发者工具控制台对从事Web方面的工作的人很重要
5. javascript代码,包括js加解密
6. 使用burpsuite拦截
7. robots.txt
什么是robots.txt?为了不让搜索引擎索引网站的后台页面或其它隐私页面,我们将这些路径在robots.txt文件中禁用了。但矛盾的是,robots.txt文件任何人都可以访问,包括黑客。为了防搜索引擎,我们把隐私泄露给了黑客。
robots.txt干什么的?robots.txt基本上每个网站都用,而且放到了网站的根目录下,任何人都可以直接输入路径打开并查看里面的内容,如:http://www.baidu.com/robots.txt。 该文件用于告诉搜索引擎,哪些页面可以去抓取,哪些页面不要抓取。一般而言,搜索引擎都会遵循这个规律。
robots.txt如何使用?在网站根目录下创建一个文件,取名robots.txt,文件名必须是这个!然后设置里面的规则。比如我有一个OA办公系统,我要设置不允许任何搜索引擎收录本站。robots.txt中就设置如下两行即可。
|
|
如果要限制不让搜索引擎访问我们后台admin目录,则规则改为:
robots.txt如何防黑客?像上面的例子中,我们为了让搜索引擎不要收录admin页面而在robots.txt里面做了限制规则。但是这个robots.txt页面,谁都可以看,于是黑客就可以比较清楚的了解网站的结构,比如admin目录啊、include目录啊等等。
有没有办法既可以使用robots.txt的屏蔽搜索引擎访问的功能,又不泄露后台地址和隐私目录的办法呢?有,那就是使用星号 *
作为通配符。举例如下:
复制代码代码如下:
这个设置,禁止所有的搜索引擎索引根目录下a开头的目录。当然如果你后台的目录是admin,还是有可以被人猜到,但如果你再把admin改为admmm呢?还有会谁能知道?总结下,为了不让搜索引擎索引网站的后台目录或其它隐私目录,我们将这些路径在robots.txt文件中禁用了。又为了让robots.txt中的内容不泄露网站的后台和隐私,我们使用星号 *
来修改设置项。最后为了不让黑客猜到真实的路径,我们可以把这些敏感的目录进行非常规的重命名。
8. PHP、ASP代码审计
PHP、ASP都是弱类型语言,语言本身比强类型语言不安全。
9. SQL注入是最大的隐患
可以使用sqlmap,也可以自己拼凑字符串
在对MySQL进行注入的时候,经常拼接如下的语句尝试从数据库获取信息
|
|
在一些老系统中,文件编码、数据库字符集都可能是gbk,这时候系统可能存在宽字节注入的风险,比如可以这么构造
|
|
10. 简单的脚本使用
基于时间的盲注和基于布尔值的盲注都需要自己写脚本,python脚本或者java脚本
11. 后台登录
包括弱密码(即常见的密码,指的是admin、root等常见密码)
12. 代码逆向
设计的内容较多,我不怎么会。应该和Java的反编译类似吧
13. 上传绕过
譬如双后缀文件上传,“一句话木马”
14. hash函数
比如md5、sha1都是hash函数
15. 备份文件
php的备份文件。比如index.php普遍意义上的首页,输入域名不一定会显示。 它的备份文件则为index.php~
或者 index.php.bak
vim的备份文件。比如index.php
在被vim编辑的过程中有.index.php.swp
文件生成
Mac OS系统下的.DS_Store
Tomcat远程部署的war包文件,所以应该把Tomcat webapps目录下的host-manages
manages
目录删掉,
16.验证码
我不太了解
17. cookie
包括伪造、修改cookie
18. MD5碰撞
碰撞指的是不同的内容进行加密却可能得到相同的加密后结果
PHP中的语言漏洞
$_GET 和 $_POST
http://ctf4.shiyanbar.com/web/false.php?name[]=a&password[]=b 如果 GET 参数中设置 name[]=a,那么 $_GET[‘name’] = [a],PHP 会把 []=a 当成数组传入, $_GET 会自动对参数调用 urldecode。
$_POST 同样存在此漏洞,提交的表单数据,user[]=admin,$_POST[‘user’] 得到的是 [‘admin’] 是一个数组。
php://filter
php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流。
常用padload
md5
|
|
这也是一道php代码审计题目,涉及的知识点有
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。参照这里
弱类型匹配和strcmp的数组get漏洞,其中 strcmp(数组,字符串)== 0
可以构造payload如下:
|
|
hash 比较的问题
0e 开头且后面都是数字会被当作科学计数法,也就是等于 0*10^xxx=0
。如果 md5 是以 0e 开头,在做比较的时候,可以用这种方法绕过。
|
|
如果要找出 0e 开头的 hash 碰撞,可以用如下代码
|
|