《网络攻防》 第十二周作业 SQL注入
SQL注入实践
1.打开seed虚拟机,使用命令sudo service apache2 start
启动apache,发现一条提示,意思就是不能可靠地确定域名,如图
即使右下角标着OK,但我还是不放心,但是,别人配置好的环境,不可能一上来就出问题啊!提示说用回送地址访问服务器,我就想,没域名也没关系,有ip就行了,反正发明域名的原因就是ip不好记,直接用ip皆可以了,然后,果然是可以的。
2.关闭对抗措施,建议使用sudo gedit php.ini
,gedit有图形化,sudo是为了有权限保存。
SELECT语句注入
题目要求是在不知道用户名密码的情况下,利用SQL注入漏洞登录进系统。
解决思路
- 初步的想法: 题目中给了包含SQL语句的登录源码,利用SQL注入的基本原理(教材P446-447),用OR+永真式通过用户名认证的检测,密码认证需要先经过MD5,我就想找到一个经过MD5哈希后内容为OR+永真式的字符串。
- 答案的做法: 答案的是在用户名输入
ted'#
,密码空着就行,ted是一个已经存在的用户名,用单引号结束这个字符串,用#转义掉后面的语句。获取用户名也很容易,直接点击memberlist就可以看到用户列表。 - 看了的答案之后的想法: 利用SQL中的注释,将后面的语句注释掉,替代#的作用,SQL中单行注释是--,后面最好加个空格,即输入
bob'--
,bob也是一个已知的用户名,经验证也是可以的。 - 一个新的发现: 只在用户名出输入单引号,会使这条SQL语句错误,或者其他使这条语句错误的方法,系统会报错并返回发生错误的源码,即可得到题目中给出的源码,如图,
也就是说,可以不用任何提示,就可以得到源码,并分析出漏洞。
UPDATE语句注入
题目要求在profile里面,在不知道其他人密码的情况下修改其资料。这个题没答案,只能自己做了。
解决思路
- 找到注入点: ** 在可供我们填写的框中,有四类:邮箱、密码、个人资料、时间格式。系统会对邮箱进行格式验证,会对密码记性MD5处理,这两处肯定不行。个人资料会被直接存入,不构成SQL语句字段。前三处我试了下,果然都不行,只有最后一处时间格式**。
- 获取更新资料的SQL源码: ** 仿照SELECT注入的思路,在时间格式处输入是SQL语句产生错误的语句,等待其返回SQL语句源码,如图,
返回的SQL语句如图,
从这条语句可以看出,前面修改资料的各项也都是可以注入的(除了signature项),打脸了。那么就随便找个注入吧,结果发现,这些注入点对输入长度有限制**,只能改短注入语句。注入语句如图,6为ted的编号,可通过memberlist查到
注意,实际的id编号是比在memberlist中大1的,ted在memberlist中编号为5,这点我是在错误语句中发现的,下图为我的memberlist截图,
选取的注入点为Interest输入框,这样就好改前面的语句,而且该框允许输入的内容较长,填写如图,
提示修改成功,没来的及截图,查看ted资料,修改成功,如图