声明:
1、此代码所用到的测试地址来自掌控者安全学院公开课靶机环境,如果有侵权请联系本人删除
2、本文中讲解的的注入原理及测试代码仅用于学习交流,禁止用于任何形式的网络攻击,对此产生的任何问题均与本文作者无关
首先我们需要了解下盲注的核心逻辑是,判断页面存在注入点,然后通过length函数和ascii函数不停测试查询内容的回显,以此来判断数据库表,字段的名称。
length函数判断查询内容的长度。
ascii函数将字符转换为ascii码。
盲注其实也有点穷举爆破的意思,所以需要大量的测试,盲注一般只需要手动判断一个注入点,然后使用工具进行测试。
盲注核心的sql语句。
1、数据库名称长度的判断。n为变量,通过不断变换n的值一次判断database()的长度
and length(database()) = n
2、数据库名称的判断。mysql中如果直接使用字符进行比较,mysql会自动进行隐式转换,但mysql的隐式转换存在问题;例如:a=a,a=A,都会判断为相等,_>a也会判断为成立等问题。所以稳妥期间建议使用ascii函数进行转换,使用数字进行比较。代码中我使用了二分法,通过二分法快速缩小匹配分外,然后再使用=值进行精准定位。最后将num再转换为字符。
and ascii((database())) <= num
and ascii((database())) = num
3、以上是最核心的判断逻辑,下文中的表名判断,列名判断只列出核心的sql语句,不做过多的分析解读(只列出子查询部分)。
表名判断:
select table_name from information_schema.tables where table_schema=database() limit 0,1
列表名判断,$table_name是一个变量,是上一步中获取到的表名。这里的表名是字符串,一定要加单引号或者双引号:
select column_name from information_schema.columns where table_schema=database() and table_name=’$table_name’ limit 0,1
以上是sql盲注的核心思路和命令,下面是具体的代码实现逻辑,相关逻辑已在代码中备注:
代码使用方法:
1、初始化一个mysqlmap的类,传入一个确认的注入点
2、调用get方法获取database,table,column的名称
备注:代码未实现完,后续待完善的功能。
1、实现一个多线程,一个sqlmap执行的,一个查询的
2、实现一个memorycache的功能,将扫描过的url缓存下来
3、补充一个具体字段的获取函数,这个时候写这个函数才有意义
4、后续还可以补充一个定位sql注入点的类,具体能力是快速获取网页上的输入点,然后解析出入参,尝试进行注入点判断,感觉有点偏bs4库的能力,解析html和定位其中元素
5、大致逻辑就是把快速扫描,注入点定位,sql注入,可能后续还会有漏洞渗透等。市面上有肯多类似的工具,我的构思是把这些工具全部联动起来,全自动化渗透。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-劲夫 | 80.00 | 0 | 2022-08-12 14:02:20 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
mysqlmap.zip 文件大小:0.003M (下载次数:12)
© 2016 - 2024 掌控者 All Rights Reserved.