我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第5篇文章,点击查看活动详情
引文
带大家了解一下WEB安全中最常见的危害也比较高的漏洞,SQL注入漏洞,其原理大致是Web应用程序对用户的输入没有做严格的判断,导致用户可用将非法的SQL语句拼接到正常的语句中,被当作SQL语句的一部分执行。
类型
提交数据类型
按照提交的数据类型有:数字型、字符型和搜索型;
数字型
形如
id=1+xxxx+--+
字符型
形如
name=admin’+xxx+--+
他们之前唯一的区别就是拼接时是否添加单引号,具体可以分析查询语句输入时是怎样拼接的。
提交方式类型
GET
注入点在URL中如
http://sqli-labs/Less-1/?id=1
可能存在的注入点在id=1
POST
POST注入与GET注入区别在于POST注入在传参时,参数值不会在URL中显示;经常出现在登陆页面等数据提交量较大的页面中。
COOKIE
COOKIE 注入与 GET、POST 注入区别不大,只是传递的方式不一样。
GET 在 url 传递参数,POST 在 POST 正文传递参数和值,COOKIE 在 cookie 头传值。
注入手法分类
UNION query SQL injection(联合查询注入)
Error-based SQL injection(错型注入)
Boolean-based blind SQL injection(基于布尔的盲注)
Time-based blind SQL injection(基于时间的盲注)
Stacked queries SQL injection(可多语句查询注入)
UNION query SQL injection(联合查询注入)
UNION 操作符用于合并两个或多个 SELECT 语句的结果。union 查询注入利用 UNION 关键字可以追加一条或者多条额外的 SELECT 查询,并将结果追加到原始查询中。
?id=xino’union select (select group_concat(column_name) from information_schema.columns where table_schema=‘grade’ and table_name=‘admins’)#
Error-based SQL injection(错型注入)
报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。简单点说,就是在可以进行sql注入的位置,调用特殊的函数执行,利用函数报错使其输出错误结果来获取数据库的相关信息。
?id=1" and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),3) --+
Boolean-based blind SQL injection(基于布尔的盲注)
由于SQL注入并不是都会直接显示查询的内容,有时候只是回显查询正确与否,并不能看查询到的数据结果,这时候我们就需要一种新的注入方式,这就是SQL盲注,而我们根据回显的方式不同将盲注主要分为布尔型盲注和时间盲注。
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)))=115 --+
因为挨个查询时间比较大,通常我们需要写脚本去跑。
Time-based blind SQL injection(基于时间的盲注)
时间盲注是指基于时间的盲注,也叫延时注入,根据页面的响应时间来判断是否存在注入。
?id=1 and if(1,sleep(5),3) -- a
和布尔盲注原理差不多,也需要我们写脚本去运行。
SQLI-LABS
SQL注入练习平台
sudo apt-get install git
sudo git clone https://github.com/skyblueee/sqli-labs-php7 /var/www/html/sqli-labs
SQLI-LABS
SQL注入练习平台
sudo apt-get install git
sudo git clone https://github.com/skyblueee/sqli-labs-php7 /var/www/html/sqli-labs
SQLMAP
sqlmap是一款基于python编写的渗透测试工具,在sql检测和利用方面功能强大,支持多种数据库。
常用命令:
-h 使用帮助查看命令
-r 注入指定的文本(文本文件中有http头部内容)
-u 注入指定url地址
--dbs 爆出所有数据库
-D 指定数据库名
--tables 爆出所有表
-T 指定表名
--columns 爆出所有列
-C 指定列名
--dump 爆出所有数据
结语
简单讲解了一下SQL注入的原理以及渗透方法,当然内容太多没有细讲,有兴趣的可以自行去了解。