SQL注入的本质

时间:2022-12-07 20:58:22

注入测试的本质: 把用户输入的数据当做代码执行。

两个关键条件:

  1. 用户能够控制输入
  2. 原本程序要执行的代码,拼接用户输入数据被执行

手工测试

但很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢?

判断是否存在注入

二话不说,先加单引号’、双引号”、单括号)、双括号))等看看是否报错,如果报错就可能存在​​SQL​​​注入漏洞了。还有在URL后面加and 1=1,and 1=2看页面是否显示一样,显示不一样的话,在判断是字符型还是数字型,肯定存在SQL注入漏洞了。还有就是​​Timing Attack​​​测试,也就是时间盲注。有时候通过简单的条件语句比如​​and 1=2​​是无法看出异常的。

报错查询注入利用前提:页面上没有显示位,但是需要输出SQL语句执行错误信息。

盲注的类型

SQL注入常用函数,盲注—般分为三种

基于布尔型的盲注:

left(a,b)从左截取a 的前b位:left(database(),1) > ‘s’substr(a,b,c)从b位置开始,截取字符串a的c长度ascii() 将某个字符转换为ascii值:ascii(substr(user),1,1)=101#mid(a,b,c)从位置b开始,截取a字符串的c位 regexp正则表达式的用法user()结果位root ,regexp为匹配root的正则表达式:select user()’

基于时间的盲注:

​benchmark(count,expr)​​​函数 ​​sleep(time)​​​函数前者通过将​​expr​​​语句执行​​count​​​次来到达延迟的目的,后者是直接延迟time时间​​benchmark​​​是一个内置函数,其作用是来测试一写函数的执行速度,​​benchmark()​​其中有两个参数,第一个是执行次数,另一个是要执行的函数或者表达式。

基于报错注入:

报错顾名思义,就是使语句报错。报错注入则是注入特殊的语句使报错回显中带上我们需要的信息。报错盲注也是三种盲注中效率最高的,常见的报错回显有三种函数extractvalue()、updatexml()、floor()

Sqlmap简介

下载地址:https://github.com/sqlmapproject/sqlmap

Sqlmap 是一个开源的安全测试工具,可以用来进行自动化检测,能自动化利用 SQL 注入漏洞的过程,帮助你接管数据库服务器。

基础命令:

-u 指定注入点

–dbs 跑库名

–tables 跑表名

–columns 跑字段名

–dump 枚举数据

SQL注入的本质

sqlmap的简单使用

sqlmap.py -u /Pass-05/index.php --forms --dbs

跑表名

sqlmap.py -u Pass-05/index.php --forms -D post_error --tables

字段名

sqlmap.py -u Pass-05/index.php --forms -D post_error -T flag --columns

出数据

sqlmap.py -u Pass-05/index.php --forms -D post_error -T flag -C flag --dump

BP和Sqlmap联动

SQL注入的本质

如何预防sql注入?防止sql注入的方式有哪些?

  1. 普通用户与系统管理员用户的权限要有严格的区分。
  2. 强迫使用参数化语句
  3. 必要的情况下使用专业的漏洞扫描工具来寻找可能被进攻的点。
  4. 使用预编译

关注公众号【助安社区】安全零基础到入门都在这,社区内部红队沙龙、资源共享和大厂工作经验。真正热爱安全和喜欢技术交流的小伙伴欢迎加入我们。

SQL注入的本质