零、前言
最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。
一、基本原理:
1、代码注入和命令注入的本质:
用户输入没有经过过滤而且与程序员开发的代码拼接后构成完成的可执行的代码段被服务器执行(命令也是代码的一部分,不过是拼接在命令执行类函数或方法的参数里面而已)。
2、命令注入举个例子:Python重度用户(迷汉子)
@app.route("/osinject")
def osinject():
command = request.args.get("cmd")
response = os.popen(command).read()
return jsonify({"result":response}) #这是一个flask的一个函数例子:
"""
command 就是输入
可以构造http://127.0.0.1:5443/osinject?cmd=ping%20-c%205%20192.168.10.135|whoami
就可以执行whoami了
"""
3、代码注入例子:
//www.local.com
/*
/codeinject/code.php
http://www.local.com/codeinject/code.php?code=phpinfo();
*/
<?php
@eval("$_GET["code"]")
?>
4、php、java、python中常见的可以进行命令注入或者代码注入的函数:
(1)php的:@我自己,我自己就写过一遍关于这类函数的小日志,可以访问看一下:http://www.cnblogs.com/KevinGeorge/p/8127054.html
(2)python的:
-*-command:system\popen\subprocess.call\spawn
-*-code: map\filter\reduce\...
'''
python 函数名可以直接作为普通函数的参数的,理论上,如果定义了这样的函数都危险
'''
def myreduce(funcname,param):
return funcname(param)
(3)java的:
-*-command:java.lang.Runtime.getRuntime().exec(command)
_*_code:不太懂java,这方面的接触实在不多,囧。
二、漏洞挖掘:
1、在请求中出现的位置:
(1)POST和GET参数中
(2)URL的filepath或者filename中(类似thinkphp的伪静态,或者python的url_for构造的一类)
2、特殊的OS命令注入经常会出现在的业务位置:
1、系统web管理界面的系统信息配置点:hostname、ipaddress、netmask、gateway、dnsserver、email等。
2、功能类网站工具:ping、tracert、nslookup等
3、文件查找或者操作功能:find、locate等
4、系统信息查看类功能:cpuinfo、meminfo等
5、关闭重启类操作、shutdown、ifconfig up、reboot、poweroff等
三、常用payload模式:
1、| ,& ,&&,||等操作