零、前言

  最近做专心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. 【SpringMVC笔记】第四课 注解的处理器映射器和处理器适配器使用

    一.注意点: 版本问题 spring3.2以前的版本,注解的映射器和适配器使用以下两个类. org.springframework.web.servlet.mvc.annotation.Default ...

  2. C++实现最少硬币兑换问题

    最少硬币兑换问题 #include<iostream> #include<fstream> using namespace std; int n,L; //n种硬币L长的数组 ...

  3. [转]Python与设计模式

    一.创建类设计模式 前言 什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的事,而“学会”一门编程语言是非常难的一件事.前一个“会”强调 ...

  4. [LintCode]判断一个字符串是否包含另一个字符串的所有字符

    问题描述: 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母. 样例 给出 A = "ABCD" B = "ACD",返 ...

  5. 怎样统计分析CSDN博客流量

    第一.IP.PV和UV各自是什么意思? IP.实际上也就是指独立IP,它的英文为Internet ***otocol,是独立IP数的意思.00:00-24:00同样IP地址记录一次.即使你有多台电脑. ...

  6. centos 部署 SparkR

    ---恢复内容开始--- 环境配置—— 操作系统:CentOS 6.5 JDK版本:1.7.0_67 Hadoop集群版本:CDH 5.3.0 安装过程—— 1.(1)安装R yum install ...

  7. 轻松使用jquery解析XML

    xml文件结构:books.xml <?xml version="1.0" encoding="UTF-8"?><root>    &l ...

  8. [oracle] oracle的三种密码验证机制以及在windows和linux下的不同启动过程

    oracle数据库的密码验证机制: ① 操作系统验证 拥有SYSDBA和SYSOPER的用户用该方式验证此时数据库无需启动,也无需开启监听和实例服务. 要求:本地组ora_dba中有该操作系统的登录用 ...

  9. Oracle中查询主键、外键、sequence、表基本信息等

    一次看到某张表中有几条ID相同的数据,通过业务确认该ID应该是唯一的,后来找到原因,因为DBA未对该表建主键. 现在DBA工作比较忙,我们项目有时需要新增或者修改数据库表结构时,可能需要对表结构进行确 ...

  10. Unity的Asset Store商店下载文件路径

    如果之前在Asset Store商店下载过资源包,结果下次用的时候找不到了,不用急,其实Unity把它自动保到下面这个目录了,最后一个文件夹名与版本号有关,找到前面的即可. C:\Users\Admi ...