首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Raccoon web Writeup

PHP 后门分析

李大猫在他的 WordPress 博客里发现了被黑客植入的 PHP 后门,快帮他分析分析这个后门要怎么利用吧

create_function() 与 eval() 有同样的危险性,可以注入恶意代码。

此题只需将 进行 base64 编码,再传进去就 OK 了

抓包和改包

满足以下全部条件就能获得 flag

将 HTTP 请求方式修改为 POST

添加 HTTP 请求头“X-Give-Me-Flag”,值为 1

将包含浏览器标识的 HTTP 请求头的值修改为“Flag Browser 1.0”

将 Cookie 中“auth”的值修改为 117.29.42.247

POST 键名为“action”,值为“readflag”的数据

这题比较简单,直接用 Burp 改一下就 OK 了

Javascript Tricks

nc 45.32.250.222 8082

初步思路:把 data 暴力跑出来,再 nc 提交一下

The user admin

这道题涉及到PHP的代码审计,PHP的伪协议,PHP的序列化,PHP魔术方法,涨了不少姿势,

趁着写 Writeup 把思路再梳理一下。参考博客1 参考博客2

乍一看,玄机只可能在 class.php 里面,现在就是寻找满足 if 的这个条件。

问题变为,怎么读取 $user 之后得到 “the user is admin”。

这里涉及到一个 PHP伪协议,,可读取没有处理过的 POST 数据。详细讲解 大佬讲解

再来了一个 PHP伪协议,,可用来读取base64编码后的源代码。

解码之后,得到 class.php 的源代码

看一下 index.php 源代码

总结一下思路,flag 就隐藏在 f1a9.php 里面,但是无法直接读取 f1a9.php 内容(被preg_match过滤),只能通过Read 这个类中 __tostring() 方法,而这个方法再创建对象时就会被调用。能作为输入接口的就只有 pass 了,pass 这里又会反序列化再输出,所以利用 echo $pass; 来创建对象就可以了。

创建序列化对象

最终执行

Easy waf

随手扫一下后台,得到了一个 www.zip 的源码包,然后就是代码审计了。

一开始毫无经验,看了好久的源码之后,还是不知从何下手,顺手把 PHP 和 MySQL 基本用法学了。

第一想法是 和 可以注入,毕竟过滤函数不会对他们进行处理。

后来发现 可以注入,最终在 中找到 的来源,就是数据库中的键。

GET、POST都被直接过滤了,试试 cookie 注入,手工注入不太会,先跑跑 sqlmap 试试。参考博客

==手注版==(吴乾豪提供) 以后再整理一下

咕咕 shop

听说 咕咕shop 上有个积分上万的人,你能越权消耗他的积分,购买到 FLAG 吗?

哈希长度扩展攻击 相关工具 参考博客 Hashpumpy

HTTP参数污染

HTTP参数污染,简单地讲就是给一个参数赋上两个或两个以上的值。现行的HTTP标准没有提及在遇到多个输入值给相同的参数赋值时应该怎样处理。因此web程序组件在遇到这类问题时采取的方法也不完全相同。在一个HTTP请求中,同一个参数,拥有多个值是合法的。利用此特性,可以作为绕过参数过滤的手段。

百度会理解成让百度搜索:110 #选择了第一个参数,放弃了第二个参数。

雅虎会理解成让雅虎搜索:911   #选择了第二个参数,放弃了第一个参数。

谷歌会理解成让谷歌搜索:110 911 #两个参数同时选择。

假设输入 ?key=select & key=1,2,3,4 from table

服务端有可能会将key处理为select 1,2,3,4 from table,从而导致SQL注入。

信息收集:

泄露在源码中的注释是解题和渗透的关键,从此处可得到 signature 的原文组成:solt + confirmation()

这里还有一个小知识点,form 被 js 中的序列化成字符串,如

(这种 js 可直接通过 F12 中的终端来运行)

关键点:

1.利用哈希长度扩展攻击跑出密钥长度

2.利用 HPP 实现越权“购买”

==shell版==:第一想法是先生成字典,然后放到bp里跑,结果失败了

==py版==:还是py给力,以后全用py吧

如果 solt 长度正确时,post 中添加一个无关的值,仍然不会影响购买,由此可得出密钥长度。

得到长度后,就是参数污染了。

直接添加失败了,换了不少姿势。

突然想到题面的信息:有个积分上万的人,你能越权消耗他的积分,购买到 FLAG 吗?

==划重点== 用别人的钱买flag ==划重点==

然后就是换,第一反应是 0、1 ? 不,没用,直接挂个脚本尝试下。31,购买成功!

期间遇到的麻烦:页面找不到。最初以为是自己误删了某个信息,重新复制一下仍然报错。

如果请求成功,但是请求的内容不存在,自然会报错,就比如说利用 buyer_id = 666 来买 flag,也会报错。报错的话就改参数就好。

到此,flag 已经买到了。当时候还没反应过来,想着再买一次,去看一下订单,flag 已经出来了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190116G00A3F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券