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 | echo<<< 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 |
|
研究一下这个代码,发现是当gg
参数等于flag的base64的时候会有一些事情发生
所以我们交http://xiabee.cn:7002/index.php?gg=ZmxhZw==
上去,又得到了一串代码
1 | $GG = $_POST[GG]; |
这提示我们,应该要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 | function dechiffre() { |
就逻辑上可见它只是将内容为逗号分隔的数字的字符串转成相应编码的字符串。所以直接把那个代码替换pass然后执行即可。