Tagged: 网络安全 Toggle Comment Threads | 键盘快捷键

  • jinzihao pm2:28 on 2016年8月20日 链接地址 | 回复
    Tags: 网络安全   

    缓冲区溢出漏洞的利用 

    注:这篇文章本来是一门课程的(大)作业,由于课程报告题目自选,本文其实就是对CTF中几个很基础的二进制的题写了比较详细的write-up,也算记录了一下自己从零基础开始学习的过程吧。

    0. 写在前面

    操作系统这门课程对系统如何管理内存做了详细的介绍,这是计算机安全的一个重要分支——内存安全的背景知识。我对计算机安全比较感兴趣,而内存安全也是其中绕不开的一个领域。在计算机安全中,内存安全相比起Web安全等领域门槛较高,需要站在操作系统的视角看内存,才能发现潜在的内存漏洞。这学期选了操作系统这门课,也希望能起到“扫盲”的作用,借此机会入门一下内存安全。这篇课程报告主要关注内存安全问题中最常规的缓冲区溢出漏洞,总结了缓冲区溢出漏洞的一些入门知识,也算是一个初学者的一点学习笔记。

    1. 什么是缓冲区溢出漏洞

    这是一个很难一言以蔽之的概念,维基百科的描述如下:

    缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、并获取程序乃至系统的控制权。[1]

    而缓冲区溢出漏洞的利用,则是通过精心构造的输入数据,向内存的特定位置写入特定信息,进而使程序运行发生异常。注意,这里的异常是对于程序开发者而言的,对于攻击者而言则是预期结果。

    利用缓冲区溢出漏洞的一般流程如下:

    (1) 使用反编译工具(如IDA)对程序进行反编译

    (2) 分析反编译得到的C语言代码和汇编代码,设计攻击方法

    (3) 按照设计好的攻击方法设计输入数据

    (4) 把设计好的输入数据传入到程序中,获得系统权限

    下面结合几个实例,对缓冲区溢出漏洞做些简要介绍。

    2. 实例1——基本思路

    (本题出自Bluelotus-Exercise题集中的shellcode题目[2])

    使用IDA反编译得到:

    全局变量:

    main函数:

    这段程序的功能是,从stdin(控制台输入)读入1023个字节,存入shellcode变量,然后通过强制类型转换把shellcode变量作为一个无参数、返回int的函数,调用shellcode变量。由于程序指令本质上也是数据,因此只要将合适的数据写入到shellcode变量,便可以使这段程序执行这段数据对应的程序指令。

    shellcode本质上是一段机器码,直接编写难度很大。可以先按照需求编写C语言程序,然后编译,将编译得到的二进制文件用十六进制编辑器打开,便可以得到这段C语言程序对应的机器码。另外,网络上也有很多现成的shellcode,例如本题中可使用这样一段来自EggRun主页的shellcode [3]:

    6a 0b 58 99 52 68 6e 2f 73 68 68 2f 2f 62 69 89 e3 52 53 89 e1 cd 80

    这段用16进制数表示的机器码对应的C语言程序为execve(/bin/sh),在包括Linux在内的类Unix系统中可以启动一个shell,从而可以执行任意命令。

    另外,shell-storm也提供了大量shellcode,可以根据不同的运行环境和预期效果选择不同的shellcode。[4]

    (阅读全文 …)

     
    • 陈文 上午11:04 on 2016年8月21日 链接地址 | 回复

      网站挂了

      • jinzihao 下午5:59 on 2016年8月21日 链接地址 | 回复

        嗯,我也发现了,服务器现在没法访问,明天中午应该可以恢复~

        • 陈文 上午10:16 on 2016年8月23日 链接地址 | 回复

          额,貌似还没我的预览页靠谱(这还是免费服务器)http://mini536.3vkj.net/

        • 陈文 下午2:46 on 2016年8月23日 链接地址 | 回复

          你最近能不能把你的站点文件打包发到我邮箱里,我申请了个更大的空间(10G),带宽也大些,这是我临时做的主页,你可以体会到的https://mini536.lima-city.de/

          • jinzihao 下午11:39 on 2016年8月23日 链接地址 | 回复

            文件过大,没法发邮件,请提高一下你的镜像工具的最大下载文件大小,直接用镜像工具下载更方便一些

            • 陈文 下午10:23 on 2016年9月1日 链接地址

              你的网站用teleport下载文件只有60k/s,很多文件下载半天也下载不下来

          • jinzihao 下午11:54 on 2016年8月23日 链接地址 | 回复

            另外也得说一句,当初刚开始建这个站的时候也是辗转于各种免费空间,但很遗憾没有一个靠得住的。因为这种站特别消耗带宽,也很占硬盘空间,对于主机商绝对是赔本生意,每次过不了多久主机商就会找点麻烦。

    • 陈文 下午3:24 on 2016年9月9日 链接地址 | 回复

      你的网站用teleport下载文件只有60k/s,很多文件下载半天也下载不下来

  • jinzihao pm10:42 on 2016年7月10日 链接地址 | 回复
    Tags: , 网络安全   

    CISCNCTF 随记(1) 

    曼彻斯特编码:二进制的0编码为10,二进制的1编码为01(1和0也可以反过来),如果一个二进制串中只有01和10可以考虑曼彻斯特编码

    二进制串里如果包含char或者int,有可能从前往后看,也可能是每一个单元(char就是1 byte,int就是4 byte)从后向前看,在pwn类型的题中也有类似的问题。

    python的hex函数10->16,int函数any->10,bin函数10->2;字符串逆序在后面加[::-1]。

    Word有隐藏文字的功能,可以在选项里打开显示隐藏文字的功能。也有可能出现白底白字导致看不到的情况,如果不放心就直接把docx当做zip解包,打开Word的源文件看看有没有遗漏。

    TrueCrypt和PGPDesktop都可以加密文件,TrueCrypt用一个字符串或者用一个文件做密码,PGPDesktop用公钥私钥来解密,私钥也可以要求密码。Linux下的GnuPG与之兼容。(有待尝试)

    摩尔斯电码听不清的话拿Audacity的频谱模式看一看。

    别忘了栅格密码,13572468可以写成第一行1357第二行2468,然后一列一列看就是12345678。

    tesseract识别验证码效果不错,也有一个并不难上手的Python接口pytesseract。(进一步提高识别率有待尝试)

    Python用requests模块发送http请求,功能大体相当于curl。

    vim有备份文件和交换文件,如果编辑的文件是index.php,备份文件在index.php~,交换文件在.index.php.swp,如果再次意外退出就生成.index.php.swo,接着是.index.php.swn,.index.php.swm,……。swp没有的话swo还要试一试。

    PHP判断浮点数相等时有精度问题,PHP认为0.99999999999999999999和1是相等的。另外MySQL和PHP在浮点数判等时精度有差别,也可能会有利用的机会。

    shell脚本中如果不让用空格,用$IFS环境变量可以产生空格;如果不知道当前目录,也不允许用pwd的话,用$PWD环境变量效果一样。

    SQL注入不止会发生在GET和POST参数上,http header里面也可能有注入,cookie也有可能,只要能作为用户输入的东西都可能有注入。

    Access数据库有DLookup函数,用在UPDATE型注入时可以很方便地起到内联SELECT的效果,解决了Access不能直接在UPDATE的SET部分内联SELECT的问题。

     

     
  • jinzihao am12:09 on 2016年5月18日 链接地址 | 回复
    Tags: , , 网络安全   

    [writeup] web {1, 2, 3, 4} – Bluelotus-Exercise 

    web1:

    打开网址,在网页源代码中看到下列注释:

    输入的$user和$pass被单引号包围,可通过在$user中输入

    利用MySQL的\转义机制,将后一个单引号转义为字符串的一部分;在$pass中输入

    (%23为#的URL转义)利用MySQL的#注释机制注释掉后面的部分,包括紧随其后的单引号
    此时SQL语句为:

    其中只剩两个单引号,恰好配对为一个字符串,后面OR 1=1的存在即可取出表中所有的记录。
    输入?user=flag\&pass= OR 1=1%23后得到flag:CTF{Welc0me_T00_t3e_Web_W0r1d}


    web2:

    在网页注释中看到:

    尽管$str经过了addslashes处理,但addslashes只会在单引号、双引号、反斜线、空字符前添加一个反斜线,故可以在$str中输入一个

    PHP中双引号内的${}内的代码可被解释运行,输入?str=${echoflag()}得到flag为CTF{D0llAr_I3_Ama2inG}


    web3:

    (此题提示信息中$secretId = 12315应改为$secretId = 1)
    本题中id参数在PHP代码中被存为float类型,如果这个浮点数类型的id与secretId相等则不会进行else分支中的数据库查询。但浮点数判等就会有精度问题,利用PHP和MySQL浮点数的精度差别,使$id和$secretId在PHP中不等,而在MySQL中相等。于是构造一个id=1.00000000000001,PHP认为1.00000000000001 != 1,从而进入else分支。而MySQL认为1.00000000000001 = 1,从而取出了id为1的记录:id: 1, message: CTF{W3ll_D0wn}


    web4:

    if($_CONFIG[‘extraSecure’])内的代码对$kw进行了过滤,使得注入代码难以进入最终的SQL语句中。但前面两重foreach循环,提供了一个修改$_CONFIG的机会。对于所有$_GET[‘key’] = ‘value’、$_POST[‘key’] = ‘value’、$_REQUEST[‘key’] = ‘value’、$_COOKIE[‘key’] = ‘value’,PHP都会销毁key变量。于是以GET参数的形式传入一个?_CONFIG=xxx,便可以销毁$_CONFIG,从而使$_CONFIG[‘extraSecure’]为空,绕过了preg_replace的过滤。接下来再在kw中进行联合查询:

    先用’结束LIKE后面的字符串,用and 0使第一条查询查不出任何记录,否则第一条记录就不一定是user表中admin的密码了。接下来union select便可以取出user表中id为1的记录。查询得到结果:id: admin, message: CTF{G00d_J0b}

     
  • jinzihao pm11:31 on 2016年5月17日 链接地址 | 回复
    Tags: , , 网络安全   

    [writeup] misc {1, 2, 3, 4, 5} – Bluelotus-Exercise 

    misc1:

    查字典可知,这五个字读作(dà)(xiàng)(de)(yīng)(wén),于是flag输入大象的英文elephant即可。


    misc2:

    在键盘上找到这些字母和数字对应的位置,恰好构成了大写字母LIC,flag即为LIC。


    misc3:

    此题为一段base32编码的数据,在http://emn178.github.io/online-tools/base32_decode.html解码得到

    再从左到右将每两位16进制数转换为一个ASCII字符(在线转换工具:http://string-functions.com/hex-string.aspx),得到flag:ctf{Enc0d1ng_1s_f3n)}


    misc4:

    flag.zip
    本题的zip文件看似需要密码才能打开,实际为伪加密,使用unpack.txt(请将扩展名改为.py)解压flag.zip:

    得到flag.docx,打开显示ctf{Hu33y_Up}即为flag。


    misc5:

    flag.docx
    打开flag.docx文件只看到蓝莲花图片,将扩展名改为.zip,解压,在word\media\下面看到两个png图片,打开image2.png,看到flag:ctf{My_G0g}

     
  • jinzihao pm6:18 on 2016年4月30日 链接地址 | 回复
    Tags: 网络安全   

    缓冲区溢出漏洞入门笔记 

    最近在了解缓冲区溢出漏洞的发现和利用,完全零基础…
    看了一些文章了解到一些入门内容,但水平还不足以写篇文章总结一下…
    就把自己看过的文章在这里分享一下吧,应该这些文章结合起来看看就可以入门了:

    这篇文章很适合入门,从基础概念讲起,给了很多示例:
    http://www.xfocus.net/articles/200708/%BB%BA%B3%E5%C7%F8%D2%E7%B3%F6%B9%E2%CB%D9%C8%EB%C3%C5.pdf

    稍微进阶一点的文章,示例也很多:
    http://linux.ximizi.com/linux/linux5570.htm

    乌云上的一篇概述性的文章,介绍了很多常用工具:
    http://drops.wooyun.org/binary/6521

    前几篇文章里提到的shellcode在这里有系统性的介绍:
    http://www.xfocus.net/articles/200805/980.html

    一个方便的测试shellcode的工具,里面也给出了一段经典的shellcode:
    http://www.secdev.org/projects/eggrun/

    关于C语言的函数调用栈,大多数情况下需要对函数调用栈有些基本了解才可以利用缓冲区溢出漏洞:
    http://www.cnblogs.com/clover-toeic/p/3755401.html

    用gdb查看内存数据的方法(必备技能),gdb的更多用法可自行搜索:
    http://eminzhang.blog.51cto.com/5292425/1256022

    关于ret2libc攻击方法,缓冲区溢出漏洞的利用方法之一:
    http://blog.csdn.net/linyt/article/details/43643499

    ret2libc的一个实例:
    http://geeksspeak.github.io/blog/2015/05/18/defconctf-2015-quals-ropbaby-writeup/

    乌云上介绍ret2libc的一篇文章,很详细:
    http://drops.wooyun.org/binary/13554

    一篇介绍ROP(缓冲区溢出漏洞的一类利用方式)的文章,很详细:
    http://codearcana.com/posts/2013/05/28/introduction-to-return-oriented-programming-rop.html

    一组示例,可以检验一下自己对各种攻击方式的理解是否正确:
    http://5alt.me/posts/2014/09/Protostar%20stack%200-7%20writeup.html

    另外一篇系统性地介绍ROP的文章:
    http://drops.wooyun.org/tips/6597

    一个ROP的例子,可以验证一下自己的理解:
    http://www.ricter.me/posts/Vortex12%20Writeup%20-%20The%20First%20ROP%20I%20Wrote

    另一个关于ret2libc的例子,对抗地址随机化的一种思路:
    http://lieanu.github.io/2014/12/08/SCTF-pwn200.html

     
  • jinzihao pm11:07 on 2015年12月3日 链接地址 | 回复
    Tags: 网络安全   

    一次钓鱼WiFi测试 

    一年多以前在WooYun Club中见识过钓鱼WiFi的威力,我的邮箱密码当场被截获了,只因为我登录了一下邮箱…

    刚才突发奇想,如果我把宿舍的路由器(Raspberry Pi)的ssid设为Tsinghua,也就是大多数人的手机都会自动连接的那个校园网WiFi,再取消密码验证,会不会有很多设备自动连接上来呢?有设备连上之后,下一步就该抓包工具大显身手了…

    于是打开Wireshark,开始监听wlan0,再修改hostapd的配置文件,重新启动hostapd,Wireshark就源源不断地接收到数据…

    十几分钟的时间,收到数据包9000+,其中http协议430条。由于http相对来说信息量比较大也较易于阅读,我就过滤了一下http协议进一步分析:

    sc1

    里面有些是明文传输的,比如像上面这个图片…不过,这里并没有什么敏感信息…

    接下来的两幅截图(关键部分已打码),则暴露了附近一位同学的校园网用户名和密码…对,net,mails,info,academic,learn,…,都是这个密码:

    sc31 sc4

    看http请求的目标地址,似乎是登录了usereg…然而事后和该账户的拥有者确认了一下,他并没有在这十几分钟时间里登录usereg…

    我怀疑是不是用了tunet(或者类似的校园网自动登录工具)?问了一下确实如此…

    tunet让这位同学密码泄露从可能变成了必然,因为看起来tunet会在连接到Tsinghua后自动登录usereg查看一下在线情况,而这一过程需要登录usereg,而usereg还没有使用https加密传输,于是密码泄露就是必然的了…

    如果把这样的路由器带到校内人流密集之处…嗯…有空要不要试试…

     
  • jinzihao pm1:27 on 2015年11月30日 链接地址 | 回复
    Tags: , 网络安全   

    暴力破解zip密码用ziperello就不错…无需注册码,看起来也没有病毒…至于速度,不敢说是最快的,不过密码为233的一个zip文件确实是秒出了…

     
  • jinzihao pm9:41 on 2015年11月29日 链接地址 | 回复
    Tags: 网络安全   

    本周末第一次参加了CTF(Capture The Flag)比赛,结果是以一题之差惜败…不过收获太大了,具体内容稍后更新…

     
  • jinzihao pm11:09 on 2015年10月13日 链接地址 | 回复
    Tags: 网络安全   

    阳光长跑app(天天课)协议分析 

    我校历史悠久的阳光长跑活动这学期有了一种新形式——用手机app记录跑步路径,过去傍晚时分紫操排队刷卡的盛况大概不会出现了,不光避免了拥挤,时间地点灵活了跑步也能多些新鲜感…

    但似乎这app比以往的刷卡机还不靠谱,在地图上瞬间移动几百米的情况常常出现,瞬移的少还能偷些懒,瞬移得多跑步记录恐怕就要作废了…

    这样不靠谱的app,大概找出点漏洞也不会很难吧…于是拿Wireshark在app上传跑步记录时抓了个包…

    (具体的,用装有Wireshark的一台电脑(我这里用的raspberry pi)开热点分享网络,手机通过该热点上传跑步数据,上传过程即可被开热点的电脑上的抓包工具抓到;本想通过同一局域网下的其他电脑,在混杂模式下抓包,但是抓不到…求高人讲解…)

    ttk1

    竟然是没有加密的http…明文的…接下来就导出看一看吧

    这是登录时发送的请求:

    (用户名和密码就是登录app时输入的用户名和密码,此处隐去)

    返回如下:

    (关键部分打码… u****表示一个utf-8编码的中文字符)

    拿着token和PHPSESSID,就可以进一步访问其他接口了,例如列出跑步记录,上传照片、加好友,甚至可以上传跑步记录…具体的接口请自行抓取吧,似乎找到了一个作弊的办法…

    ttk2

    一不小心跑步次数就从2次试成10次了…不幸的是没有删除记录的接口…体育老师不要打我…

    另外,app内上传的图片(跑步路径/跑后自拍)可以在没有登录的情况下访问到,例如:http://182.92.227.205/index.php?app=interface&mod=Resource&act=image&md=bf4a32d699561be2ba1225ad830528df

    会不会有隐私泄露的风险呢?这个md=后面的一串似乎是md5,但似乎查不出明文…不过当图床似乎还是可以的…

    另外,该apk似乎并没有进行某种加密/混淆,因此可以反编译…没搞过Android开发,就去下载了一个onekey-decompile-apk,成功一键反编译…所有用到的接口都在这个文件里:AppRequestClient,可以当作API文档来看了…

     
    • Aploium 下午6:40 on 2015年10月16日 链接地址 | 回复

      我三墩用打卡机=.=
      本来有一台出bug能进行操作,但是保安一直在…..这学期连触屏都封锁了
      拿不到数据_(:з)∠)_

      • jinzihao 下午2:10 on 2015年10月17日 链接地址 | 回复

        我们原来也是打卡机…没有触屏、没有按键,想不出什么进行操作的思路…
        本文中提到的app已经用不了了…估计是因为bug太多返厂了…
        对了,可否交换个友链?我先加上你的了…

    • chenyuan 下午9:42 on 2016年4月21日 链接地址 | 回复

      我三墩用打卡机=.=
      我们已经拿到后台webshell,ftp和数据库密码
      数据轻松insert。。。

      • jinzihao 下午1:06 on 2016年4月22日 链接地址 | 回复

        你们用的哪家的打卡机?是思博优吗?

  • jinzihao pm3:00 on 2015年9月25日 链接地址 | 回复
    Tags: , 网络安全   

    一些攻击记录 

    网站周三刚迁移完,黑客周四就登门造访了…看看apache的日志就看到了黑客留下的脚印…
    这些记录可以作为一个自查列表,基本上常见的WordPress漏洞都在其中了,还有一些是针对其他CMS的。
    如果我写个爬虫,就拿这份漏洞列表在网上随机的扫站,恐怕也成黑阔了…
    文末附有log的原始文件。
    View Fullscreen

    下载log

     
  • jinzihao pm8:38 on 2015年9月23日 链接地址 | 回复
    Tags: , 网络安全   

    更新:本文亮点在评论区 😉
    无论如何终于又可以发点东西了…这回过多久会被黑掉呢?

     
    • Death 下午10:40 on 2015年9月27日 链接地址 | 回复

      之前一个同学的Blog也是这样被人这么搞了……他当时还问我这样的攻击有没有效……
      似乎是有人扫VPS的IP段……然后批量攻击的结果……

      • jinzihao 下午2:25 on 2015年9月28日 链接地址 | 回复

        嗯…不过我觉得WordPress应该不会在过滤上犯这些低级错误吧…实际上Akismet就已经把这些评论给拦下了…我给手动恢复的…

        • Aploium 上午11:15 on 2015年10月7日 链接地址 | 回复

          准备设置禁止直接访问IP_(:з)∠)_
          某云加速也拦了一堆这些东西

          • Aploium 上午11:19 on 2015年10月7日 链接地址 | 回复

            ps:自从1个月前设置了裸IP强制https以后就没出现过这种攻击

c
写新的
j
下一篇文章/下一个回复
k
前一篇文章/以前的回复
r
回复
e
编辑
o
显示/隐藏 回复
t
回到顶部
l
go to login
h
show/hide help
shift + esc
取消