目录
1. 确定焦点
1.1 数字型
1.2 字符类型
1.3 宽咬合
2.sqlmap宽字节注入
3. 实用总结
一、注点判断
由于我们知道目标网站127.0.0.1/new_list.php?id=1,所以我们首先可以通过字符和数字注入点来判断它是字符还是数字。
1.1数字型
添加?id=1 and 1=1和?id=1 and 1=2并检查内容是否显示成功
添加?id=1 和1=2。根据SQL语句的语法,and后面的1=2显然不满足条件,所以我们预计内容有错误。
但是,由于它可能是字符类型,因此实际上不会导致错误。
对于字符类型:由于它是字符类型,因此您输入的1和1=2会附加单引号。因此,输入到PHP 脚本中运行的SQL 语句将是:select xx from xx where id=\’1 and 1=2\’,也就是说是一个简单的字符串,所以没有1=2的判断内容,所以还需要进行字符注入判断。
1.2字符型
添加?id=1\’ 和1=1 –+。添加这条语句后,实际执行的SQL是select xx from xx where id=\’1\’ and 1=1 –。 +\’。这样写是为了将ID前后的单引号括起来,形成一个字符串,并用–+注释掉and语句中的\’,所以根据SQL语句语法,返回的内容显示应该是正常的。
再次添加内容,确保是字符注入? id=1\’ and 1=2 –+ 实际添加的内容是select xx from xx where id=\’1\’ and 1=2–。 +\’,根据SQL语句,语法应该返回错误
但实际结果还是正常的。你能直接判断出这个原因不是字符注入,而是其他一些未学过的方法吗?
更多关于字符/数字注入判断的信息,请参考:【硬资料】如何判断SQL注入点_判断有无SQL注入-CSDN博客。
1.3宽字节
在进行宽字节注入之前,我们先介绍一下:这个概念。
当PHP向MYSQL发送请求时,会发生宽字节注入,并且使用character_set_client设置对字符集进行编码。使用PHP 连接MySQL 时,设置“character_set_client=gbk”会导致编码转换问题,即熟悉的宽字节注入。
宽字节注入的原理就是利用编码转换吞掉原本用于转义的\\符号,在服务器端强行加上,让攻击者将输入的引号括起来,进行SQL注入。做。
这里的宽字节注入利用了mysql 的功能。当mysql使用GBK编码时(GBK就是俗称的宽字节,实际上只有2个字节),它把两个字符识别为一个汉字(以前的An)。达到汉字范围,ASCII码必须大于128),并且输入单引号时会自动添加一个\\并转义成为\\\’(PHP配置文件中如果magic_quotes_gpc=On或者addlashes函数,icov函数、mysql_real_escape_string函数、mysql_escape_string函数等,如果发送的参数包含单引号\’,则会自动转义,大多数注入攻击将被禁用)。宽字节引起的安全问题主要导致此行为。对于ASCII字符(1个字节),下一个字节与前面128以上的ASCII码组合起来形成完整的字符(mysql判断该字符是否为汉字字符,根据gbk编码判断是否为中文),第一个字节的ASCII码大于128,基本没问题)。这样的话,\’前面的\\就被吃掉了,就可以利用这个特性来实现SQL注入了。
最常用的宽字节注入是使用%df。事实上,第一个ASCII码只需要大于128即可。例如,ASCII 码是129。但是我们如何将其转换为URL编码呢?其实很简单。首先将129(十进制)转换为十六进制(0x81),然后在十六进制前面添加% (%81)。也可以直接记住GBK的第一个字节对应0x81-0xFE,最后一个字节对应0x40-0xFE(0x7F除外)。最后一口可以通过逃跑等吃掉。 Symbol\\Supported Encoding 0 5C!另外简单说一下,GB2312兼容GBK,它的高位范围是0xA1到0xF7,它的低位范围是0xA1到0xFE(0x5C不在这个范围内)因此不能使用编码去吃。 5c
有关此内容的更多信息,请参阅WEB渗透研究笔记5——宽字节、Cookies、Base64注入_Web渗透Cookies-CSDN博客。
总结一下,实际上是1\’。这是因为magic 和addlashes 函数将前导\\ 作为无效字符转义。如果添加1%df\\\’,则会丢失%df 和\\。 gbk编码将两者视为一个汉字(全角为一个汉字)。因此,\\将会被“吞噬”。
添加?id=1%df\’并检查效果
果然报错了。错误是因为SQL执行的最后一条语句实际上是select xx from xx where id=\’1%df\\\’\’,%df and \\。中国文字。
其余详细操作说明请参考前面的内容。操作方法基本相同。
记莫莫的mysql手动SQL注入- CSDN博客
二、sqlmap宽字节注入
本实验基于kali系统。有关安装sqlmap 的更多信息可以在其他博客或github 上找到。
首先,直接使用sqlmap -u命令确定注入点。
可以看到根本没有找到注入点。由于我们通过手动注入知道这是一个宽字节漏洞,因此我们可以使用位于sqlmap篡改目录下的脚本unmagicquotes.py。
执行结果如下图所示。表明信息检索成功。
然后检查当前是哪个数据库,使用python3 sqlmap.py -u \’http://124.70.71.251:41606/new_list.php?id=1\’ –tamper=unmagicquotes.py –current-db 来做。
根据你当前的数据库找到表名python3 sqlmap.py -u \’http://124.70.71.251:41606/new_list.php?id=1\’ –tamper=unmagicquotes.py -D \’mozhe_discuz_stormgroup \’–tables
然后根据选择的表名找到字段名及其值。 python3 sqlmap.py -u \’http://124.70.71.251:41606/new_list.php?id=1\’ –tamper=unmagicquotes.py -D \’mozhe_discuz_stormgroup\’ -T \’stormgroup_member\’ –dump
现在你知道了自己的账号和密码,通过md5解密就可以得到正确的密码了。
三、实战总结
一般来说,使用sqlmap的前提是知道当前的漏洞注入是宽字节注入。这间接证明了手动注入学习的重要性,同时也让你能够正确使用脚本。学习SQL的内容也很重要,除非你理解了原理,否则你在实践中将无法发现问题。
以上#墨哲学院关于SQL手动宽字节注入的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93799.html