CTF集训(4)

WEB(I)

该学习了(

WEB架构

客户端+数据库+服务器

客户端:html+css+js三件套

数据库

服务器:Apache、Nginx、Tomcat、Miscrosoft IIS

Web协议:

  • OSI体系结构:物理、链路、网络、传输、绘画、表示、
  • TCP

TCP协议:握手和挥手

DNS协议:解析域名 mail.bit.edu.cn cn是顶级,edu是二级,bit是三级,mail是四级

解析过程:

  • PC访问浏览器缓存
  • 若没有,访问系统缓存hosts
  • 若没有,向LDNS(Local DNS服务器)发出申请
  • LDNS分别向gTLD、name server等发出申请

HTTP协议

  • 请求头:关注Cookie、Host、Referer、User-agent
  • 请求行:GET、POST

可能用到的请求头:

  • Host
  • User-Agent
  • X-Forwarded-For HTTP请求真实IP
  • Accept-Encoding 数据压缩格式
  • Accept-Language 使用语言
  • Accept
  • Content-Type 解析方式
  • Referer 客户机从哪个页面来(防盗链)
  • Cookie
  • Connection(持久连接)

响应头:

  • Content-Length
  • Content-Type
  • Server 服务器名
  • Set-Cookie
  • Date

WEB常见漏洞

  • XSS攻击 插入恶意HTML代码
  • CSRF攻击 执行某些动作
  • SSRF攻击 攻击者构造安全漏洞
  • XXE漏洞 XML外部注入
  • SQL注入 利用SQL的语法
  • 暴力破解
  • 敏感信息泄露 Github等,社工
  • 文件包含 php等
  • 文件上传漏洞 上传限制
  • 命令执行漏洞 system、exec等控制参数
  • 条件竞争 并发处理不当
  • 点击劫持 iFrame嵌套不可见页面

常见工具

  • BurpSuite
  • Sqlmap
  • Hackbar 插件
  • nmap

PHP

  • $_GET 获取get表单
  • $_POST 获取post表单
  • $_SERVER 包含服务器和执行环境信息

php以<?PHP开始,?>结束。可以把php插到任意位置。

变量名以$开始,区分大小写。分成local、global、static、parameter。

echo和print都可以输出,但是echo可以输出多个参数,而print不可以。

对于多行输出,可以用EOF标识:

1
2
3
4
echo<<< EOF
good
qwq
EOF

这里的EOF可以换成任何字符。

PHP是弱类型,但是也有=====的差别。后者除了值还比较类型。

习题

签到

查看网页源代码。

答案在注释里。

VIM真香

仔细阅读提示:

the power was cut off.

这说明应该和vim保存文件有关。

根据已有知识,我们知道vim的保存文件格式是.swp ,所以我们访问http://xiabee.cn:7000/.index.html.swp 就可以得到flag。

getshell_1

用蚁剑连接一下,URL地址是http://xiabee.cn:7006/ ,连接密码是hacker ,然后就全都有了

EASY WEB

看到题目有个“备份是个好习惯”

看看有什么备份的可能,访问一下发现有index.php

考察php的备份文件,有两种,一种是加个~,一种是.bak

访问一下http://xiabee.cn:7002/index.php.bak ,得到一个备份文件

1
2
3
4
5
6
7
<?php 
$gg = $_GET['gg'];
echo base64_encode($gg);
$str = 'flag';
if($gg == base64_encode($str))
echo 'Well done! Next!';
?>

研究一下这个代码,发现是当gg参数等于flag的base64的时候会有一些事情发生

所以我们交http://xiabee.cn:7002/index.php?gg=ZmxhZw==上去,又得到了一串代码

1
2
3
4
$GG = $_POST[GG];
echo $GG;
if($GG == flag)
echo flag{xxxxxxxx};

这提示我们,应该要POST一个东西过去,并且参数是GG=flag

然后就得到答案了

攻防世界Web入门题

view_source

直接调用开发者工具即可

答案在注释里

get post

按照要求进行get和post即可

robots

直接访问robots.txt即可找到flag

backup

找bak文件即可

cookie

直接看cookie就行

disabled_button

进源代码把disabled属性移除掉

然后就可以按了

weak_auth

用BS直接爆破。

常用密码

command_execution

可以发现,ls是能够访问的。

然后就,找吧。

最终发现,在../../../home文件夹里有flag.txt。

当然这方法离谱。

假如我们知道名字确实是flag.txt,那么我们可以使用find / -name "flag.txt"

simple_php

php是弱类型语言。所以,'0a'==0 '123a'==123都是真的,但是'0a'===0是假。

利用这一特性,我们只需要构造a='0'&b='3333a'即可绕过。

xff_referer

根据提示先伪造xff,提示要求伪造referer,然后得到了结果。

simple_js

把源代码里那个东西先转成ASCII再转一次即可。。

至于原理搬一下题解

可以将源代码转化为

1
2
3
4
5
6
7
8
9
10
function dechiffre() {
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab2 = pass.split(',');
var i;
var p = "";
for (i = 0; i < tab2.length; i++) {
p += String.fromCharCode(tab2[i]);
}
return p;
}

就逻辑上可见它只是将内容为逗号分隔的数字的字符串转成相应编码的字符串。所以直接把那个代码替换pass然后执行即可。

Author

LittleRewriter

Posted on

2020-07-30

Updated on

2021-07-28

Licensed under

Comments