事情起因是一个小博客群的群友发了一个留言板并且放出代码了。然后就好奇的下载下来研究一番

首先先看过滤

先进行了对某些字符进行转义,然后通过自己写的xss过滤函数进行屏蔽,先记下来看看有没有其他的错误。

这一步完全是通过token值进行验证。并且没有任何过滤,直接构造token即可进行注入。但是在后续验证时候仔细看了下,这个程序应该是改自其他程序,因为这个查询的数据表在导入生成的数据库中不存在,所以这句sql语句就导致了前半句直接报错。目前我没办法利用。

大概查看了一下对所有前台传进来的参数都进行了自定义函数xss_clean和系统函数daddslashes过滤掉了,sql注入似乎是没办法实现了。cookie验证地方可以绕过注入,但是查询的表不存在,导致前半句出错,目前不懂利用价值.

又看了一下,发现了搜索页面有个可以根据id搜索的sql语句

这里的变量id直接拼接进去了是没有用单引号包裹,那么就是我也不需要单引号闭合。相当于过了daddslashes然后xss过滤对sql语句也无效直接注入,后来查了下其他地方的id查询都用单引号包裹了,这这个地方应该是忽视了。

然后直接联合注入就好了,后面发现这个页面报错信息屏蔽了不显示,页面显示只显示查询结果的第一列。那就让前面的值不存在就行比如id=99999 最后语句就是

id=9999 union select 1 as id,1 as qq,k as realname,1 as towho,v as msg,1 as time,1 as zan from sillyli_config where id = 1

其中 k和v分别存的是键和值通过改变最后的id就可获得这个表的全部内容。其中后台账号密码都是明文。

进一步的提权测试就不会了QAQ

然后根据这个程序的信息找到了原版程序结果发现cookie还是没用,呃呃

但是相比这个多了个免费版的宝塔防火墙。直接联合注入就不行了。

测试发现虽然联合注入不行,但是测试发现堆叠注入就行了。但是由于不能联合注入了那么我该如和知道查询结果呢,将查询结果插入列表里?防火墙过滤了单引号以及char()等sql函数。最后我只能选择不会出现单引号的犯法了 既然没法显示那就修改成我知道的。



id=9999; update set v = 123 where id = 2;

因为数字不需要单引号所有直接将密码设置为123

后台只有简单留言管理,最后能力有限只限于后台了。