SQL注入这个坑
来源:互联网 发布:linux怎么看内存大小 编辑:程序博客网 时间:2024/06/13 08:37
SQL注入是一个老话题,没想到今天有同事在android framework踩到了这个坑,mark下。
业务需求要修改查询mmssms.db的一张表canonical_addresses,看到代码有点懵圈,类似如下:
ContentResolver cr = this.getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://mms/"), new String[]{"* from canonical_addresses where _id=1 --"}, null,null,null); if(null != cursor && cursor.getCount()>0){ StringBuilder stringBuilder = new StringBuilder(); while (cursor.moveToNext()){ String _id=cursor.getString(cursor.getColumnIndex("_id")); String address=cursor.getString(cursor.getColumnIndex("address")); stringBuilder.append("{"+_id+","+address+"}"); } tv.setText(stringBuilder.toString()); } else { tv.setText("no data"); }
在源码中一番搜索,SmsProvider在检查权限后只是简单的调用了query方法执行查询:
@Override public Cursor query(Uri url, String[] projectionIn, String selection, String[] selectionArgs, String sort) { final boolean accessRestricted = ProviderUtil.isAccessRestricted( getContext(), getCallingPackage(), Binder.getCallingUid()); final String smsTable = getSmsTable(accessRestricted); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); // Generate the body of the query. int match = sURLMatcher.match(url); switch (match) { case SMS_ALL: constructQueryForBox(qb, Sms.MESSAGE_TYPE_ALL, smsTable); break;......}......SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor ret = qb.query(db, projectionIn, selection, selectionArgs, null, null, orderBy);ret.setNotificationUri(getContext().getContentResolver(), NOTIFICATION_URI); return ret;}
仔细思索一番,发觉 “ --”在SQL的作用是注释,而上述代码会根据权限在qb中设置相应的table,然后生成正确的SQL语句执行。
这样以来,正确的SQL语句岂不是不起任何作用。想到这里突然反映过来应该是SQL注入,于是写下代码测试。去掉" -- "后,代码
果然出现了错误:
6916 8333 E TP/MmsProvider: android.database.sqlite.SQLiteException: near "SELECT": syntax error (code 1): , while compiling: SELECT * from canonical_addresses where _id=1 FROM pdu_restricted ORDER BY date DESC
想不明白,明明MmsSmsProvider可以查到该表,前辈高人为什么要使用这种"高招", 倘若是想叫后辈多学一技的话,这是十分感谢了!
SQL注入的技巧还是不少的,我们虽不能效仿有道德问题的黑客去祸害别人,但也不能不了解相关技术,防患于未然。
最后分享一个SQL注入的链接,共同学习:http://www.2cto.com/article/201501/370137.html
0 0
- SQL注入这个坑
- 用这个函数代替Request,可以防止SQL注入.
- SQL注入--GET注入
- 注入攻击--SQL注入
- 【sql注入】mysql注入
- SQL注入
- SQL注入
- SQL注入
- sql注入
- SQL注入
- SQL注入
- SQL注入
- SQL注入
- sql注入
- SQL注入
- SQL注入
- SQL注入
- SQL注入
- tomcat解析jsp错误
- jQuery-ui datepicker 日历选择器
- bash shell test条件测试[[ ]]和[ ]异同小结
- C++开发工程师课程第一周笔记 GeekBank
- 最短路模板
- SQL注入这个坑
- ECharts地图应用定位
- 关于PopupWindow的简单说明
- 微信小程序创建时:当前开发者未绑定此appid,请到mp后台操作
- iOS转场动画总结
- 学习HTML第一天
- 原生javascript设置获取行间样式及非行间样式的写法
- .\Objects\5.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.
- Android Studio 比较有用的插件。