SQL注入(8):sql注入文件上传
除了在页面查询数据库内容外,SQL注入还有另外一种利用方式:利用MySQL在服务器的写权限,上传我们的文件,以达到拿到Web Shell的目的。
要点
show variables like '%secure%';:用于查看MySQl是否具有读写文件的权限
查询返回的secure_file_priv有三种状态:
空 ——对于整个硬盘数据都可以读写
特定路径——只能在指定路径下面读写
NULL ——不能在服务器上进行任何读写
into outfile:写入服务器文件;例如into outfile "D:\\phpstudy_pro\\WWW\\test.php",D:\\phpstudy_pro\\WWW\\为文件写入的目录,test.php为新写入的文件名。
一句话木马:
1<?php @eval($_POST['password'])?>
password为预留的密码。
Less-7
直接进行实际例子展示。首先是判断字符型还是数字型注入
简单判断得出为字符型。接下来判断闭合方式,具体判 ...
SQL注入(7):布尔盲注、时间盲注
盲注
页面没有错误回显,不知道数据库具体返回值的情况下,对数据库中的内容进行猜解,实行SQL注入被称为盲注。常见的盲注的分类有三种
布尔盲注
时间盲注
报错盲注
使用盲注的情况该为如下情况
页面没有回显位
页面没有报错
布尔盲注
而且使用布尔盲注的情况除了需要满足前面两种情况外,还需要满足页面会返回真假两种状态。布尔注入就是利用页面返回不同,逐个猜解数据。
什么叫真假状态呢?
真假状态
真假状态指的就是页面只有查询成功和查询不成功两种界面,没有别的回显示。
如下例子
在这个例子中,页面只有查询到和查询不到两种结果,即使是第二种能使得查询报错的用法也只能让页面没有任何回显。
而布尔盲注就是利用页面返回的不同,逐个猜解数据。由于布尔盲注工作量比较大,往往的我们都是使用自动化工具去完成操作,手动注入并不多,学习的目的是为了如果碰到网站真实存在这种注入,但需要我们手动注入来尝试绕过对方WAF再编写自动化工具注入的情况。
布尔盲注的条件
一般而言,我们可以尝试1=1和1=2来判断页面是否存在注入的条件
页面为真:
页面为假:
一旦判断得到页面存在真假两种情况,就可以使用布尔盲注
...
搭建ChatGPT镜像站
需要准备的东西
一个ChatGPT帐号
如果没有帐号,请参考https://mirror.xyz/0x6E12A28086548B11dfcc20c75440E0B3c10721f5/9O9CSqyKDj4BKUIil7NC1Sa1LJM-3hsPqaeW_QjfFBc
一台服务器
所使用的项目地址:https://github.com/Chanzhaoyu/chatgpt-web
使用Docker部署教程
为了便利部署,这里使用docker进行部署。
在服务器上使用docker拉取chatgpt-web
1docker pull chenzhaoyu94/chatgpt-web
登录ChatGPT帐号后,打开https://chat.openai.com/api/auth/session
打开后会有一串JSON字符串,找到"accessToken":,将后面双引号的内容复制下来。
1docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_ACCESS_TOKEN=[刚刚复制的内容] ch ...
SQL注入(6):floor报错
涉及到的函数
rand()函数:随机返回0~1之间的小数
1select rand();
计算结果在0~1之间
1select rand()*2;
计算结果在0~2之间
1select rand() from users;
根据表users的行数随机显示结果
1select rand(num);
将数字num作为种子生成随机数,将可能产生相同的随机数
floor()函数:小数向下取整数。ceiling():向上取整数。
1select floor(rand()*2);
结果随机为0或者1
concat_ws():将括号内数据用第一个字段连接起来
1select concat_ws('-', (select database()), floor(rand()*2)) from users;
group by:分组
1select concat_ws('-', (select database()), floor(rand()*2)) as a from users group by a;
count():汇总统计数量
1s ...
SQL注入(5):extractValue、updateXml报错注入
报错注入
首先报错注入需要一个基础
报错注入就是:
构造语句,让错误信息中夹杂可以显示数据库内容的查询语句。
该注入方式常见于没有回显结果的,但是注入点输错结果会报错的的情况。例如Less-5
但是我们通过这个报错又可以获取到数据库库名叫security。通过这个逻辑注入的方式就被称之为报错注入。
报错注入分为12种
常见的报错注入为前三种:
floor()报错注入
extractValue()报错注入
updataXml()报错注入
其中第二和第三种原理基本一致,只是函数的内容不太一样。
extractValue()报错注入
extractValue()函数
函数extractValue()包含两个参数
第一个参数为XML文档对象名称
第二个参数为路径
该函数用于查询数据库内XML文档对象的内容。而updateXml()则是用于更新XML文档内容。
使用例:
创建表的命令的含义是,在创建一个xml表,表内有一列名字叫doc,为varchar类型,长度150。
现在我们想查询作者是谁,我们可以用extractValue()进行查询
1select extractval ...
SQL注入(4):union注入
在我们上一笔记中,我们作出了一次最基础的UNION注入,我们需要用UNION注入来获取一些更有用的信息。
information_schema
在mysql中,存在系统自带的一个数据库,包含了所有mysql数据库的简要信息——information_schema。
其中包括了两个表——table表名集合表和columns列名集合表
它们都存在一个TABLE_SCHEMA,来表明他们归属于那个数据库。因此我们在筛选的时候,就可以通过这个方式来筛选出我们注入那个表的。
获取表名与列名
通过这个方法,我们可以构造出一个注入语句
由于表名有很多个,我们只能显示出第一个,这时候就用到了group_concat()。
这个函数的作用就是将所有查询结果在一行中显示出来,通过这个函数我们可以新构造一个注入语句
可以得知我们需要的表名为users。
同样的方法,我们可以构造出查询列名,只不过我们需要额外添加一个where条件table_name=users以查询我们需要的表的所有列
至此,我们就拿到了表名和列名
查询最终目标
获取到表明与列名后,我们就可以通过这两个信息拿到我们需要的所有的用户 ...
SQL注入(3):一次简单的注入过程
一次简单的注入过程
上个笔记我们提及了闭合方式如何判断和判断之后有什么用。这里我们使用union联合注入来演示一次简单的注入,union联合注入就是闭合后可以添加使得原查询和第二个查询同时执行。继续使用less-1来作演示。
根据之前的笔记,我们已经判断出less-1使用的是字符型闭合,然后我们又判断出闭合的方式是使用单引号闭合,然后我们可以使用--+将末尾多余的单引号提出。
判断列数
接下来,我们在'和--+之间可以加入我们想要注入的第二个查询了。union查询我们需要满足一个条件,前面查询的列数与后面查询的列数一致。因此我们还需要判断列,有以下几种方法可以判断列数
group by二分法查询,由于分组不能超过列数,我们可以通过尝试分组数量来判断列数
首先我们尝试一个比较大的列数,发现无法正常返回结果
接着我们尝试其一半的列数
继续尝试一半的列数,发现可以正常
然后我们往后加大列数来测试,发现4不行,3可以,则3为列数
order by也可以通过类似的方法来判断,但group by不可用或者出现一些奇怪的问题的时候,我们可以尝试使用。
查询回显位 ...
SQL注入(2):判断注入类型、闭合方式
注入点
注入点就是可以实行注入的地方,通常是一个访问数据库的连接。打开第一个靶机Less-1
本页面的input the ID即是注入点。在本页面中,我们通过get方法,在链接中添加?id=加上一个id,可以与数据库进行通讯,这个就是注入点。
注入点有通过类似于这种get提交的,也有很多通过post提交的。
如何判断字符型注入还是数字型注入
数字型一般提交内容为数字,但数字不一定为数字型。虽然我们上面提交的为数字id,但是实际上不一定就为数字型注入,可能是字符串的数字。那么我们怎么判断呢
判断方法:使用and 1=1和and 1=2来判断。
我们在id后面分别添加一个and 1=1和and 1=2
如果注入点是字符型,添加and 1=1和and 1=2都可以正常显示
如果注入点是数字型,添加and 1=2会出现错误,页面不能正常显示
原因:如果是字符型,添加and 1=1和and 1=2,会被转换为
1http://10.0.0.219/sqli/Less-1/index.php?id='1 and 1=2'
因此可以正常显示页面。
在less1中,我们添加 ...
SQL注入(1):概述、分类、靶场搭建
SQL注入概述
SQL注入即通过将SQL命令插入到WEB表单提交等地方,最终达到欺骗服务器执行恶意的SQL命令,从而进一步入侵服务器。
注入分类
按查询字段分类
字符型:当输入的参数为字符串时,被称为字符型
数字型:当输入的参数为整型时,可以认为是数字型注入
按照注入方法
Union注入
报错注入
布尔注入
时间注入
堆叠注入
靶场搭建
环境:WindowsServer2022虚拟机
工具:
小皮phpstudy https://www.xp.cn/
靶机 https://github.com/Audi-1/sqli-labs
虚拟机网络设置与关闭防火墙
在VMware中,我们将虚拟机设置为桥接模式,然后我们可以通过ipconfig查看到我们的ip地址
然后我们需要将环境的防火墙关闭,否则外部无法访问
PHP环境搭建
由于我们靶场环境是php5.x的版本,而我们下载安装后的phpstudy版本为7.x,因此建议对其进行降级。
接着我们将我们下载好的靶场,解压复制到小皮的网站目录下(图中“打开根目录”)
为了方便我们管理页面,我们把靶场改名为sqli。然后我们开启Apache ...
TypeScript快速上手
本笔记为下面视频的笔记
【1个项目学会TypeScript核心基础语法】 https://www.bilibili.com/video/BV12P411E79E/
TypeScript安装
TypeScript是JavaScript的超集,为JavaScript新增了许多新的特性。
TypeScript并不能在浏览器中直接执行,因此跟JavaScript不同的是,我们需要安装一个编译器去将TypeScript转换成JavaScript
1npm install -g typescript //全局安装
安装完成后我们可以通过命令来检查我们的安装情况
12❯ tsc -vVersion 5.0.2
接着我们在项目文件夹下使用终端
12345678910111213❯ tsc --initCreated a new tsconfig.json with: ...