零、前言

  最近做专心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、| ,& ,&&,||等操作    

   (1)& 表示先执行CMD1 再执行CMD2,这里不考虑CMD1是否成功。使用CMD1 & CMD2
   (2)&& 表示先执行CMD1,成功后再执行CMD,否则不执行CMD2。使用CMD1 && CMD2
   (3)|| 先执行CMD1,CMD1执行成功就不再执行CMD2,CMD1执行失败则执行CMD2。使用CMD1 || CMD2
  2、payload(& / ‘ “ 空格等特殊符号需要时编码)
   (1) cmd = 127.0.0.1 | whoami
   (2) cmd = 127.0.0.1 & whoami
   (3) cmd = 127.0.0.1 && whoami
   (4) cmd =  `whoami`
   (5) cmd = '/"|whoami(这里意思是用'/"引号闭合前面   /->表示或)
  3、常用的命令
   (1) 有回显的:whoami    id(验证类)
   (2)  没有回显的:nslookup wget 等看请求、dnslog httplog等 (验证类)
   (3)弹shell必须的,参考我自己的(http://www.cnblogs.com/KevinGeorge/p/8120226.html) 
  4、代码注入:
  (1)php的:检测phpinfo();攻击代码任意。
  (2)python的:import time;time.sleep(20),攻击代码任意。
  (3)java的:我是弱鸡想不到啊。
四、防御:
  1、禁止相关函数
  2、过滤输入
  3、制定可输入内容

  

    

    

WEB安全第一篇--对服务器的致命一击:代码与命令注入的更多相关文章

  1. 跟bWAPP学WEB安全(PHP代码)--OS命令注入

    背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...

  2. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

  3. Jersey+mybatis实现web项目第一篇

    ---恢复内容开始--- Jesery第一篇:实现Jesery前后台页面交互,Form表单提交,后台控制页面跳转 该项目中有实现的功能: Mybatis实现后台数据持久化 Jersey页面数据提交 后 ...

  4. 实现手机扫描二维码页面登录,类似web微信-第一篇,业务分析

    转自:http://www.cnblogs.com/fengyun99/p/3541249.html 关于XMPP组件的文章,先休息两天,好歹已经完整的写了一份. 这两天,先实现一套关于web微信扫描 ...

  5. 阿里云一 第一篇:云服务器ECS

    阿里云(www.aliyun.com)创立于2009年,是全球领先的云计算及人工智能科技公司,为200多个国家和地区的企业.开发者和政府机构提供服务.截至2017年3月,阿里云付费云计算用户达87.4 ...

  6. IOC容器特性注入第一篇:程序集反射查找

    学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...

  7. 第一篇web框架

    第一篇web框架 http协议 web应用和web框架 主 文 http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维 ...

  8. (第一篇)记一次python分布式web开发(利用docker)

    作者:落阳 日期:2020-12-23 在一次项目开发中,决定使用docker+nginx+flask+mysql的技术栈来开发,用此系列文章记录开发的过程. 系列文章,当前为第一篇,记录一次pyth ...

  9. 【Web探索之旅】第三部分第一课:服务器

    内容简介 1.第三部分第一课:服务器 2.第三部分第二课预告:IP地址和域名 第三部分第一课:服务器 大家好,欢迎来到[Web探索之旅]的第三部分.这一部分有不少原理,还是很重要的. 这一部分我们会着 ...

随机推荐

  1. 记一次坑爹的golang 二维map判断问题

    记一次坑爹的golang 二维map判断问题 2018年10月18日 23:16:21 yinnnnnnn 阅读数:32更多 个人分类: golang   版权声明:本文为博主原创文章,未经博主允许不 ...

  2. 说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别

    $POST $_POST是我们最常用的获取POST数据的方式,它是以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换,识别的数据类型是PHP默认识别的数据类型 app ...

  3. 『Golang』Martini框架入门

    本文介绍golang中的优秀web开发框架martini! 序 Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架.Martini是一个专门用来处理Web ...

  4. ionic2 生命周期

    在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 官方文档地址在 这里 . 事件名称 事件说明 ionViewLoaded 页面加载完毕触发.该事件发生在页面被创建成 DOM 的时 ...

  5. android listview 总结

    ScrollView与ListView冲突: public class MyExpandableListView extends ExpandableListView { public MyExpan ...

  6. tensorflow学习笔记(10) mnist格式数据转换为TFrecords

    本程序 (1)mnist的图片转换成TFrecords格式 (2) 读取TFrecords格式 # coding:utf-8 # 将MNIST输入数据转化为TFRecord的格式 # http://b ...

  7. 在jsp中,page指令的()属性用来引入需要的包或类。

    在jsp中,page指令的()属性用来引入需要的包或类. A.extends B.import C.language D.contentType 解答:B

  8. nodejs基础 -- NPM 使用介绍

    npm:是nodejs的包管理工具,随NodeJS一起安装的,能解决NodeJS代码部署上的很多问题,如: 1.允许用户从NPM服务器下载别人编写的第三方包到本地使用. 2.允许用户从NPM服务器下载 ...

  9. 矩阵的特征值和特征向量的雅克比算法C/C++实现

    矩阵的特征值和特征向量是线性代数以及矩阵论中很重要的一个概念.在遥感领域也是经经常使用到.比方多光谱以及高光谱图像的主成分分析要求解波段间协方差矩阵或者相关系数矩阵的特征值和特征向量. 依据普通线性代 ...

  10. erlang二进制的难理解的地方,有点神奇

    40> <<A:16>> = <<1,2>>.<<1,2>>41> <<B:16/bits>> ...