备份文件:
一个网页的首页一般为index.xxx即我们开始登录一个网页遇见的界面,如果时php网页则如果要查看网页首页的备份文件则在后面添加bak,即index.php,bak。
PHP伪协议:
常用于文件包含漏洞的题,用于读取某一文件的数据流。
常见的PHP伪协议有
- file:// 访问本地文件系统
- php:// 访问各个输入/输出流
- data:// 数据
- zip:// 压缩流
其中php://filter可以获取指定文件源码,但php://filter一般会被当成php文件执行 ,所以后面需要添加一种编码形式,后面要规定指定访问的文件。
编码一般在read=convert后面,read=convert可以规定后面跟一种或多种编码形式,但read非必要函数,可以省略。
resource后面添加选择访问的指定文件。
所以合适为:php://filter/read=convert.*/resource=*
第一个*是你要进行的编码格式,第二个*是你要过滤的文件
PHP的反序列化:
在说反序列化之前我们要先明白什么是序列化。即将对象或者数组转化为可存储的字符串,一般使用serialize()函数。不同类型的变量有不同的转变方法。
一般在ctf中经常遇到的就是字符串,数组型和对象类。
字符串:s:<length>:"<value>"
数组:a:<n>:{<key 1><value 1><key 2><value 2><key3><value 3><key 4><value 4>…}
<n>表示数组个数
<key>表示数组下标
<value>表示与下标相对应的数组元素值
对象:O:<length>:"<class name>":<n>:{<field name 1><field value 1><field name 2><field value 2>...<field name n><field value n>}
<length>:对象类名字符串长度
<class name>:对象的类名
<n>:对象中字段数 包括var、protected、private、public声明的字段
,不包括static和const声明的静态字符串
<field name 1><field value 1>:每个字段对应的每个字段名
反序列化:
即将字符串重新转化为变量。与unserialize()函数一起使用,还同时存在__wakeup函数。并先执行__wakeup函数中的语句。一般序列化和发序列化都会伴随base64位的加密或解密(其他编码格式应该也可以)。
简单的SQL注入:
SQL注入是指在SQL服务器存在人为可以改变的代码,导致服务器的渗入。
一般SQL都是靠的GET传参。
查询网站是否可以进行SQL注入:在网址后面添加一个单引号,刷新网页如果网页报错则存在SQL注入,如果没报错则不存在SQL注入。
SQL工作原理:?后面添加变量id,如果id=1'or 1=1--+。其中如果id=1成立,而1=1又成立就会返还正确值,但如果1=2,则会返还错误值(另一个界面)。其中--是注释的意思,有些网页对SQL会存在空格过滤,这个时候需要用--来跳过空格过滤实行绕过,而按照规定--后面需要添加一个空的字符,所以我们添加一个+(当然其他的也可以)。
命令执行漏洞:
使用者可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限。其造成的原因是Web服务器对用户输入命令安全检测不足(比如没加waf),导致恶意代码被执行。
常用的管道标识符有:
; | A;B | 先执行A,再执行B |
& | A&B | 简单拼接,A B之间无制约关系 |
| | A|B | 显示B的执行结果 |
&& | A&&B | A执行成功,然后才会执行B |
|| | A||B | A执行失败,然后才会执行B |