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){ // 真区间 |