本系列题目来源:CTFSHOW: https://ctf.show/challenges
sql注入作为常见且危害极大的漏洞,想搞好代码审计,必须将其拿下。
故以 CTF 来练习。
本文包含常见sql注入类型及过滤,还有常见注入类型python脚本编写。
直接开始
成功会先 id为1的用户密码。
1,2,3处都有回显
爆出库名 ctfshow_web
爆出表名 ctfshow_user
爆出列名 id,username,password
爆出字段内容
还可以直接抓包找到 api,直接爆出
流程就不来了,
直接
查询语句
//拼接sql语句查找指定ID用户 $sql="select id,username,password from ctfshow_user3 where username !='flag' and id='".$_GET['id']."' limit 1;"; 返回逻辑 //检查结果是否有flag if(!preg_match('/flag/i', json_encode($ret))){ $ret['msg']='查询成功'; }
过滤了返回字符串不能含有 flag,
那我们就将他十六进制编码即可。
查询语句
$sql="select username,password from ctfshow_user4 where username !='flag' and id='".$_GET['id']."' limit 1;";
//检查结果是否有flag
if(!preg_match('/flag|[0-9]/i', json_encode($ret))){
$ret['msg']='查询成功';
}
无回显,只好盲注了,
验证了成功可以盲注,之一位ascii是102,也就是
写个脚本。
好家伙,自增脚本结果也是废了一小段时间才跑出来。
那就再写一个二分法脚本:
结果快多了。
查询语句
$sql="select username,password from ctfshow_user5 where username !='flag' and id='".$_GET['id']."' limit 1;";
//检查结果是否有flag
if(!preg_match('/[\x00-\x7f]/i', json_encode($ret))){
$ret['msg']='查询成功';
}
匹配了基本 ascii 码值。也就是说基本页面不会回显数据库里的数据。
只会回显
尝试间件盲注成功。
if 函数, if判断,如果为真,返回b,否则返回c
继续写脚本
可是这个脚本耗费时间太长了,42*5 秒 多。
另一种解法:
把 flag 内容写入 文件
·查询语句
$sql="select id,username,password from ctfshow_user where username !='flag' and id='".$_GET['id']."' limit 1;";
//对传入的参数进行了过滤
function waf($str){
//代码过于简单,不宜展示
}
万能密码:
在表中 flag 直接回显
还可以大小写绕过:
反复测试,过滤了空格。
这个不可以 ,可以。
过滤空格可以使用绕过
表名,列名可以用反引号。
过滤了空格和
可以用代替空格,也就是
一把梭
经测试,过滤了空格、、
可以用绕过。
还可以一把梭
把所有能用的空格都过滤了。
换其他姿势,直接查 id
查询语句
$sql="select count(pass) from ".$_POST['tableName'].";";
//对传入的参数进行了过滤
function waf($str){
return preg_match('/ |*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|#|\x23|file|=|or|\x7c|select|and|flag|into/i', $str);
}
//返回用户表的记录总数
$user_count=0;
需要我们post传入参数
当传入时,有变化
说明有 22 行数据。
这里吧等于号过滤了,所以利用正则。
不能有空格,不能有 *
成功利用 where 条件匹配到 f
写个脚本
查询语句
$sql="select count(*) from ".$_POST['tableName'].";";
//对传入的参数进行了过滤
function waf($str){
return preg_match('', $str);
}
练习使用--os-shell 一键getshell
function decode($id){
return strrev(base64_decode(strrev(base64_decode($id))));
}
function waf($str){
return preg_match('/ |*/', $str);
}
https://zhuanlan.zhihu.com/p/58007573
直接getshell
payload:
写个脚本:
自增法:
有点慢,在写个二分法:
payload:
脚本:
payload:
查询语句
返回逻辑
function waf($str){
return preg_match('/sleep/i',$str);
}
过滤了 sleep 。
但是还有其他函数, mysql 时间盲注五种延时 ***
BENCHMARK(count,expr)
BENCHMARK会重复计算expr表达式count次,通过这种方式就可以评估出mysql执行这个expr表达式的效率。
那我们就让他计算很多次,时间不就长了吗?比如,大约3秒多(口数)
payload:
}
把也过滤了。
不过不慌还可以通过。
rpad(str,len,padstr)
返回字符串str,右填充以字符串str中垫到len字符长度。如果str为大于len,返回值被缩短至len个字符。
repeat(str,count)
返回由字符串str重复count次的字符串。 如果计数小于1,则返回一个空字符串。返回NULL如果str或count为NULL。
like 的内容不是正则,而是通配符
rlike 的内容可以是正则
如耗时 4 秒左右
但是从web有点奇怪,就只返回固定的一小段时间。差不多 1 秒。
换种方式,迪卡尔积
payload:
}
过滤了,,可以笛卡尔积。
return preg_match('/sleep|benchmark|rlike|ascii|hex|concat_ws|concat|mid|substr/i',$str);
}
使用 ord 代替 ascii
使用 locate 代替 substr
使用笛卡尔积
查询语句
$sql=select * from ctfshow_user limit ($page-1)*$limit,$limit;
//TODO:很安全,不需要过滤
//拿到数据库名字就算你赢
在后面可以跟两个函数,和,into需要写权限,一般不常见,但是在msyql5.7以后已经弃用,8.0直接删除了。。。
P牛文章
payload:
查询语句
//分页查询
$sql=select * from ctfshow_user group by $username;
返回逻辑
//TODO:很安全,不需要过滤
可使用盲注
payload
脚本:
与上题一样,不过是过滤了数字.那就利用 true 为 1
payload:
脚本:
可以看这里
查询语句
//分页查询
$sql="select id,username,pass from ctfshow_user where username='{$username}';";
返回逻辑
//师傅说过滤的越多越好
if(preg_match('/file|into|dump|union|select|update|delete|alter|drop|create|describe|set/i',$username)){
die(json_encode($ret));
}
过滤了很多,但没过滤 show ,可以配合 hander 读数据
https://blog.51cto.com/15023289/2559944
payload
还可以预编译
预编译也能用变量
//存储表名
//存储SQL语句
//预定义SQL语句
//执行预定义SQL语句
//删除预定义SQL语句
die(json_encode($ret));
}
过滤了和 括号,那就不能使用 concat 连接了。
使用十六进制编码
paylaod:
存储过程。
参考:
还是可以转十六进制。
过滤内容:
payload:
十六进制。
payload:
还是十六进制预编译
查询语句
$sql="update ctfshow_user set pass='{$password}' where username='{$username}';";
payload:
查询语句
$sql="update ctfshow_user set pass=md5('{$password}') where username='{$username}';";
和上一题一样的,
只不过闭合方式发生了变化。
payload:
时间盲注,
payload:
脚本:
过滤了单引号。可以利用实现单引号逃逸。
此时查询语句:
password就会变为。
payload:
2020母亲节朋友圈祝福语文案有哪些?小时候,总爱问妈妈很多问题,那些关于生活的细节,她们总是一一解答。长大后,询问的人却变成了妈妈,那些不断变化的世界,变成了一个个许久跳动一次的对话框,等待孩子的解...
健康之路王琦(健康之路|国医减肥有大招) 春去夏来,贴了一冬天的膘,消耗的怎么样了? 寒来暑往,细胳膊大长腿,你都百思特网准备好了吗? 你看惯了美颜相机里自己的盛世美颜, 是否还能接受高清镜头...
拼多多天才黑客疑被开除,这位黑客大佬究竟什么来头? 1、而他本人表示自己被拼多多开除的原因,是因为他不愿意协助拼多多公司向其他公司进行黑客攻击。2、而近期拼多多内部的天才黑客却被强制开除,这就让许多的...
网上安装师傅接单平台有哪些 接单平台app有:鲁班到家、万师傅、神工00户帮户、师傅邦笨鸟施工平台、笨鸟施工平台。家具安装师傅接活平台主要有以下几种:淘宝、京东、齐家网、万师傅、神工众志、鲁班到家、万...
删除的微信聊天记录怎么恢复?相信大家每天的都在使用微信进行交流,要是长时间不清理微信的聊天记录,就容易导致手机。 苹果微信聊天记录删除了怎么恢复? 微信聊天记录备份?微信是大家都熟知的一款社交工具,但...
黑客找被骗回来的钱相关问题 黑客数码动态壁纸相关问题 黑客什么专业的 如何判断ipad被入侵(如何查看ipad序列号)...