sqli-labs-38-41
堆叠注入定义 Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
1 堆叠注入原理 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将 ...
sqli-labs-32、33
宽字节注入原理mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思路是将‘转换为\’(转换的函数或者思路会在每一关遇到的时候介绍)。
PHP 自带一些转义特殊字符的函数,如addslashes(),mysql_real_escape_string(),mysql_escape_string()等,这些函数可用来防止 SQL 注入。
如id=1’or’1’=’1,单引号本用来闭合语句,这些函数会自动转义这些闭合的单引号,在这些单引号前面加上转义符\,变为1'or'1'='1,如此在 SQL 查询中是一个普通的字符串,不能进行注入。
而网站在过滤’的时候,通常的思路就是将’转换为',因此我们在此想办法将’前面添加的\去掉,一般有两种思路:%bb吃掉\
如果程序的默认字符集是GBK等宽字节字符集,就有可能产生宽字节注入,绕过上述过滤。
若在 PHP 中使用mysql_query(“set names gbk”)将默认 ...
sqlilabs-29,30,31
搭建双服务器-Tomcat和Apache由于第29,30,31关需要双服务器环境,即Tomcat和Apache。利用JSP和PHPStudy来搭建服务器,由于我们已经在PHPStudy上搭建好了Apache服务器,现在只需要在JSP上搭建Tomcat即可。
首先下载JSPhttps://www.xp.cn/download.html
修改vhost.conf文件
sqli-labs文件夹下面还有tomcat文件
解压放到JSPstudy的www目录下接下来修改URL,改成你自己设置的:修改2处
重启JSPStudy和PHPStudy成功看到以下页面:
接下来依次修改Less-30,Less-31。
less-29
单引号字符注入
然后就是注入。30关、31关也是类似。
sql-25-28
Less-25基于错误-您所有的OR&AND都属于我们-字符串单引号
翻译:
注意:未定义变量:在第81行的C:\ phpStudy \ WWW \ sqli \ Less-25 \ index.php中提示提示:将使用以下结果过滤您的输入:
一上来就有报错与提示信息。
有过滤的时候首先要判断这个过滤是一次性的还是非一次性的:若是一次性的,且只是将过滤字符换成了空字符:
双写绕过—— or=oorr、and=anandd
若是非一次性的,就要考虑一些变形:大小写变形绕过—— or=Or=oR=OR利用运算符—— or=||、and=&&URL编码绕过—— #=%23,Hex编码—— ~=0x7e添加注释 —— /or/
双写绕过暴字段:?id=1’ oorrder by 3– #
?id=-1’ union select 1,2,3– #
暴库:?id=-1’ union select 1,user(),database()– #
爆表:?id=-1’ union select 1,(select group_concat(table_name) fr ...
sql-23
Less-23 基于错误的,过滤注释的GET型判断注入类型:
?id=1 ?id=1’ ?id=1” 发现第二条语句报错:
从这里可以看出是单引号闭合的查询,这里报错还把站点路径爆出来了。
出现了一行文字
翻译:
警告:mysql_fetch_array()期望参数1为资源,布尔值在第38行的C:\ phpStudy \ WWW \ sqli \ Less-23 \ index.php中给出您的SQL语法有误。 检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的“ 1” LIMIT 0,1’附近使用
我们查看下源代码:
preg_replace() 函数
1preg_replace(pattern,replacement,subject[,limit=-1[,&count]])
参数
描述
pattern
要搜索的模式,可以是字符串或一个字符串数组
replacement
用于替换的字符串或字符串数组
subject
要搜索替换的目标字符串或字符串数组
limit
可选,对于每个模式用于每个 subject 字符串的最大可替 ...