专栏首页FreeBuf对自助提卡系统的一次代码审计

对自助提卡系统的一次代码审计

前言

并非有意愿要审计该站,前面的走的黑盒没有过于精彩部分就不在贴上了,对于此系统站你们懂的,多说无益,这套程序是开源的,像这种自助提卡系统相信大家已经不在陌生了,很多违法网站通过这种平台方式提卡密的相当于购买邀请码,源码是小伙伴提供的,采用的是php+mysql进行开发的24小时自动售卡平台,废话就不多说了。

相关环境

源码信息:你猜啊

漏洞类型:Forwarded-For注入

搭建成功之后如下 :

看到如下页面是不是有似曾相识的感受:

上图是安装过后的首页,就是一个提卡网,继续吧!

这是首页文件,进去首先判断了install目录下的lock文件是否不存在并且判断是否有index.php文件,如果满足以上条件就跳转到install目录下的index.php,我们跟进install/index.php文件:

这里我们只看判断是否安装过程序,判断是否存在lock文件并且step不等于5的情况下就执行判断语句中的代码,当然这里如果header函数后没有exit就会存在重装漏洞。

我们接着看index.php,光是index.php文件就用413行代码,代码都不规范,所以我们先看看其它文件,看看api.php文件:

这里很明显我们看到了SQL注入,首先判断是否设置$_POST[“dh”]不为空则将该参数拼接到SQL语句中,看到这里就可以判断出该程序存在联合查询注入,可是$config哪来的,这个文件也没包含其它的文件啊!!!怎么办呢?那么我们就来找找index文件中是否包含了api.php,search一下

可以看到在294行这里包含了api.php文件,我们构造下放入sqlmap中玩一玩。

Python sqlmap.py -u “http://localhost:8081/index.php” --batch --dbms=”mysql” --data=”dh=a”

这里可以看到注入类型确实是联合查询,我们接着尝试下这个提卡网是否存在SQL注入。

Python sqlmap.py -u "http://lxxxxx.pw/index.php" --batch --dbms="mysql" --data="dh=a"

我们尝试本地站点的时候毫无问题,为什么这个提卡网就没有存在这个问题了呢?很明显这个网站可能是升级或者二开发过的,我们接着看看其它点,进入./pay/pay.php文件:

代码过多就不一一贴图出来了,主要构成漏洞的代码就在这其中,我们从38行开始看着走。

这里判断$_GET[“type”]等于delete的时候则执行40-49行的代码,41将获取到的ip拼接到sql语句中,我们看看ip函数:

这里可以看到程序获取ip可以从客户端的头参数中获取,分别为HTTP_X_FORWARDED_FOR,HTTP_CLIENT_IP,这个函数真的仅仅是获取外部传递的参数的,一点也没有过滤,我们看到了这里就可以嘿嘿了,基本上这个网站拿下了,我们接着看看,回到41行,再看下边的,我们不宜在这里进行SQL注入,因为接着会将查询到的值又进行下一个SQL语句的拼接,这样返回值就不准确,用工具的过程就很难判断了,我们跳出这里的判断,看看51-54行分别判断_GET[‘money’]_GET[‘pwd’]这几个参数存不存在,所以我们这里可以这样构造get参数:

type=a&money=1&title=adssad&pwd=123

我们接着看下边的,第58-65行,首先是判断了type是否等于zfb,若不等于则退出当前程序并打印Tip:Type error!,所以我们还得接着改改get参数:

type=zfb&money=1&title=adssad&pwd=123

接下来,可以看到67行中再次将获取到的ip拼接到了SQL语句中,我们这样来,在67行的下边打印出当前执行的SQL语句

好了,现在我们打开burp进行抓包,然后伪造ip进行一系列的嘿嘿了,因为./pay/index.php中包含了pay.php,所以我们对index.php进行注入就好

复现

访问http://localhost:8081/pay/index.php?type=zfb&money=1&title=adssad&pwd=123,付款码页面:

可以看到这是一个很正常的页面了,并且打印出了SQL语句,我们抓包:

正常页面:

错误页面:

好的,现在看到了吧!我们放到SQLmap中跑一下看看,我们将这个数据包保存到文本中,并且标注注入位置:X-Forwarded-For这个注入还自带绕过waf功能,因为很多waf不会检测hander参数。

Python sqlmap.py -r test.txt --batch --dbms="mysql"

我们对那个网站测试一番,访问:http://lxxxx.pw/pay/index.php?type=zfb&money=1&title=adssad&pwd=123

可以看到缺少 “spid” 参数我们加上继续访问,页面是支付宝扫码支付 - -RL吧论坛邀请码:

http://llxxxxx.pw/pay/index.php?type=zfb&money=1&title=adssad&pwd=123&spid=1

把该数据放到文本中,接着进行测试:

Python sqlmap.py -r test.txt --batch --dbms="mysql"

成功挖掘到了该网站的漏洞,继续。

Python sqlmap.py -r test.txt --batch -D yulinxscom --tables
Python sqlmap.py -r test.txt --batch -D yulinxscom -T admin --dump

拿到了管理账号及密码。接着访问。

默认后台:http://lxxxx.pw/admin.php

由于之前进去过一次,让他亏损了点钱,现在后台的名字也改了 。

写在结尾

跟此网站的搭建人聊了会,从去年11月份搭建平台以来已获利普通人一年的薪资。为了养家糊口,冒此风险也是不容易,切勿为了蝇头小利以身试法,就这样做个记录,到此为止吧。

文中提及技术细节,仅作交流,请勿用于非法活动!!

*本文原创作者:FK_T,本文属FreeBuf原创奖励计划,未经许可禁止转载

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP代码审计实战思路浅析

    对于面向过程写法的程序来说,最快的审计方法可能时直接丢seay审计系统里,但对于基于mvc模式的程序来说,你直接丢seay审计系统的话,那不是给自己找麻烦吗?

    FB客服
  • 通读审计之AACMS

    其实没什么好说的,该cms不是主流的cms,但是感觉该cms是一篇很好的MVC框架的例子,故记录下来。给大家分享一下自己代码审计的经验。

    FB客服
  • 【新手科普】盘点常见的Web后门

    在对一个web站点进行渗透测试的渗透攻击阶段,一般会想办法突破上传限制,向目标可执行目录中写入一个带有攻击性质的脚本来协助获取更大的服务器权限。 这里我们就一起...

    FB客服
  • 如何在Fedora 22上安装LAMP(Linux,Apache,MySQL,PHP)

    LAMP堆栈是一组用于启动和运行Web服务器的开源软件。首字母缩略词代表Linux,Apache,MySQL和PHP。由于服务器已经在运行Fedora,因此需要...

    风研雨墨
  • python入门系列----环境搭建

    可在官网下载, 一般是龟速下载, 可通过淘宝镜像站下载: https://npm.taobao.org/mirrors, 推荐点此直接下载

    devecor
  • C/C++中的abort、atexit、exit和_Exit

         这几个函数都在头文件#include <stdlib.h>中声明。exit、_Exit与abort函数使程序终止,控制并不返回到这些函数的调用者。 e...

    用户1221057
  • ring0下注入DLL

    最近有在做一个东西,需要在ring0下拦截进程启动并注入DLL(dll用于hook ring3下的API),很多种实现方法,此处采用sudami大神提供的思路,...

    战神伽罗
  • 机器学习|AdaBoost

    对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易的多,提升方法就是从弱学习算法出发,反复学习,得到一系...

    数据山谷
  • 由浅入深的域渗透系列一(上)

    二、漏洞利用 3.漏洞搜索与利用 4.后台Getshell上传技巧 5.系统信息收集 6.主机密码收集

    重生信息安全
  • 职责链模式

    所谓职责链模式,其实在现实中非常常见,比如你要提出一个申请,首先可能通过你的组长,你的组长没有权力审批时会上报到经理,经理没有权力审批时上报到总监,总监没有没有...

    用户1148394

扫码关注云+社区

领取腾讯云代金券