SQL注入的本质
注入攻击的本质: 把用户输入的数据当做代码执行。
两个关键条件:
第一.用户能够控制输入
第二.原本程序要执行的代码,拼接了用户输入的数据然后进行执行
手工测试
但很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢,union select联合查询注入
updatexml报错注入盲注介绍
所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击。
服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息"”。
判断是否存在注入
二话不说,先加单引号’、双引号”、单括号)、双括号))等看看是否报错,如果报错就可能存在5QL注入漏洞了。
还有在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 枚举数据
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注入的方式有哪些?
1、 普通用户与系统管理员用户的权限要有严格的区分。
2、 强迫使用参数化语句
3、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
入?防止sql注入的方式有哪些?
1、 普通用户与系统管理员用户的权限要有严格的区分。
2、 强迫使用参数化语句
3、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
4、 使用预编译
关注/公/众/号【助安社区】渗透零基础到入门都在这,社区内部红队沙龙、资源共享和大厂工作经验。真正热爱安全和喜欢技术交流的小伙伴欢迎加入我们。