XXE危害说明
XXE
就是XML
外部实体注入。
由于服务端未对提交的xml
的数据中引入外部实体做必要的处理,而在外部实体中引入php
伪协议从而造成的攻击。
当允许引用外部实体时,通过构造恶意内容,可导致
- 读取任意文件
- 探测内网端口
- 攻击内网网站
- 执行系统命令
漏洞环境说明
PHP环境低于5.5使用此代码测试
1 | <?php |
PHP环境大于等于5.5使用此代码测试
1 | <?php |
XXE
就是XML
外部实体注入。
由于服务端未对提交的xml
的数据中引入外部实体做必要的处理,而在外部实体中引入php
伪协议从而造成的攻击。
当允许引用外部实体时,通过构造恶意内容,可导致
1 | <?php |
1 | <?php |
redis
绑定在 0.0.0.0:6379
,且没有进行添加防火墙规则避免其他非信任来源ip
访问等相关安全策略,直接暴露在公网;redis
服务。 flushall
来清空所有数据;EVAL
执行lua
代码,或通过数据备份功能往磁盘写入后门文件;Redis
以root
身份运行,黑客可以给root
账户写入SSH
公钥文件,直接通过SSH
登录受害服务器Redis 2.x,3.x,4.x,5.x
下载并安装测试用的Redis
,本次采用的是Centos7
镜像:
1 | wget http://download.redis.io/releases/redis-2.8.17.tar.gz |
UDF
即用户自定义函数。是通过添加新函数,对MYSQL
的功能进行补充,就像使用本地MYSQL
函数user()
和concat()
等。
secure_file_priv
是用来限制 load dumpfile
、into outfile
、load_file()
函数在哪个目录下拥有上传或者读取文件的权限:
使用命令show global variables like 'secure%'
:
1 | mysql> show global variables like 'secure%'; |
secure_file_priv
的值为 NULL
,表示限制 mysqld
不允许导入|导出,此时无法提权secure_file_priv
的值为 /tmp/
,表示限制 mysqld
的导入|导出只能发生在/tmp/
目录下,此时也无法提权secure_file_priv
的值没有具体值时,表示不对 mysqld
的导入|导出做限制,此时可提权secure_file_priv
的值在MySQL
数据库的安装目录的 my.ini
文件中配置:
在php中,有两套正则表达式函数库,两者功能相似、知识执行效率略有差异:
PCRE
库提供,使用preg_
为前缀命名的函数POSIX
扩展提供的。使用以ereg_
为前缀命名的函数PCRE
来源于Perl
语言,而Perl是对字符串操作功能最强大的语言之一,PHP
的最初版本就是由Perl
开发的产品。
PCRE
语法支持更多特性,比POSIX
语法更强大。
函数名 | 功能描述 |
---|---|
preg_match() | 进行正则表达式匹配 |
preg_match_all() | 进行全局正则表达式匹配 |
preg_replace() | 执行正则表达式的搜索和替换 |
preg_split() | 用正则表达式分割字符串 |
preg_grep() | 返回与模式匹配的数组单元 |
preg_replace_callback | 用回调函数执行正则表达式的搜索和替换 |
正则表达式作为一个匹配的模板,是由原子(普通字符,例如字符a到z)、特殊字符(元字符,例如*、+和?等)、以及模式修正符三部分组成的匹配模板。
在C语言中字符串是作为字节数组处理的。在Java语言中字符串是作为对象处理的。而php则把字符串作为基本数据类型来处理。通常对字符串的处理涉及字符串的格式化。字符串的分割和连接、字符串的比较、以及字符串的查找、匹配和替换。
echo()
:输出字符串print()
:输出一个字符串1 | $array = [1,2,3]; |
echo()
和print()
都只能输出字符串,而不能输出数组die()和exit()
:输出一个字符串后退出程序1 | $string = "123"; |
die()
和exit()
同样都只能输出字符串,而不能输出数组格式 | 作用 |
---|---|
%% | 返回百分比符号 |
%b | 二进制数 |
%c | 依照ASCII值的字符 |
%d | 带符号十进制数 |
%e | 可续计数法(如1.5e3) |
%u | 无符号十进制数 |
%f或%F | 浮点数 |
%o | 八进制数 |
%s | 字符串 |
%x或%X | 十六进制数 |
printf()
:输出格式化字符串sprintf()
:把格式化的字符串写入一个变量中printf()
和sprintf()
都是格式化输出字符串,区别在于sprintf()
可以把格式化的字符串写入到一个变量中
1 | printf("我是%s","test"); //输出我是test |
PHP
中的数组实际上是一个有序图。图是一种把 values
映射到 keys
的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,队列以及更多可能性。因为可以用另一个 PHP
数组作为值,也可以很容易地模拟树。
由于 PHP
是属于弱类型数据,因此源代码中的数组并不需要经过特别的声明操作,直接将一组数值指定给某一数组元素即可。一般情况下数组的赋值有三种方式:
1 | $a[0]='spam@126.com'; |
array
函数如: 1 | $a=array("spam@126.com","abuse@sohu.com"); |
[]
如: 1 | $a=["spam@126.com","abuse@sohu.com"]; |
$数组变量名[索引值]=资料内容
其中索引值(下标)可以是一个字符串或一个整数。等价于整数(不以0开头)的字符串值被当作整数对待。因此,数组$array[3]
与$array['3']
是引用相同的元素。但是$array['03']
引用的另外不同的元素。
分别定义两个数组$a
和$b
,看看区别:
1 | <?php |
当有一个很大的集团目标时,一般的信息搜集流程如下:
主要提取出历史网站备案,域名、子公司域名、备案号、注册邮箱(邮箱@后的也可能是域名)、手机号。
集团结构信息搜集后一般会得到主域名,也就是官网信息,可能有很多跳转链接,也属于他的资产,包括JS中的链接。推荐使用这个工具进行提取:
1 | python JSFinder.py -u http://www.baidu.com -d -ou mi_url.txt -os mi_subdomain.txt |
杭州房产知识扫盲
-- 图片来自网络,侵权删
-- 数据不保证完全准确,错误之处还望海涵,如需深入使用还望自己求证。
-- 买房有风险,投资需谨慎 ,资料内容不保证完全正确,使用需谨慎。
PHP
脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,甚至一个什么也不做的(空语句)条件语句。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。当条件表达式的值为真true
时,PHP
将执行语句组,相反条件表达式的值为假false
时,PHP
将不执行语句组,忽略语句组执行下面的语句。
1 | <?php |
if-else
条件判断与 if
条件判断类似,所不同的是,if-else
语
句的条件表达式值为真true
时,会执行 if
的本体语句语句组1,
而条件表达式值为假false
时,则执行 else
的本体语句语句组2。
1 | if(false){ // 真区间 |