Sqlilabs Less-24 - Second Oder Injections *Real treat* - Stored Injections

一直登陆不上这个鬼界面,无语,排了半天是发现没有带上cookie,这firefox不知道搞什么鬼,,,而且这且这个叫二次注入才比较合适,先把sql语句放入数据库,然后等数据再次提取出来(没有经过过滤)的时候才成功执行的注入,相比之下,less-5和less-6里面的算什么二次注入,名字真的乱。

Sqlilabs Less-24 - Second Degree Injections

手工注入

  • 尝试了半天,发现用户和密码均无注入点,然后就老实的登陆到界面中去,然后出现的是改密码的界面,也尝试过,同样没有注入。逛了半天发现有个注册界面,但是好像也不是什么可以利用的地方。。。还是直接看源码去了。

    源码分析

    • php脚本还是有不少的,依次看一遍,首先index.php中,只有两个东西,开头有个检查cookie的函数,如果有对应的cookie就转到logged-in.php,如果没有就提交登陆的表单到login.php。
    • login.php中是一个检查用户名是否成功登陆的页面,但是其中的sql语句有点问题: $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";提取用户名的时候没有做任何的限制,也就是说,如果我之前的用户名和密码里面有特殊的sql语句也是可以被执行的。
    • logged-in.php里面就是个改密码的界面,会把数据提交到pass_change.php文件中。
    • pass_change.php对更新的密码都做了处理,有个新函数mysql_affected_rows(),用于取得前一次 MySQL 操作所影响的记录行数。
    • 其余的都没什么了,让人无语的是那个忘记密码的,就一张破图。。。。
  • OK,知道哪里可以搞事那就来试试,在注册用户界面想插入语句,注册成功后,发现没有办法登陆,去后台登陆后才发现是长度限制了,那就只能插入注释符号,伪造admin用户登陆了。
  • 注册用户为admin'#,然后登陆后,直接改密码,然后重新用admin登陆,用刚刚重新改过的密码登陆,直接成功。
  • 从上图中可以看出#后面相当于被注释掉了,所以更改的其实就是'admin'的密码。

你可能感兴趣的:(#,SQLilabs)