目录
读取:
写入:
(其中的读取和写入时我认为比较重要的,所以单独做成了目录,这里的读取和写入是指在进行sql注入的时候与本地文件进行的交互)
好久没发博客了。。。从这篇开始的小迪安全学习笔记就开始进入到漏洞模块了,这篇主要是讲一些与sql注入相关的思想,杂谈一些内容吧先。。
区分两个东西:
SRC:发现漏洞接即可
实战:发现漏洞之后,要根据这个漏洞获取一些相应的权限,如后台权限,甚至是网站权限,最后是提权,获取敏感信息,提供修复建议等等。
高危漏洞:sql注入,upload,文件包含,未授权访问,命令执行
中危漏洞:反序列化,逻辑漏洞
低危漏洞:目录遍历,文件读取,XSS跨站
CTF中web题一般考sql注入,文件上传,反序列化,代码执行,最后渗透测试的关键在于信息收集,(手工加工具都同样重要)。
目录遍历漏洞:其中有些目录不用自己猜,是可以用工具扫到的,其次扫的时候要注意看有没有狗,有狗不能扫否则会把你IP拉黑,目录遍历中的一个小心眼:可以先读这个网站首页的index.php文件,其中可能会有其他目录所在位置信息。
漏洞都是需要一些其他的拿到的信息去配合的
区分:
目录遍历漏洞:只读取文件,文件夹名,只能但是不能读取到文件内容。
文件读取漏洞:单个文件读取,不能读取文件夹里面的内容。
SQL注入
接下来有四种(都有)可能存在注入漏洞的场景:
www.example.com/index.php?id=1
www.example.com/?id=1
www.example.com/index.php?id=1&x=1
www.example.com/index.php
第一个是最正常的,第二个是有些php开发的网站默认首页就是index.php,第三个是多个传参,哪个可以注入注入哪个,第四个是post传参。
一些小常识:
1.一些注入工具(sqlmap)除了指定注入点外,一般默认就是在最后面进行注入。所以在这种个情况下,可以自己把要注入的参数放到最后面:
(.php?a=1&b=2)这种其实是可以互换参数位置的,页面会正常返回,如:(.php?b=2&a=1)。
2.数据库中的点( . )代表下一级,比如 security.user就代表: security数据库下的user表
5.0以上高版本
5.0以下低版本
原来在sql注入中信息收集同样重要,主要收集:
- 数据库名字 select database();
- 数据库版本 select version();
- 数据库用户 select user();
- 操作系统 select @@version_compile_os;
select user() 查询用户
root@localhost是权限最高的用户。
那么出现漏洞的数据库(A网站)如果是root最高权限,那么就有可能对同一个数据库下的其他B网站,C网站进行跨库注入。
如果是普通用户的话,只能注入自己的网站数据库,如果是root用户,则可以跨库注入。
以sqli_labs靶场为例,一般的联合查询语句以及注意事项:
- select schema_name from information_schema.schemata
- select table_name from information_schema.tables where table_schema='security'
- select column_name from information_schema.tables where table_name ='users' (最好加上 and table_schema='security')
- select username,password from users
(最好写成 from security.users) 因为你在做题时,不一定就在security数据库下
#文件读写操作
读取:
load_file() 函数: 可以读取本地的文件(下图为读取C盘123文件夹下的1.txt)
注意:路径层级要用 / ,而不是 \
如果显示NULL,进行以下操作:
打开my.ini文件,在[mysqld]下面添加这行代码:
secure_file_priv=
然后重启mysql
写入:
into outfile函数
Into dumpfile函数
将ilwa写入2.txt文件中。
一般我们会用这些函数读取网站,服务器的敏感文件,配置信息,具体文件在网上找。也可以写入一句话木马,用蚁剑连接,直接获取网站权限。
获取网站目录/路径:
- 通过报错信息查看。
- 遗留文件 比如phpinfo.php 这里面出现了一些php配置的路径。
3.平台配置文件
注意:文件读写操作可能会被过滤(幻术引号)
只需要把php的 magic_quotes_gpc改为 off状态就行。
magic_quotes_gpc如果为on状态的话,它会将单引号,双引号,反斜杠(\),null前面都无差别加一个 反斜杠 ”\“
类似函数还有:addslashes()
绕过方法有两种:1.编码(16进制编码 HEX) 或者 宽字节绕过
因为编码用不到单引号,而且可以正常查询,亲测有效↓
相关防御手段:
- 幻术引号函数
- 内置函数过滤
比如: is_int()
- 自定义过滤 比如过滤 or and select where
- WAF 过滤 WAF也是主要靠2,3的过滤方法进行过滤
WAF绕过方法有:
更改提交方法
大小写混合
解密编码类
注释符混用
等价函数替换
特殊符号混用
借助数据库特性
HTTP参数污染
垃圾数据溢出
欢迎各位佬批评指正!