前言
之前有粉丝投稿过一篇对钓鱼网站的代码审计,然后就有位老哥给我发了另一套还算比较新的钓鱼网站的源代码让我玩玩。源码收到后拖了好几天终于抽出一点时间来审计一下并记录此文。(打工人就是一块砖,哪里需要往哪里搬~)
钓鱼网站介绍
通过本地搭建该钓鱼网站,发现这是一个通过抓取转转交易网、猎趣交易网等页面的,伪造真实的商品购买页面进行钓鱼,受害人下单了但是钱却不是走官方平台交易,而是进了骗子的钱包,而受害者也不会真的收到购买的商品。
前台钓鱼页大概长这样~(随便生成了一个)
页面还是很逼真的~
后台长这样:
代码审计
一、自带php大马后门
路径:/detail/js/jb666.php
没什么可说的,作者偷偷加的后门用于黑吃黑~
二、垂直越权漏洞
打开后台登录页面/admin.php
输入正确的账号密码admin/admin888,走一下登录流程
根据action跟踪到/admin/index.php
继续跟到/admin/function/admin_login.func.php,发现这里有一个创建cookie的函数,键为“Aname”,值为变量$_Aname的值
继续往下看,发现登录成功了之后其实就是将前面“Aname”的值改为数据库中admin_user表中的标识登录的au_name的值
对比登录前后的cookie,其实只是多了一个“Aname=admin”
所以说我们访问需要权限验证的页面,只需要在cookie中加上“Aname=admin”就可以用管理员的身份去登录了
其他页面判断是否登录的逻辑也是这样
三、未授权的文件上传
路径:/admin/pluploadajax.php
这是一个文件上传功能点,写的也比较简短,代码如下
可以看到采用白名单的形式,通过判断后缀是否在白名单数组中来判断是否允许上传。
此处还对上传成功后的文件以时间+随机数的方式进行了重命名,所以任意文件上传漏洞是没有了。
但是可以注意到,这个功能点的执行没有经过任何身份上的验证,而这个功能点为后台添加商品图片的上传功能点。
我们可以在不登录的状态下就可以实现文件上传。虽然只能上传白名单里面的文件类型,并且有大小控制。不过对于钓鱼网站,我们可以无限重放上传的数据包,来塞满钓鱼网站管理员(服务器的硬盘~)。
四、钓鱼页sql注入
路径:/liequ/index.php
可以看到这里直接将$_GET[ClickID]带进了sql语句中去执行,没有任何的保护。
mysql_query("UPDATE goods SET hits = hits+1 WHERE goods_id = $_GET[ClickID]; ");
翻到头部,可以发现这是一个提供访问的页面,也就是说下面的代码允许被外部访问执行。
根据代码逻辑找到后台的功能点
所以注入点就在管理员对外发出去的钓鱼页面的url,比如说我这里为:http://test.com:8888/liequ/?i=344454208448619627y.shtml&liequSourceFrom=405768498802247074p&ClickID=13
注入点就在ClickID这个参数了,其实这个不用审计光黑盒fuzz也能出来~~
五、储存型xss漏洞
xss漏洞一般从功能点出发,xss的触发页面必须要打到管理员才行。
我们先看后台功能点,发现从外部获取并展示到后台的内容,好像只有钓鱼收集的信息。
那我们就从这里入手吧,这里是用iframe嵌入的,邮件找到框架地址http://test.com:8888/admin/?Admin=Goods_OrderList1
根据url可知是调用/admin/index.php这个文件,参数为Admin=Goods_OrderList1。
跟踪到/admin/index.php里面去看一下。
包含文件/admin/template/Goods_OrderList1.inc.php,再跟过去看看。
找到显示的地方,发现是直接echo出来的,没做其他的处理,比如说收货人为$_List[‘uname’]
收货人$_List[‘uname’],我们继续追踪,看看这个$_List有没有经过处理。
没看到有对“收货人”内容进行处理的地方,我们再继续到传入点去看看。
传入点就是从管理员发出去的钓鱼页面,一步步点到收货信息那一个填写的表单,我这边为http://test.com:8888/liequ/address.php?gid=13
跟踪到/liequ/address.php,发现就是一个简单的表单,也没做其他的处理。
提交测试一波,发现成功触发xss
不止这一处,其他地方同理~
这个从黑盒的角度也会怀疑到xss的问题,不过只能靠盲打一波~不过我还是选择第二条中的越权更方便~~
六、后台sql注入
这里是后台还是前台注入都不重要,因为根据前面第二个越权的漏洞,后台随便进~
后台选择一个商品修改或者添加商品都一样
就拿这个“浏览量”来说
该表单提交的地址为/admin/?Admin=GoodsCommand2&action=edit&id=13,其中浏览量的对应的字段为“hits”
同样根据action跟踪到/admin/index.php
再继续跟到/admin/function/goods_carried1.func.php,因为这里是将表单中我们编辑的内容保存到数据库,所以对应的是一个insert。
同样没有加任何保护措施,测试触发注入成功
当然,不止“浏览量”这个字段,通过上面的代码可以发现,刚刚提交的所有字段都存在~
文章来源:台下言书