网络工具瑞士军刀-NETCAT
NETCAT是什么
netcat被称为网络工具中的瑞士军刀,体积小功能多
侦听模式 / 传输模式
telnet / 获取banner信息
传输文本信息
传输文件/目录,作为一个文件服务器或是说FTP服务器
加密传输文件
远程控制/木马,有个很理想的特性是杀毒软件几乎不会把NC当作病毒
加密所有流量
流媒体服务器
远程克隆硬盘(电子取证相关)
telnet / banner
nc -nv 192.168.31.1 80
-n: 直接使用IP地址,不使用dns
-v: 展示详细信息
连接后可以使用HTML相关的一些指令,例如head /等
传输文本信息
A:nc -l -p 4444
B:nc -nv 对方的IP 4444
这个功能可以在数字取证中使用,例如我们需要将ls -l的结果输出到另外一台机子上,并将结果输出到一个文本文件中,我们就可以用到这个功能
传输文件/目录
传输文件
A: nc -lp 4444 > 保存的名称
B: nc -nv 目标ip 4444 < 要传递文件
或
A:nc -lp 4444 < 要传输的名称
B: nc ...
SQL注入(11):注释符号过滤
在我们注入的过程中,会遇到一些措施或者WAF对我们的注入进行拦截或者是使其失效。因此我们还需要了解如何绕过一些对我们SQL注入进行拦截的方法。
注释符号过滤
对于靶机less-23,它对我们的注释符号进行了过滤,使得我们没法通过一般手段注释掉后面的查询语句
我们先来看源代码部分,源代码实现这个效果的方式非常简单
简单来说,就是一旦在id中匹配到#或者--,就会替换成空。
方法一
添加多一个闭合符,使其后面单引号完成闭合。此方法不一定能够成功,可以尝试一下
方法二
使用or/and进行绕过,通过or/and后面追加的语句实现闭合。
此方法通过留出一个闭合符与源代码中的闭合符进行闭合,使得注入语句可以正常执行。
接下来我们只需要在能正常回显的2处,修改成我们的注入语句即可。
and和or过滤
SQL注入(10):POST注入
POST提交注入
POST提交注入有别于我们之前的注入方式,我们之前的注入方式都采用了GET请求的方式,而POST提交注入是使用POST请求的方式进行尝试注入。
POST提交、GET提交对比
get提交可以被缓存,post提交不会
在浏览器地址栏、历史记录、书签都可以保存GET提交
get提交有长度限制,最长2048个字符;
post提交没有长度要求,不是只允许使用ASCII字符,还可以使用二进制数据
POST提交演示
这里我们使用less-11进行演示,并使用burpsuite进行抓包演示
我们可以发现,在内容区存在三个参数uname、passwd和submit。这三个参数就是我们刚刚提交的登录操作,我们可以选择放行Forward或丢弃Drop,这里我们选择放行。发现出现登录失败的提示。
一般来说,登陆的场景都是通过POST的方式提交的。
联合注入
我们在前面抓包分析后,发现提交的参数有三个,我们可以在hackbar添加Post data尝试我们之前GET提交熟悉的的流程,对网站注入点进行测试
判断注入点闭合,并注释后面语句
group by二分法判断查询列 ...
SQL注入(9):DNSlog注入
DNSlog注入
DNSlog注入实际上是属于盲注的一种,但是比盲注效率高一点。
在一定的情况下,如果我们想对一个网站使用布尔或时间盲注,手动注入会对WAF的绕过会非常有帮助,但是效率不高,因此我们往往会使用SQLmap等工具注入,但是这种工具对很多网站都有限制。这时候就该尝试DNSlog注入。
这种注入方式,相较于布尔或时间盲注而言,好处在于可以一组一组进行测试,不用再一个一个字符进行逐以测试,比其他两个盲注效率要高,但是要求服务器的读写权限都要对MySQL开启,如果没有开启的话,是不能使用这种注入方式的。
关键函数
load_file("[路径]"):用于读取某个文件
1select load_file("C:\\test.txt");
可以读取出文件,并且获取到一共多少个字节。
除了可以读取本机路径以外还可以读取到网络上的路径,即可以使用UNC路径。
UNC路径
格式:\servername\sharename,其中
servername是服务器名,可以是域名或者是IP地址
sharename是共享资源的名称
利用UNC路径能解 ...
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以查询我们需要的表的所有列
至此,我们就拿到了表名和列名
查询最终目标
获取到表明与列名后,我们就可以通过这两个信息拿到我们需要的所有的用户 ...