首先拿到一份源码 肯定是先install上。 而在安装文件上又会经常出现问题。
一般的安装文件在安装完成后 基本上都不会自动删除这个安装的文件 我遇到过的会自动删除的好像也就qibocms了。
其他的基本都是通过生成一个lock文件 来判断程序是否安装过了 如果存在这个lock文件了 就会退出了。 这里首先 先来说一下安装文件经常出现的问题。
这种的虽然不多 但是有时还是会遇到个。 在安装完成后 并不会自动删除文件 又不会生成lock来判断是否安装过了。 导致了可以直接重装过
例如某cms中的安装文件
有些cms 有的时候会限制用户输入的长度 这样只允许输入32个字符 而且uchome里面的这个也没有像dz那样截取字符的后面加... 那么如果我们提交一个1111111’ 如果又是double query的话 吃掉一个单引号 然后下一个连着的可控变量又可以注入了。 结果在uchome中找到了个能引入转义符的 结果只有一个可控的。 绕过限制继续注册GLOBALS变量不知道放哪。这个也放到注入板块来把。。 其实就是这次的DZ6.X 7.X 那个任意代码执行的漏洞 主要关键代码就上面这两段。 这里把GET POST COOKIE 循环出来 然后注册一个变量 但是 这里不允许创建GLOBALS变量 然后DZ7.X 就是用这样处理的 如果设置了REQUEST 的 GLOBALS 这段代码在很久以前确实是没什么问题 而且这后面也把COOKIE循环出来 注册变量 所以这里我们在COOKIE里面提交GLOBALS 就不会被检测出来了。 而且也成功注册了GLOBALS变量。 所以在结合后面的一些些代码就造成了代码执行。 以上就差不多是我经常所遇到的注入问题 好像暂时也想不到其他什么的了 下面介绍一些我在cms遇到的找回密码时候犯得错误。 找回密码很多都是验证的token 就是在找回密码的时候生成一个token 然后存储到数据库中。 然后把找回密码的地址发到邮箱中 url中就含有token 由用户点开后就能修改密码 基本就是验证的这个token。 其实一般的可以找回任意用户密码的原因就是弱token 导致可以被攻击者搞到。 包括很多厂商验证的时候就是四位纯数字啥的。 可以枚举。 当然也可以延伸一下, 一些cms的密码加密方式很难破掉。 有时候我们拿到了管理的密码破不掉也是鸡肋。 所以有时候也可以利用这种方法 一般找回密码是用的邮箱 首先我们可以注入把管理的邮箱注入出来 然后再去找回密码 再把数据库的token注入出来 再构造一下地址 就能重置密码。 这个给我印象比较深的是 在ssctf的比赛中嘛 当时机油问了问我 那wordpress那题 有个插件的注入 然后因为都知道wp的加密基本很难破。 所以也是用的这种方法。 因为一般都是弱token的问题 随便找几个例子了 可以看到这个生成的token 就是对rand()函数生成出来的数字进行md5一次 注释:在某些平台下(例如 Windows)RAND_MAX 只有 32768。如果需要的范围大于 32768,那么指定 min 和 max 参数就可以生成大于 RAND_MAX 的数了,或者考虑用 mt_rand() 来替代它。 如果不指定一些参数的话 那么最大值才32768 一个并不算大的值 那么我们首先对这32768种可能 md5出来一个列表 然后我们直接枚举这32768种可能 总会有一个对的。 修改hdwiki任意用户密码这里带入算法的是时间 这里是我们可以知道的。 例子: //绕过补丁继续找回hdwiki任意用户密码 一般的上传漏洞可能是未验证上传后缀 或者是验证上传后缀被bypass 或者是上传的文件验证了上传后缀但是文件名不重命名。 对于那些验证了后缀但是文件名不重命名的 当然 毕竟截断鸡肋了。 上面提到过限制条件了。 还可以是结合各种webserver的解析漏洞 如果不重命名的就上传这样就行了。 Apache解析漏洞 yu.php.xxx 在最后一个后缀识别不出来的时候 那么就向上解析 像phpweb后台那个上传漏洞。很多人遇到apache的时候 无法截断的时候就上传一个yu.php.jpg 有些人比较疑问的是为啥有时候成功有时候失败。 所以在windows下 就直接识别成图片了 而不是.php 这些解析漏洞在上传中也挺经常遇到的。 上传的验证一般是 MIME、客户端的JS验证、白名单、黑名单。 白名单就是允许用户上传哪些后缀的。 黑名单就是禁止用户上传哪些后缀的。 这两种相比来说一般是黑名单容易bypass一点。 黑名单的绕过还是得具体看他黑名单的代码。 有的直接大小写就过。 有些没对文件名trim的 直接在文件名后面加空格。 Windows下的 文件名后%81-%99 decode后的 或者是windows下的特性 .php::$data 这样上传上去依旧是.php 其实上传还挺重要的。。 但是我又不知道说哪些。 还是具体看代码把。 这个主要是涉及到的是 任意文件删除 任意文件复制 任意文件重命名 任意文件移动 任意文件下载……。 因为像现在的cms很多都自带得有加密 解密 函数 例如qibocms的mymd5 Dz的authcode 啥的。 对于这些任意文件操作的 首先可以试试拿到配置文件中的数据库的连接帐号和密码 尝试外联一下 但是很多时候都是只允许本地连的 很多时候不好利用的时候可以利用拿到配置文件 然后拿到这些函数的key 然后自己生成一个加密的字符串 然后再结合具体的代码进行最大化的利用。 一般是挺不好利用的,还是结合具体的场景,有些因为全局的过滤而不能注入的,可以尝试用任意文件删除,删掉这个文件,再进行注入 一般的利用还是通过删除安装文件生成的lock文件,然后达到重装。 任意文件复制 / 任意文件移动 / 任意文件重命名复制的话 肯定涉及到了 要复制的文件 要复制到的路径。 如果是要复制的文件可控 要复制到的路径不可控的话 例如qibocms之前的一个洞 这里$value 是可控的 但是又不能截断 复制到的路径限制了.jpg结尾。 这时候我们就可以把$value控制为 保存了qibocms的加密函数的key的配置文件 然后复制后 成了一个.jpg 那我们就可以直接打开 看到key了 如果两个都完全可控的话 那肯定是直接把自己的图片复制成一个.php马儿了。 其实跟上面复制差不多, 很多时候也是通过下载配置文件 拿到key。 再进行各种操作。。 这个例子还涉及到了一个win的特性bypass 黑名单 这种问题主要是想进各种办法把这些加密函数的key拿到 或者想办法加密一些特殊字符然后拿到加密的字符串 加密函数肯定就涉及到了各种算法。 算法问题一般主要是因为一些弱算法 导致了 知道明文 知道密文 可逆 拿到加密函数中的key 从而再自己生成一个自己想要的加密字符串。 再结合具体的点 然后进行具体的利用。 还有的一类算是 一个点 要加密的是我们可控的 而且密文会输出 而且这个可控的点能引入特殊字符 那么我们就把一些特殊字符带入到这里面 然后拿到密文 再找到一处decode后会进行特殊操作的点 然后进行各种操作。 寥寥草草的把这篇文章写完了。 比自己预期想的少写了很多, 因为在一开始写的时候还是挺有感觉的。 因为读书一个月也才放一次假, 都是抽时间在慢慢写着。 后面差不多写了1W字的时候,存稿竟然丢了, 弄了半天也没找回 就感觉不想写了, 后面又翻了翻 找到了一篇自己之前保存的写了差不多两三千字的 然后就再慢慢的开始写了, 也就草草的结束了。 当然这里只是总结了一些常见的类型, 肯定在实战中会遇到各种各样的情况 各种过滤啥的。 各种逻辑错误需要自己慢慢去体会了。 |