0%

less-1

首先呢,这里有一个extract函数接收了\$_GET,百度一下 得知这个函数会把数组中的键名作为变量名,键值作为变量值,来生成变量 审题得知$flag变量在extract之上,所以可以重新对flag赋值,对flag赋值一个不存在的文件名,这样file_get_contents($flag)只能获取到空 trim去除空格,这样我们只需要把shiyan设置成空就可以打印flag01.php的内容了 构造url: http://172.17.135.65/less-1.php?shiyan=&flag=bucunzai

变量覆盖漏洞原理

extract()
  1. extract() 函数从数组中将变量导入到当前的符号表。
  2. 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
  3. 该函数返回成功设置的变量数目。

less-2

have a fun!! hints:less-2 de zip 直接改成http://172.17.135.65/less-2.zip down下来源码 首先根据isset($_GET['number'],要以get方式提交一个名字叫number的变量. 为了绕过is_numeric函数,应该使用%00截断,为什么要用%00阶段呢?因为后面的要求是这个字符串必须要能转换成他自己的整型变量 绕过函数原理为该函数只会读取字符到%00停止,如果在%00后面加东西,他是无法检测出来的,只会依据%00之前的字符判断类型 而后面的读取会忽略0x00,直接读取完字符串,这就是绕过原理 接下来,

1
2
$value1 = intval($req["number"]);
$value2 = intval(strrev($req["number"]));
试图判断是否为回文,这里要用到空白字符由于特性,intval函数会忽略/f,但是strval函数并不会,所以,在回文数检测时,那个传入的文本头是,返回的是一个假,所以我们得到了flag 构造url:http://172.17.135.65/less-2.php?number=%00%0c22


less-3

首先要求设置以get方式设置password 第二个if要求必须为数字和字母,^[a-zA-Z0-9]+$,确保了科学计数法的可行性 由于strlen($_GET['password']) < 8 && $_GET['password'] > 9999999,所以不能构造数字,所以构造1E7就可以绕过限制了, 接下来要strpos ($_GET['password'], '*-*') !== FALSE 说明password字符串中应该有-字符,但是前面有限制是password必须为数字,所提用%00截断 构造url:http://172.17.135.65/less-3.php?password=1E7%f*-* %00截断原理 ##### ereg() 1. ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。 2. ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配.


less-4

传入一个非字符的变量a即可,例如object,数组 构造url:http://172.17.135.65/less-4.php?a[] strcmp漏洞原理 ##### strcmp() 1. strcmp() 函数比较两个字符串,且大小写敏感. 2. 这个strcmp函数用于比较字符串是否相等,可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 !!!! 也就是虽然报了错,但却判定其相等了。


less-5

如果把这两个字段构造为数组,如:?name[]=a&password[]=b,这样在第一处判断时两数组确实是不同的,但在第二处判断时由于sha1()函数无法处理数组类型,将报错并返回false,if 条件成立,获得flag。 构造url:http://172.17.135.65/less-5.php?name[]=xiaoming&password[]=123456 md5/sha1漏洞原理


less-6

原理同上 构造url:http://172.17.135.65/less-6.php?username[]=1&password[]=2


less-7

首先检测了是否使用POST方法提交表单,一定使用POST方法提交表单,否则没戏 ##### 正则规则:

1
2
3
4
5
[:graph:] : 除空格,TAB外的所有字符
[:punct:] : 任何标点符号
[:digit:] : 任何数字
[:upper:] : 任何大写字母
[:lower:] : 任何小写字母
第一个规则,你要使用大于12个除了空格和tab的其他字符通过判断 第二个规则,任何除了空格,Tab外的所有字符,不能超过6个 第三个规则,任何除了空格,Tab外的其他字符,不能少于三个

POST数据构造:password=42.000e%2b000000000

数字验证正则绕过


less-8

POST参数 user='and 0=1 union select 'e10adc3949ba59abbe56e057f20f883e' #&pass=123456


less-9

一大堆rand,不是真的算 把SESSION和passwoed修改掉就行了

解题思路


less-10

首先根据题意写代码

1
2
3
4
5
6
7
<?php
$a = "admin";
$s = serialize($a);
$p = base64_encode($s);
echo $p . "\n";
$role = unserialize(base64_decode($p));
echo $role;
使用chrome 编辑cookies来弹出cookies

apt软件包管理器

apt-get常用命令

安装升级删除:

查看软件xxx安装内容

dpkg -L xxx 查找软件库中的软件 apt-cache search 正则表达式aptitude search 软件包

显示系统安装包的统计信息

apt-cache stats

显示系统全部可用包的名称

apt-cache pkgnames

显示包的信息

apt-cache show k3b

查找文件属于哪个包

apt-file search filename

查看已经安装了哪些包

dpkg -l

查询软件xxx依赖哪些包

apt-cache depends xxx

查询软件xxx被哪些包依赖

apt-cache rdepends xxx

增加一个光盘源

sudo apt-cdrom add

系统升级

sudo apt-get update (这一步更新包列表)

sudo apt-get dist-upgrade (这一步安装所有可用更新) 或者 sudo apt-get upgrade (这一步安装应用程序更新,不安装新内核等)

编译时缺少h文件的自动处理

sudo auto-apt run ./configure

查看安装软件时下载包的临时存放目录

ls /var/cache/apt/archives

备份当前系统安装的所有包的列表

dpkg --get-selections | grep -v deinstall > ~/somefile

从上面备份的安装包的列表文件恢复所有包
1
2
dpkg --set-selections < ~/somefile 
sudo dselect
清理旧版本的软件缓存

sudo apt-get autoclean

清理所有软件缓存

sudo apt-get clean

删除系统不再使用的孤立软件

sudo apt-get autoremove

purge参数彻底删除文件:

sudo apt-get purge virtualbox sudo apt-get autoremove sudo apt-get clean

只是删除软件的链接,并不实际删除软件的配置文件和实体文件。

apt-get remove

清除所有已删除包的残余配置文件配置文件

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。
1
2
3
4
5
6
7
8
9
10
11
12
13
dpkg: --purge needs at least one package name argument 

Type dpkg --help for help about installing and deinstalling packages
;
Use 'dselect' or 'aptitude' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;
Type dpkg --license for copyright license and lack of warranty (GNU GPL)
.

Options marked
produce a lot of output - pipe it through 'less' or 'more' !
查看包在服务器上面的地址

apt-get -qq --print-uris install ssh | cut -d\' -f2

彻底删除Gnome

apt-get --purge remove liborbit2

彻底删除KDE

apt-get --purge remove libqt3-mt libqtcore4

一键安装 LAMP 服务

sudo tasksel install lamp-server

删除旧内核
1
sudo aptitude purge ~ilinux-image-.*\(\!`uname -r`\) 
导入ppa源的key值

W: GPG签名验证错误: http://ppa.launchpad.net jaunty Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 5126890CDCC7AFE0 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5126890CDCC7AFE0 #5126890CDCC7AFE0替换为你需要导入的Key值

增加一个ppa源

sudo add-apt-repository ppa:user/ppa-name 使用 ppa 的地址替换 ppa:user/ppa-name

dpkg 查看软件包依赖

dpkg -I package.deb

dpkg 查看生成文件

dpkg -L package_name

Nmap

脚本

nmap的脚本默认目录为:/usr/share/nmap/scripts/ 使用脚本的参数 --script=%脚本名称% 脚本的几个类型

1
2
3
4
5
6
7
8
9
10
11
12
13
auth: 负责处理鉴权证书(绕开鉴权)的脚本  
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
阅读全文 »

Linux根目录"/"下各个系统文件夹的含义和用途

中英对照

/bin = BINaries
/sbin = Superuser BINaries

/sys=SYStem /proc = PROCesses

/var = VARiable
/usr = Unix Shared Resources
/opt=OPTional application software packages

/etc = ETCetera
/mnt=MouNT /dev = DEVices
/lib = LIBrary
/srv=SeRVice /tmp = TeMPorary

详细说明

/boot 该目录默认下存放的是Linux的启动文件和内核。

/initrd 它的英文含义是boot loader initialized RAM disk,就是由boot loader初始化的内存盘。在linux 内核启动前,boot loader会将存储介质(一般是硬盘)中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。

/bin 该目录中存放Linux的常用命令。

/sbin 该目录用来存放系统管理员使用的管理程序。

/var 该目录存放那些经常被修改的文件,包括各种日志、数据文件。

/etc 该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。

/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目录没有区别。

/mnt 临时将别的文件系统挂在该目录下。

/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。

/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

/usr 用户的应用程序和文件几乎都存放在该目录下。

/lib 该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库。

/opt 第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的,但如果你一旦把它删除了,以后在安装此类软件时就有可能碰到麻烦。

/tmp 用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。

/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里。

/misc 可以让多用户堆积和临时转移自己的文件。

/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

文件颜色的含义:蓝色为文件夹;绿色是可执行文件;浅蓝色是链接文件;红框文件是加了SUID位,任意限权;红色为压缩文件;褐色为设备文件。

sys:临时文件系统,不存放文件,存放硬件相关参数

proc:临时文件系统,不存放文件,存放内核相关参数

boot:启动相关

dev:设备文件<分块设备文件,字符设备文件>

etc:配置文件

media:挂载点

mnt:挂载点

bin:二进制可执行文件

lib:库文件 分动态链接库 .so 静态链接库 .a

lib64:64位系统所用的库

usr:user shared read-only

1
2
3
/usr/bin 
/usr/sbin
/usr/lib

上面的库与系统启动有关,不可缺失

1
2
3
/usr/local/bin
/usr/local/sbin
/usr/local/lib

上面的库和二进制可执行文件,与系统运行无关,但和服务运行有关

opt:可有可无的文件目录

root:根权限用户目录

home:用户目录

docker-笔记

概念

你从仓库里pull的文件叫做镜像,只可读,不可写 当你执行docker run的时候,系统会创建一个容器,而他是可读可写的,所有的修改都是建立在容器层上

1
2
3
.
└── 只读层-镜像
└──可读可写层-容器
- 为了方便数据共享 所以形成了镜像与容器的概念 - 即使你修改了docker中的文件,被修改的也只是容器层,只读层 不会发生任何改变,所以可以镜像复用 - 当exit结束docker中的交互式shell后,容器的内容仍会保留(可以指定docker -rm 指定镜像启动的容器 来删除容器内的修改)

由于 union fs结构 使镜象中的层可以像动态链接库一样继承,复用

阅读全文 »

无论当前的OllyDbg窗口是什么,这些快捷键均有效: 

Ctrl+F2 - 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。 译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。

Alt+F2 - 关闭,即关闭被调试程序。如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。   F3 - 弹出“打开32位.EXE文件”对话框[Open 32-bit .EXE file],您可以选择可执行文件,并可以输入运行参数。   Alt+F5 - 让OllyDbg总在最前面。如果被调试程序在某个断点处发生中断,而这时调试程序弹出一个总在最前面的窗口(一般为模式消息或模式对话框[modal message or dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。激活OllyDbg(比如按任务栏上的标签)并按 Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。 OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。当前是否处于总在最前面状态,会显示在状态栏中。

F7 - 单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是是含有REP前缀,则只执行一次重复操作。

阅读全文 »

常用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里    每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些
C-a t -> Time,显示当前时间,和系统的 load
C-a K -> kill window,强行关闭当前的 window

还是TMUX好用

sqlmap简介以及参数

五种注入模式

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用union的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

数据库支持 > MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

阅读全文 »

物理存储介质(PhysicalStorageMedia):指系统的物理存储设备==>磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

物理卷(Physical Volume,PV):指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group,VG):是由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个逻辑卷。

逻辑卷(Logical Volume,LV):类似于非LVM系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统。

可以做这样一个设想来理解以上三者的关系:如果把PV比作地球的一个板块,VG则是一个地球,因为地球是由多个板块组成的,那么在地球上划分一个区域并标记为亚洲,则亚洲就相当于一个LV。