注入测试的本质: 把用户输入的数据当做代码执行。
两个关键条件:
- 用户能够控制输入
- 原本程序要执行的代码,拼接用户输入数据被执行
手工测试
但很多时候,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 枚举数据
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注入的方式有哪些?
- 普通用户与系统管理员用户的权限要有严格的区分。
- 强迫使用参数化语句
- 必要的情况下使用专业的漏洞扫描工具来寻找可能被进攻的点。
- 使用预编译
关注公众号【助安社区】安全零基础到入门都在这,社区内部红队沙龙、资源共享和大厂工作经验。真正热爱安全和喜欢技术交流的小伙伴欢迎加入我们。