Pr1nt
文章21
标签9
分类5

文章分类

文章归档

ctfshow_web入门wp

ctfshow_web入门wp

ctfshow-web入门全解

重新走一遍ctfshow,顺便记录下wp

  1. ctfshow-web入门全解
    1. 信息收集
    2. 爆破
      1. web21
      2. web22
      3. web23
      4. web24
      5. web25
      6. web26
      7. web27
      8. web28
    3. 命令执行
      1. web71
      2. web72
      3. web73
      4. web74
    4. 文件包含
    5. php特性
    6. 文件上传
    7. sql注入
    8. 反序列化
    9. java
    10. 代码审计
    11. phpCVE
    12. XSS
    13. nodejs
    14. jwt
    15. SSRF
    16. SSTI
    17. XXE
    18. 区块链安全
    19. 黑盒测试
    20. 其他
    21. 嵌入式
    22. 框架复现
    23. CMS
    24. 中期测评
    25. sqli-labs
    26. thinkphp专题
    27. 组件漏洞
    28. Laravel专题
    29. Yii专题
    30. 终极考核
    31. 权限维持
    32. 大赛原题
    33. 常用姿势
    34. 税务比武
    35. java反序列化
    36. 内网渗透
>

由于我们是以夯实基础为主,所以我不会使用sqlmap之类的工具一把梭

信息收集

不写了,这里直接点下面的hint就能看到,提一嘴如果由于js导致看不了源码可以点一下url再进行f12或者ctrl+u

爆破

web21

点开发现要输用户名和密码,抓包发现有个Authorization: Basic YWRtaW46MTIzNDU2,解码后面的是admin:123456,这里就可以直接爆破了使用burp>Intruder>payload处理先前缀一个admin:,再base64-encode,最后把下面的URL编码取消,就可以爆了

web22

爆破域名,好像环境坏了,直接交flag吧

web23

接收一个参数并进行md5,如果第2,15,18位字符相同,而且整数值的和除以第二位的整数值等于第32位的整数值,则输出flag
burp>Intruder>Brute forcer>1-2长度,爆破出为3j

web24

使用372619038作为随机数的种子,生成随机数,由于种子固定,所以其实随机数也是固定的,经本地测试恒为1155388967,所以直接r=1155388967就行

web25

先输入r=0,得到第一次的随机数,然后使用php_mt_seed工具推出seed值,然后对应一下7.3.11的版本,取第二次和第三次的和写入token中发包就可以获取到flag了

web26

?这题好诡异啊,点进去抓包全放直到抓到checkdb.php,然后啥都不填发送就行a=&p=&d=&u=&pass=就返回flag了

web27

点开莫名其妙,有个录取名单直接下,打开有个叫高先伊的直接爆破身份证号
Intruder>日期>从19800101爆到20201231,格式选下面的自填yyyyMMDD,直接爆就行,查询到学号直接拿身份证号登陆就行
高先伊 身份证号:621022199002015237 学号:02015237

web28

GET /§0§/§1§/ HTTP/1.1,选择(Clusterbomb)模式,从0到100爆破,最多10000次,爆出来/72/20/,直接返回flag了

命令执行

直接看hint吧,看不懂的看我rce全解那篇文章,很全了,web118到web121看我环境变量全解那集

web41这个位置肯定是放错了,应该放55-57这个位置的着重讲一下web71开始,这里与前面就不是一个难度了

web71

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
}
?>

这里是先执行代码,然后将返回的内容放至缓冲区,然后进行过滤,但是我们可以提前退出结束这个代码来绕过缓冲区的限制,例如exit(),ob_flush(),die()
payload:c=include('/flag.txt');exit();

web72

这题源码与上题相同,但当试图用上一题的payload的时候,出现include(/flag.txt): failed to open stream: No such file or directory in /var/www/html/index.php(19) : eval()'d code
猜测是open_basedir限制了访问区域,这里可以用glob:///*进行读取的绕过c=var_export(scandir('glob:///*'));exit();
这里var_exportprint_r的效果大致相同发现根目录下有flag0.txt但下一步要想读到flag,就很麻烦了这里需要扩展一下uaf的知识点

web73

这题没有open_basedir的限制了用c=var_export(scandir('/'));exit(0);找到flag,用c=require_once('/flagc.txt');exit(0);读取flag

web74

scandir被禁了,但是glob还在,glob不仅可以是一个伪协议,也可以是一个函数,作用与scandir相同
c=var_export(glob('/*'));exit();,然后include即可

文件包含

php特性

文件上传

sql注入

反序列化

java

代码审计

phpCVE

XSS

nodejs

jwt

SSRF

SSTI

XXE

区块链安全

黑盒测试

其他

嵌入式

框架复现

CMS

中期测评

sqli-labs

thinkphp专题

组件漏洞

Laravel专题

Yii专题

终极考核

权限维持

大赛原题

常用姿势

税务比武

java反序列化

内网渗透