SQL注入漏洞回顾

第一部分:信息收集

信息收集是渗透的最重要的一步,它决定你渗透能否成功的%60.

对于SQL注入,前期需要了解对方~数据库的类型~,~网站路径~,为后续测试SQL注入提供一个正确的道路。

第二部分:SQL注入之数据库分类

目前网站数据库类型主流的有mysql、Access、Mssql、mongodb、Postgresql、sqllite、oracle等等。

1.access注入

与其他类型注入不同,属于独立存在管理类型。

(1)不存在跨库注入;

(2)无文件读写操作;

(3)无版本、数据库可以查,直接获取数据;

(4)注入的时候只能够靠猜或爆破数据,例如user、username、pass、passwd、password等。

方法:可以使用Accesss偏移注入,随机爆数据;(百度上可以查到相应文章)

2.mongoDB注入

mongoDB与其他数据库的不同点再与它参数的接受方式为类似”键值对“的方式获取。例如:

{

id 1

user admin

passwd admin

}

接受参数方式有点类型python的字典以及json注入。

3.其他数据库注入基本大同小异

(1)可以跨库查询;

(2)可以文件读写操作;(如果对方写入权限允许的情况下,直接写入一句话获取shell)

(3)获取版本、表名、列名、数据。

第三部分:SQL注入之提交方式注入(别名:HTTP头部注入)

有时候对方网站对GET请求方式做出过滤,而忽略了其他请求方式的注入,那么我们可以更换提交方式进行注入获取数据。

1.GET注入

2.POST注入

3.Cookie注入

4.Request注入

5.Server注入

第四部分:SQL注入之查询方式注入

我们渗透一个网站时,需要根据对方的功能大致判断其背后的SQL语句,这样我们的注入语句也会相应的变化。

1.Select注入

一般在查询功能模块会用到。

2.insert注入

一般在注册,添加功能模块的时候会用到。

3.delete注入

一般在删除功能模块的时候会用到。

4.update注入

一般在更新功能,如修改密码的时候会用到。

5.order by注入

第五部分:SQL注入之无回显注入

具体的注入过程可以查看网站的相关文章。

三种注入方式测试优先级:报错注入 > 时间注入 > 布尔注入

1.报错注入

最快的一种注入。配合查询方式注入,快速的获取对方数据库信息。

2.时间注入

最慢的一种注入。主要用到的函数有:sleep()、if()、Length()、mid()、substr()、ascii()、limit 0,1.

思路:通过if函数的三目运算符来判断数据库信息的名字,优先使用length函数来猜长度。由于是无回显,所以使用sleep函数,通过页面的睡眠时间来得知我们的判断正不正确。

3.布尔注入

最麻烦的一种注入。主要用到的函数有sleep()、if()、Length()、mid()、substr()、ascii()、limit 0,1.

思路:使用二分法配合ascii函数能更快速的判断。

第五部分:SQL注入之其他拓展注入

1.二次注入

第一步:插入恶意数据

注册一个  admin'#  的用户,如果可以成功注册,那么在更新操作时,用户名进入数据库的格式为 username = 'admin'#' ,等于修改了admin的密码。

二次注入大多在白盒测试中判断,无法使用工具进行测试。

第二步:引用恶意数据

2.加解密注入

对方网站的参数使用了加密算法,我们需要先解密后再注入语句,再进行加密测试。

如果是sqlmap工具,可以调用--tamper base64encode.py --dbs,工具自带的插件。

也可以直接开发一个脚本工具,使用sqlmap测试本地的脚本,实现一个编码中转。

SQL注入漏洞回顾_第1张图片

3.DNSlog注入

工具:https://gihub.com/ADOOO/Dnsloglinj

工具运行环境:python

工具使用方式类似sqlmap工具。

DNSlog使用条件,高权限用户,解决了盲注不回显数据的问题。

4.堆叠注入

原理:SQL语句中,分号;是一条语句结束的意思。如果可以实施多条语句,那么就可以实现堆叠注入。

例如:?id=1;select * from user;

使用场景:当我们注入成功获取管理员的账户密码时,如果密码我们无法解密成功,那么我们就可以使用堆叠注入,插入一条我们自定义账户密码的用户,从而实现成功登录。

注意:当然,堆叠注入不仅仅用户插入数据,还可以删除、更改、查询数据。

第六部分:WAF绕过

常见的waf软件有:阿里云、宝塔、安全狗、D盾

1.数据形势绕过

(1)大小写

(2)等价函数

(3)特殊符号

(4)加解密、编码解码

(5)反序列化

(6)注释符混用

2.其他形势绕过

(1)参数污染

例如:浏览器的参数污染

(2)注释符

例如:database/**/()

(1)和(2)配合使用

例如:id=1/**&id=-1%20union%20select%201,2,3%23*/

(3)换行绕过(%0A表示换行、%23是#)

(4)fuzz大法(使用python脚本运行)

SQL注入漏洞回顾_第2张图片

SQL注入漏洞回顾_第3张图片

你可能感兴趣的:(渗透测试,web安全)