WEB
phpmyadmin4.8.1远程文件包含漏洞 CVE-2018-12613
- !empty($_REQUEST[‘file’])要我们的file变量不为空我们先进行分析这段代码 首先看80行第一个要求
- is_string($_REQUEST[‘file’])要求我们传进来的值是字符串类型
- emmm::checkFile($_REQUEST[‘file’])这里将我们的的值传到emmm类里面的checkFile函数
- //mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
- // mb_strpos (haystack ,needle )
- // haystack:要被检查的字符串。
- // needle:要搜索的字符串
- //mb_substr() 函数返回字符串的一部分。
- //str 必需。从该 string 中提取子字符串。
- //start 必需。规定在字符串的何处开始。
- //ength 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
- …/…/大于等于真是文件层数都可以
在堆叠注入下利用预编译绕限制
- set用于设置变量名和值
- prepare用于预备一个语句,并赋予名称,以后可以引用该语句
- execute执行语句
- deallocate prepare用来释放掉预处理的语句
-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
拆分开来如下
-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
-
修改表名(将表名user改为users)
alter table user rename to users; -
修改列名(将字段名username改为name)
alter table users change uesrname name varchar(30);常用sql语句
- show columns from tables
文件包含漏洞
- php://filter/read=convert.base64-encode/resource=xxx.php
- ?file=php://filter/read=convert.base64-encode/resource=flag.php
linux的命令执行
- 判断目标网站是对空格进行了过滤,我们可以使用一些方法代替空格来起到分割作用注:%20(space)、%09(tab)、$IFS 9 、 9、 9、{IFS}$9、 {IFS}、IFS 都可以
burpsuit post传参
- POST请求要加媒体类型信息:Content-Type: application/x-www-form-urlencoded
php strcmp漏洞(5.3前)
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 !!! 也就是虽然报了错,但却判定其相等了。这对于使用这个函数来做选择语句中的判断的代码来说简直是一个致命的漏洞,当然,php官方在后面的版本中修复了这个漏洞,使得报错的时候函数不返回任何值。
只要我们 P O S T [ ‘ p a s s w o r d ’ ] 是 一 个 数 组 或 者 一 个 o b j e c t 即 可 , 但 是 上 一 个 问 题 的 时 候 说 到 过 , 只 能 上 传 字 符 串 类 型 , 那 我 们 又 该 如 何 做 呢 。 其 实 p h p 为 了 可 以 上 传 一 个 数 组 , 会 把 结 尾 带 一 对 中 括 号 的 变 量 , 例 如 x x x [ ] 的 n a m e ( 就 是 _POST[‘password’]是一个数组或者一个object即可,但是上一个问题的时候说到过,只能上传字符串类型,那我们又该如何做呢。其实php为了可以上传一个数组,会把结尾带一对中括号的变量,例如 xxx[]的name(就是 POST[‘password’]是一个数组或者一个object即可,但是上一个问题的时候说到过,只能上传字符串类型,那我们又该如何做呢。其实php为了可以上传一个数组,会把结尾带一对中括号的变量,例如xxx[]的name(就是_POST中的key),当作一个名字为xxx的数组构造类似如下的request
POST /login HTTP/1.1
Host: xxx.com
Content-Length: 41
Accept: application/json, text/javascript
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Connection: close
password[]=admin
即可使得上述代码绕过验证成功。
什么是FastCGI
FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。同时,FastCGI也被许多脚本语言所支持,比较流行的脚本语言之一为PHP。FastCGI接口方式采用C/S架构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程执行,然后将得到的结构返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。FastCGI的重要特点:1、FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具。2、FastCGI优点是把动态语言解析和HTTP服务器分离开来。3、Nginx、Apache、Lighttpd以及多数动态语言都支持FastCGI。4、FastCGI接口方式采用C/S架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)。5、PHP动态语言服务端可以启动多个FastCGI的守护进程。6、HTTP服务器通过FastCGI客户端和动态语言FastCGI服务端通信。
Nginx FastCGI的运行原理
Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper,这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。