关于sql注入和xss的具体实例分析

发布于 2022-09-05 01:27:53 字数 1366 浏览 50 评论 0

一个月前我的个站被攻击了,然后今天收到了一份来自360的漏洞检测报告,我的天360还干这种事?

  • sql注入
    漏洞链接1:
    http: //xxx.com:80/index.php?alias=message&action=comment?comment-diary-id=1&comment-ip=182.118.33.8&comment-author=88888&comment-email=hacker@hacker.org&comment-url=http: //www.hacker.org/&comment-text=88888&comment-submit=SEND&comment-parent=0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END))
    漏洞链接2:
    http: //xxx.com:80/index.php?alias=message' AND SLEEP(5)%20%23
    漏洞链接3:
    http: //xxx.com:80/index.php?cat=note' AND 'dSob'='dSob

  • xss
    漏洞链接:
    http: //xxx.com:80/admin/login.php?req_url=/admin/index.php"><script>alert(42873)</script>

我在写入数据库时有使用addslashes为什么还会被注入?链接1和链接2要合在一起才会被注入吗?
对于第二个漏洞,我不太清楚应该怎么防御。
对站点安全研究不深入,请教大家给分析一下这是怎么实现的,以及如何修复漏洞,谢谢。
如果需要写入数据库的代码我再贴上。

PS,写链接会被sf自动缩短,所以在http:后面都加了个空格。


debug过了,的确是可以注入...对sql还是不够了解

最终写入数据库的语句是:

insert into comment values(NULL,1,1497261734,'88888',0,'hacker@hacker.org','http://www.hacker.org/','182.118.33.8','88888',0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END)) AND SLEEP(5)%20%23);

想请教一下最后一句是什么意思

0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END)) AND SLEEP(5)%20%23

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧伤还要旧人安 2022-09-12 01:27:53

以下是个人见解:

  1. 0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END)) AND SLEEP(5)%20%23 里面的 %20%23 后端程序接收后会变成“ #”(空格+井号),sql语句中#会注释掉其后的语句。因此在未过滤的情况下,sql执行的是 0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END)) AND SLEEP(5) #

  2. 从sleep()可以看出来,攻击者试图通过基于时间差的盲注来达到攻击的目的。运行如下语句:

    SELECT 0 RLIKE (SELECT (CASE WHEN (4725=4725) THEN 0 ELSE 0x28 END)) AND SLEEP(5);

    你会发现语句执行了5秒,如果把里面的4725=4725改成4725=4726,那么sql语句就会报错,这是只执行了0秒,通过0秒和5秒的差距,攻击者就可以知道自己的sql语句是否执行正确;这就是基于时间差的盲注的原理;

  3. 刚才那个sql语句还不具有攻击性,如果用下面这个就危险了:

    SELECT 0 RLIKE (SELECT (CASE WHEN (LENGTH(DATABASE()))=4 THEN 0 ELSE 0x28 END)) AND SLEEP(5);

    这个sql语句是判断我的数据库表名的长度是不是4,我的数据库名是news,所以执行了5秒,攻击者最终是可以猜出我的数据库名的(通过各种sql函数)。

  4. 产生注入的原因还是没有对客户端传过来的值进行有效过滤,至于过滤的方法,网上有很多,楼上也说了,另外采用addslashes过滤是不安全的,可以被绕过。

苄①跕圉湢 2022-09-12 01:27:53

xss 嵌套html腳本代碼,參數應該轉為html實體。函數htmlspecialchars

連接1系通過輸入mysql的關鍵字去進行mysql如今,應該需要將關鍵字過濾。

當然其實所有防止注入最好的方式是用預處理!!!!

烂柯人 2022-09-12 01:27:53
  1. 最好使用参数化查询,而不要使用SQL语句拼接的方式。

  2. xss可以通过参数过滤,将类似<script>这样的脚本代码过滤掉。

耳根太软 2022-09-12 01:27:53

你这代码完全没过滤啊

愿与i 2022-09-12 01:27:53

既然已经有人回答了攻击原理, 那么我就说说如何防御.

  • 对与sql注入如参数为数字型,入库语句最好加个强制转换(int),或将字符串拼接sql改成预处理语句.在数据库配置文件中开启严格模式并重启.

  • xss可以引用外部工具(HTMLPurifier扩展)来过滤,毕竟自写的方法覆盖不全.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文