关于所学sql注入的整理(二)

蝶舞恋冰   ·   发表于 2020-03-31 15:57:54   ·   技术文章

关于所学sql注入的整理(二)

POST注入:
存在poss注入的高危点:
登陆框、查询框以及各种和数据库交互的框。

经典的poss注入万能密码:
‘ or 1=1 #

Sqlmap如何进行poss注入:
—forms sqlmap去读取页面中POST传参的表单的传参名然后进行SQL注入。
-r 1.txt sqlmap读取数据包文件进行SQL注入,注入处可以打一个*号告诉Sqlmap测试那个点。
登陆框、查询框以及各种和数据库交互的框。

经典的poss注入万能密码:
‘ or 1=1 #

Sqlmap如何进行poss注入:
—forms sqlmap去读取页面中POST传参的表单的传参名然后进行SQL注入。
-r 1.txt sqlmap读取数据包文件进行SQL注入,注入处可以打一个*号告诉Sqlmap测试那个点。

可能存在的问题:
POST注入如何注入:
和GET注入一样,只不过通过post来提交数据。
POST注入原理:
在数据提交出,提交sql语句,是系统进行查询返回相应信息。

HEAD注入:
php全局变量-超全局变量:
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。
其中包括:
$_REQUEST (获取GET/POST/COOKIE) COOKIE在新版本已经无法获取了
$_POST (获取POST传参)
$_GET (获取GET的传参)
$_COOKIE (获取COOKIE的值)
$_SERVER (包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)
需要注意$_SERVER功能强大常用的如下:
$_SERVER[‘HTTP_REFERER’] 获取Referer请求头数据
$_SERVER[“HTTP_USER_AGENT”] 获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER[“REMOTE_ADDR”] 浏览网页的用户ip。
Updatexml()更新xml文档的函数
语法:updataxml(目标xml内容,xml文档路径,更新的内容)
比较喜欢updatexml(0x7e,(select database()),0x7e),1)
原理是我们在XML文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合输入规则然后报错了
但是报错的时候他其实已经执行了那个子查询代码!
[0x7e 实际是是16进制,Mysql支持16进制,但是开头得写0x 0x7e是一个特殊符号,然后不符合路径规则报错]
实例:
select *from news where id=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)
但是要注意,and 情况下只要一个为False,就会判定是False,所以如果and前面的条件不成立的情况下,就不会执行之后的语句。所以使用的时候建议使用or
小提示:某些没有回显盲注也可以用这个updatexml()做出来。
但是报错一般有长度限制,不能输出太长的数据,尽量不要使用group_concat()。
有些盲注也可以试试看报错注入,因为有的时候报错注入的致命错误会显示出来,数据库只忽略普通报错。

X-Forwarded-For又称(XFF):
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。[透明代理]
例如这串代码边上这段Getip函数是被很多网站和CMS广泛使用的,是属于一个模板,其实就是为了获取你的真实ip,在有代理的情况下,你会发送另外一些请求头来说明你的ip是啥,其中X-Forwarded-For就是其中一种请求头字段。
那么这个getip这里面很明显没有任何过滤,如果被传入的数据被拼接进SQL语句就会发生SQL注入

可能存在的问题:
Head注入原理:
利用php的全局变量$_SERVER获取用户的相关信息且将数据存入数据库,利用updatexml函数输入sql语句,从而返回信息。

post注入和head注入的区别:
POST注入的注入点再POST传参,HEAD注入的注入点在头信息。

如何防范post和head注入:
对传入参数进行过滤,增加检测种类,加个waf或者正则过滤危险字符。

布尔盲注和时间盲注:
这是渗透人员最不想做的事情,麻烦而且花费的时间很多。
什么是盲注?
盲注就是服务器没有任何错误回显的时候完成的注入。
布尔盲注:
布尔很明显和TURE和FALES,也就是根据注入信息返回TRUE或者FALSE,没有了任何报错信息
时间盲注:
界面返回只有TRUE,无论任何值,返回情况都会正常助理,加入特定时间函数,通过查看web页面返回的时间差来判断注入是否正确。

盲注需要会的函数:
length() 函数 返回字符串的长度
substr() 截取字符串 (语法:SUBSTR(str,pos,len);)
ascii() 返回字符的ascii码 [将字符变为数字wei]
sleep() 将程序挂起一段时间n为n秒
if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

盲注的原理:
根据返回页面的正确与否,通过判断对应字符的ascii码值是否对应,来判断字符串具体的数据

宽字节注入
magic_quotes_gpc(魔术引号开关)
magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
以下会触发单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线
魔术引号存在的意义就是对sql语句进行过滤
宽字节SQL注入主要是源于程序员设置数据库编码为非英文编码那么就有可能产生宽字节注入
例如说MySql的编码设置为了SET NAMES ‘gbk’或是 SET character_set_client =gbk,这样配置会引发编码转换从而导致的注入漏洞。
我们发现\的编码是%5c,然后我们会想到传参一个字符想办法凑成一个gbk字符,例如:‘運’字是%df%5c
SELECT FROM users WHERE id=’1\’’ LIMIT 0,1
这条语句因为\使我们无法去注入,那么我们是不是可以用%df吃到%5c,因为如果用GBK编码的话这个就是運,然后成功的让!。
SELECT
FROM users WHERE id=’1�\’#’ LIMIT 0,1
�\ 实际上就是那个運字
有的时候我们也可以用16进制来代替字符串

宽字节注入过滤原理
PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理,因为GBK是双字节编码,所以我们提交的%df这个字符和转译的反斜杠组成了新的汉字,然后数据库处理的时候是根据GBK去处理的,然后单引号就逃逸了出来。

宽字节注入绕过原理
已知我们的提交数据会被加入\,\的编码为%5c,我们在后面加上%df后变为了%df%5c,变成一个繁体汉字運,变成了一个有多个字节的字符
因为用了gbk编码,使这个为一个两字节,绕过了单引号闭合,逃逸了转义
未完待续。。。

打赏我,让我更有动力~

1 Reply   |  Until 2020-4-7 | 807 View

hhades
发表于 2020-4-7

沙发老哥

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.