[CTF从0到1学习] 二、CTF WEB安全
Web安全的实验环境
PHP环境
java环境
python环境
不在赘述,环境自己配
下来直接整题,以下的题目有些为本地搭建,有些为在线CTF靶场的题目
信息收集
2-1-Where is flag
考点:网站源代码
查看网页源代码,发现flag
2-2-Where is logo
考点:robots.txt
拿到之后使用扫描工具进行扫描
尝试看看robots.txt
尝试下拉查看
在这里面找flag,那就写一个小脚本吧
import requests
if __name__ == '__main__':
url = 'http://127.0.0.1/ctfLearning/chapter2/2-2-Where%20is%20logo/robots.txt'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
response = requests.get(url=url,headers=headers).content.decode('utf-8')
f = "{}abcdefghigklmnopqrst1234567890_-"
flag = ''
# with open('./1.txt','wr',encoding='utf-8') as fp:
# fp.write(response)
with open('./1.txt', 'r', encoding='utf-8') as fp:
for line in fp.read():
if line in f:
flag = flag + line
print(flag)
2.3粗心的小明
考点:index.php.bak
本地环境没有效果,因为利用的是Apache解析漏洞,使用御剑big扫描
找到flag
2.4Discuz 3.2
考点:.git泄露
D:\桌面\CTF\CTF安全竞赛入门\chapter2-Web\题目2-4-git文件泄露\GitHack-master>python27 GitHack.py http://eci-2ze170c5z2f9f14cd8uj.cloudeci1.ichunqiu.com/.git/
[+] Download and parse index file ...
index.html
[OK] index.html
HTTP
2.5 Careful
考点:response字段
既然提示看看现在正在发生什么,那就使用bp抓包。
2-6-你不是阿凡达
考点:request请求中language字段
刚开始,页面和书上完全不同,什么都不显示。我就查看了源代码
改正代码后
提示语言不是阿凡达,抓包修改语言类型
修改语言
2.7特殊浏览器
考点:User-agent字段
源码有错误,需要修改
2.8 猜猜我是谁
考点:request中的cookie字段
SQL注入
2-9 简单的注入
只是sql-labs第一关加了flag表
可手工也可sqlmap
2-10 POST注入
使用BP抓包
将抓到的包复制到本地
使用sqlmap跑出数据
2-11万能注入
随便尝试
出现报错发现没有and,应该被过滤掉了,但是#未被过滤掉
尝试使用万能密码
2-12宽字节注入
经过后台扫描,发现只有这样一张图片,所以将图片下载到本地进行分析
发现好像是zip,修改后缀
根据提示,添加username和password
尝试宽字节注入
代码审计
2-13小试身手
考点:MD5()函数漏洞
首先分析代码
<?php
include('config.php');
if(empty($_GET['md5'])) die(show_source(__FILE__));
if($_GET['md5']!='240610708' && md5($_GET['md5']) == md5('240610708')) echo $flag;
?>
1
主要对这句话进行解读吧die(show_source(__FILE__));
show_source():就是对文件的内容的显示
_ FILE_ :常量脚本所在的路径。
die() 函数输出一条消息,并退出当前脚本。
合起来就是,输出以高亮显示当前文件。
MD5()函数漏洞
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
说了半天是啥意思呐?
构造payload
涉及资源:
https://blog.csdn.net/qq_19980431/article/details/83018232
https://blog.csdn.net/u014549283/article/details/81288443
2-14小小加密
分析加密步骤:
1.首先将字符串读进来,反转字符串得到$_o
2.逐位取,然后将ascii码+1
3.编码后相加赋值给$_c
4.输出的时候先使用base64编码,然后反转,最后进行str_rot13编码。
解密步骤
1.先str_rot13解码
2.反转字符串
3.逐位转ascii -1,然后编码
4.相加后 ,反转字符串
wp
<?php
function decode($str){
$res = base64_decode(strrev(str_rot13($str